スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


スポンサー広告 | --:--:--
Fedora 22 の Open vSwitch が機能しなくなった

Fedora 22 の Open vSwitch が突然機能しなくなった顛末。原因不明だけど、暫定対処の方法までは判っているので書いておく。

突然 Open vSwitch が動作しなくなった

Fedora 22 のデスクトップマシンの Open vSwitch で構成されたネットワークが突然動作しなくなった。(もちろん再起動しても解決したりはしない)

ovs-vsctl show で Open vSwitch の設定は存在するのに、ip link show で見ると、Open vSwitch のブリッジが存在しない。

# ip link show      
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: p3p1:  mtu 7000 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 00:a0:b0:xx:xx:xx brd ff:ff:ff:ff:ff:ff
3: em1:  mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 00:27:0e:yy:yy:yy brd ff:ff:ff:ff:ff:ff
4: p2p1:  mtu 7000 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 00:1b:21:zz:zz:zz brd ff:ff:ff:ff:ff:ff

network の状態を確認すると、どうも Open vSwitch のインタフェースを認識できていない

# systemctl status -l network
* network.service - LSB: Bring up/down networking
   Loaded: loaded (/etc/rc.d/init.d/network)
   Active: active (exited) since Sat 2015-09-05 18:33:38 JST; 9min ago
     Docs: man:systemd-sysv-generator(8)
  Process: 914 ExecStart=/etc/rc.d/init.d/network start (code=exited, status=0/SUCCESS)

Sep 05 18:33:33 xxx.home.yyy.net ovs-vsctl[1785]: ovs|00001|vsctl|INFO|Called as ovs-vsctl -t 10 -- --may-exist add-br ovsbr0
Sep 05 18:33:33 xxx.home.yyy.net network[914]: [  OK  ]
Sep 05 18:33:38 xxx.home.yyy.net network[914]: インターフェース em1 を活性化中:  [  OK  ]
Sep 05 18:33:38 xxx.home.yyy.net ovs-vsctl[1930]: ovs|00001|vsctl|INFO|Called as ovs-vsctl -t 10 -- --may-exist add-br ovsbr0
Sep 05 18:33:38 xxx.home.yyy.net network[914]: インターフェース ovsbr0 を活性化中:  エラー: [/etc/sysconfig/network-scripts/ifup-eth] デバイス ovsbr0 は存在しないようですので、初期化を遅らせます。
Sep 05 18:33:38 xxx.home.yyy.net network[914]: [  OK  ]
Sep 05 18:33:38 xxx.home.yyy.net ovs-vsctl[1965]: ovs|00001|vsctl|INFO|Called as ovs-vsctl -t 10 -- --may-exist add-br ovsbr1
Sep 05 18:33:38 xxx.home.yyy.net network[914]: インターフェース ovsbr1 を活性化中:  エラー: [/etc/sysconfig/network-scripts/ifup-eth] デバイス ovsbr1 は存在しないようですので、初期化を遅らせます。
Sep 05 18:33:38 xxx.home.yyy.net network[914]: [  OK  ]
Sep 05 18:33:38 xxx.home.yyy.net systemd[1]: Started LSB: Bring up/down networking.

openvswitch-nonetwork の状態を確認すると、モジュールのロードで失敗している

# systemctl status -l openvswitch-nonetwork.service
* openvswitch-nonetwork.service - Open vSwitch Internal Unit
   Loaded: loaded (/usr/lib/systemd/system/openvswitch-nonetwork.service; static; vendor preset: disabled)
   Active: active (exited) since Sat 2015-09-05 18:33:29 JST; 10min ago
  Process: 690 ExecStart=/usr/share/openvswitch/scripts/ovs-ctl start --system-id=random $OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 690 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/openvswitch-nonetwork.service
           |-851 ovsdb-server: monitoring pid 852 (healthy)                                                                                                                                                                                                                                                                                                                                                          
           `-852 ovsdb-server /etc/openvswitch/conf.db -vconsole:emer -vsyslog:err -vfile:info --remote=punix:/var/run/openvswitch/db.sock --private-key=db:Open_vSwitch,SSL,private_key --certificate=db:Open_vSwitch,SSL,certificate --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert --no-chdir --log-file=/var/log/openvswitch/ovsdb-server.log --pidfile=/var/run/openvswitch/ovsdb-server.pid --detach --monitor

Sep 05 18:33:29 xxx.home.yyy.net systemd[1]: Starting Open vSwitch Internal Unit...
Sep 05 18:33:29 xxx.home.yyy.net ovs-ctl[690]: Starting ovsdb-server [  OK  ]
Sep 05 18:33:29 xxx.home.yyy.net ovs-vsctl[853]: ovs|00001|vsctl|INFO|Called as ovs-vsctl --no-wait -- init -- set Open_vSwitch . db-version=7.6.2
Sep 05 18:33:29 xxx.home.yyy.net ovs-vsctl[858]: ovs|00001|vsctl|INFO|Called as ovs-vsctl --no-wait set Open_vSwitch . ovs-version=2.3.2 "external-ids:system-id=\"9a378e72-d03e-4c2c-ab46-4e21333026b0\"" "system-type=\"Fedora\"" "system-version=\"22-TwentyTwo\"" 
Sep 05 18:33:29 xxx.home.yyy.net ovs-ctl[690]: Configuring Open vSwitch system IDs [  OK  ]
Sep 05 18:33:29 xxx.home.yyy.net systemd[1]: Started Open vSwitch Internal Unit.
Sep 05 18:33:29 xxx.home.yyy.net ovs-ctl[690]: Inserting openvswitch module [FAILED]
Sep 05 18:33:29 xxx.home.yyy.net ovs-ctl[690]: Enabling remote OVSDB managers [  OK  ]

lsmod で確認すると確かにモジュールが読み込まれていない

# lsmod | grep openvswitch

問題の切り分け

モジュールが読み込まれれば問題は解消するのか?ということで、起動後にモジュールを手動で組み込んで、サービスを再起動させてみると Open vSwitch は正常に動作するようになった。

# modprobe openvswitch
# lsmod | grep openvswitch
openvswitch            94208  0
libcrc32c              16384  1 openvswitch
# systemctl restart openvswitch-nonetwork.service
# systemctl status -l openvswitch-nonetwork.service [D
* openvswitch-nonetwork.service - Open vSwitch Internal Unit
   Loaded: loaded (/usr/lib/systemd/system/openvswitch-nonetwork.service; static; vendor preset: disabled)
   Active: active (exited) since Sat 2015-09-05 18:48:41 JST; 11s ago
  Process: 3431 ExecStop=/usr/share/openvswitch/scripts/ovs-ctl stop (code=exited, status=0/SUCCESS)
  Process: 3535 ExecStart=/usr/share/openvswitch/scripts/ovs-ctl start --system-id=random $OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 3535 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/openvswitch-nonetwork.service
           |-3647 ovsdb-server: monitoring pid 3648 (healthy)                                                                                                                                                                                                                                                                                                                                                         
           |-3648 ovsdb-server /etc/openvswitch/conf.db -vconsole:emer -vsyslog:err -vfile:info --remote=punix:/var/run/openvswitch/db.sock --private-key=db:Open_vSwitch,SSL,private_key --certificate=db:Open_vSwitch,SSL,certificate --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert --no-chdir --log-file=/var/log/openvswitch/ovsdb-server.log --pidfile=/var/run/openvswitch/ovsdb-server.pid --detach --monitor
           |-3657 ovs-vswitchd: monitoring pid 3658 (healthy)                                                                                                                                                                                     
           `-3658 ovs-vswitchd unix:/var/run/openvswitch/db.sock -vconsole:emer -vsyslog:err -vfile:info --mlockall --no-chdir --log-file=/var/log/openvswitch/ovs-vswitchd.log --pidfile=/var/run/openvswitch/ovs-vswitchd.pid --detach --monitor

Sep 05 18:48:41 xxx.home.yyy.net systemd[1]: Starting Open vSwitch Internal Unit...
Sep 05 18:48:41 xxx.home.yyy.net ovs-ctl[3535]: Starting ovsdb-server [  OK  ]
Sep 05 18:48:41 xxx.home.yyy.net ovs-vsctl[3649]: ovs|00001|vsctl|INFO|Called as ovs-vsctl --no-wait -- init -- set Open_vSwitch . db-version=7.6.2
Sep 05 18:48:41 xxx.home.yyy.net ovs-vsctl[3654]: ovs|00001|vsctl|INFO|Called as ovs-vsctl --no-wait set Open_vSwitch . ovs-version=2.3.2 "external-ids:system-id=\"9a378e72-d03e-4c2c-ab46-4e21333026b0\"" "system-type=\"Fedora\"" "system-version=\"22-TwentyTwo\"" 
Sep 05 18:48:41 xxx.home.yyy.net ovs-ctl[3535]: Configuring Open vSwitch system IDs [  OK  ]
Sep 05 18:48:41 xxx.home.yyy.net ovs-ctl[3535]: Starting ovs-vswitchd [  OK  ]
Sep 05 18:48:41 xxx.home.yyy.net ovs-ctl[3535]: Enabling remote OVSDB managers [  OK  ]
Sep 05 18:48:41 xxx.home.yyy.net systemd[1]: Started Open vSwitch Internal Unit.

インタフェースの状態を確認すると問題なさそうなので、ネットワークを再起動する。

# ip link show
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: p3p1:  mtu 7000 qdisc fq_codel master ovs-system state UP mode DEFAULT group default qlen 1000
    link/ether 00:a0:b0:xx:xx:xx brd ff:ff:ff:ff:ff:ff
3: em1:  mtu 1500 qdisc fq_codel master ovs-system state UP mode DEFAULT group default qlen 1000
    link/ether 00:27:0e:yy:yy:yy brd ff:ff:ff:ff:ff:ff
4: p2p1:  mtu 7000 qdisc fq_codel master ovs-system state UP mode DEFAULT group default qlen 1000
    link/ether 00:1b:21:zz:zz:zz brd ff:ff:ff:ff:ff:ff
5: ovs-system@NONE:  mtu 1500 qdisc noop state DOWN mode DEFAULT group default 
    link/ether f2:1f:bc:ww:ww:ww brd ff:ff:ff:ff:ff:ff
6: ovsbr0@NONE:  mtu 7000 qdisc noop state DOWN mode DEFAULT group default 
    link/ether 00:1b:21:zz:zz:zz brd ff:ff:ff:ff:ff:ff
7: bond0@NONE:  mtu 1500 qdisc noop state DOWN mode DEFAULT group default 
    link/ether e6:dd:87:vv:vv:vv brd ff:ff:ff:ff:ff:ff
8: ovsbr1@NONE:  mtu 1500 qdisc noop state DOWN mode DEFAULT group default 
    link/ether 00:27:0e:yy:yy:yy brd ff:ff:ff:ff:ff:ff
# systemctl restart network

これでネットワークが正常に復帰することが確認できた。

暫定対処

問題のモジュール組込みNG の処理は /usr/share/openvswitch/scripts/ovs-ctl の insert_mod_if_required 関数の中にある。以下はその抜粋。

insert_mod_if_required () {
    # If openvswitch is already loaded then we're done.
    test -e /sys/module/openvswitch -o -e /sys/module/openvswitch_mod && \
     return 0

    # Load openvswitch.  If that's successful then we're done.
    action "Inserting openvswitch module" modprobe openvswitch && return 0

ここでモジュールの読み出しに失敗してしまう理由がよく判らない。

考えられる要因は当たってみたが、どうにも見当がつかないので、ひとまず暫定対処をすることにした。

起動時に openvswitch モジュールが読み込まれるように設定する。以下のようにモジュール組込みを記述して再起動すると、

# cat /etc/modules-load.d/openvswitch.conf 
# load module before openvswitch service
openvswitch

ネットワークの初期化は正常に動作するようになった。

# systemctl status -l network
* network.service - LSB: Bring up/down networking
   Loaded: loaded (/etc/rc.d/init.d/network)
   Active: active (exited) since Sat 2015-09-05 19:31:40 JST; 12min ago
     Docs: man:systemd-sysv-generator(8)
  Process: 944 ExecStart=/etc/rc.d/init.d/network start (code=exited, status=0/SUCCESS)

Sep 05 19:31:25 xxx.home.yyy.net ovs-vsctl[1762]: ovs|00001|vsctl|INFO|Called as ovs-vsctl -t 10 -- --fake-iface add-bond ovsbr0 bond0 p2p1 p3p1 bond_mode=balance-slb lacp=off
Sep 05 19:31:25 xxx.home.yyy.net network[944]: インターフェース bond0 を活性化中:  ovs-vsctl: cannot create a port named bond0 because a port named bond0 already exists on bridge ovsbr0
Sep 05 19:31:26 xxx.home.yyy.net ovs-vsctl[1854]: ovs|00001|vsctl|INFO|Called as ovs-vsctl -t 10 -- --may-exist add-br ovsbr0
Sep 05 19:31:26 xxx.home.yyy.net network[944]: [  OK  ]
Sep 05 19:31:31 xxx.home.yyy.net network[944]: インターフェース em1 を活性化中:  [  OK  ]
Sep 05 19:31:31 xxx.home.yyy.net ovs-vsctl[2004]: ovs|00001|vsctl|INFO|Called as ovs-vsctl -t 10 -- --may-exist add-br ovsbr0
Sep 05 19:31:36 xxx.home.yyy.net network[944]: インターフェース ovsbr0 を活性化中:  [  OK  ]
Sep 05 19:31:36 xxx.home.yyy.net ovs-vsctl[2119]: ovs|00001|vsctl|INFO|Called as ovs-vsctl -t 10 -- --may-exist add-br ovsbr1
Sep 05 19:31:40 xxx.home.yyy.net network[944]: インターフェース ovsbr1 を活性化中:  [  OK  ]
Sep 05 19:31:40 xxx.home.yyy.net systemd[1]: Started LSB: Bring up/down networking.
# systemctl status -l openvswitch-nonetwork
* openvswitch-nonetwork.service - Open vSwitch Internal Unit
   Loaded: loaded (/usr/lib/systemd/system/openvswitch-nonetwork.service; static; vendor preset: disabled)
   Active: active (exited) since Sat 2015-09-05 19:31:22 JST; 13min ago
  Process: 704 ExecStart=/usr/share/openvswitch/scripts/ovs-ctl start --system-id=random $OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 704 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/openvswitch-nonetwork.service
           |-849 ovsdb-server: monitoring pid 850 (healthy)                                                                                                                                                                                                                                                                                                                                                          
           |-850 ovsdb-server /etc/openvswitch/conf.db -vconsole:emer -vsyslog:err -vfile:info --remote=punix:/var/run/openvswitch/db.sock --private-key=db:Open_vSwitch,SSL,private_key --certificate=db:Open_vSwitch,SSL,certificate --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert --no-chdir --log-file=/var/log/openvswitch/ovsdb-server.log --pidfile=/var/run/openvswitch/ovsdb-server.pid --detach --monitor
           |-861 ovs-vswitchd: monitoring pid 862 (healthy)                                                                                                                                                                                      
           `-862 ovs-vswitchd unix:/var/run/openvswitch/db.sock -vconsole:emer -vsyslog:err -vfile:info --mlockall --no-chdir --log-file=/var/log/openvswitch/ovs-vswitchd.log --pidfile=/var/run/openvswitch/ovs-vswitchd.pid --detach --monitor

Sep 05 19:31:22 xxx.home.yyy.net systemd[1]: Starting Open vSwitch Internal Unit...
Sep 05 19:31:22 xxx.home.yyy.net ovs-ctl[704]: Starting ovsdb-server [  OK  ]
Sep 05 19:31:22 xxx.home.yyy.net ovs-vsctl[853]: ovs|00001|vsctl|INFO|Called as ovs-vsctl --no-wait -- init -- set Open_vSwitch . db-version=7.6.2
Sep 05 19:31:22 xxx.home.yyy.net ovs-vsctl[858]: ovs|00001|vsctl|INFO|Called as ovs-vsctl --no-wait set Open_vSwitch . ovs-version=2.3.2 "external-ids:system-id=\"9a378e72-d03e-4c2c-ab46-4e21333026b0\"" "system-type=\"Fedora\"" "system-version=\"22-TwentyTwo\"" 
Sep 05 19:31:22 xxx.home.yyy.net ovs-ctl[704]: Configuring Open vSwitch system IDs [  OK  ]
Sep 05 19:31:22 xxx.home.yyy.net ovs-ctl[704]: Starting ovs-vswitchd [  OK  ]
Sep 05 19:31:22 xxx.home.yyy.net ovs-ctl[704]: Enabling remote OVSDB managers [  OK  ]
Sep 05 19:31:22 xxx.home.yyy.net systemd[1]: Started Open vSwitch Internal Unit.


Linux | 20:06:42 | トラックバック(0) | コメント(0)
コメントの投稿

管理者にだけ表示を許可する

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。