OpenvSwitch関連コマンドのチートシート的な何か
まずOpenvSwitchに関するコマンドは大きく4つです。観点としてはOpenStackで使ったときにトラブルシューティングで使いそうなものが多いかもしれません。
Neutronってよくわらかないって人は、以下も参照してみるとイメージが付きやすいと思います。
- ovs-vsctl
- Used for configuring the ovs-vswitchd configuration database (known as ovs-db)
- ovs-ofctl
- A command line tool for monitoring and administering OpenFlow switches
- ovs-dpctl
- Used to administer Open vSwitch datapaths
- ovs−appctl
- Used for querying and controlling Open vSwitch daemons
1. ovs-vsctlコマンド
ovs-vsctlって何?
マニュアルにも「ovs-vsctl connects to an ovsdb-server process that maintains an Open vSwitch configuration database.」の記載がある通りovsdb-serverプロセスを操作するためのコマンドです。ovs-vsctlを叩いた時の内部的な動きはざっくり以下の通りです。
ovs-vsctl -> ovsdb-server <-> ovs-vswitchd <-> openvswitch_mod -> ovsdb
※ openvswitch_mod(datapath)はパケットの転送処理を行うカーネルモジュールです。
参考までにプロトコル番号です。
management(OVSDB) Channel TCP/6632 Openflow channel TCP/6633
せっかくなのでkiloのレポジトリから取ってきました。バージョンは以下の通りです。
[komei@localhost ~]# ovs-vsctl -V ovs-vsctl (Open vSwitch) 2.3.1 Compiled Dec 26 2014 15:35:14 DB Schema 7.6.2
ovsdb-serverはデフォルトで/var/run/openvswitch/db.sockファイルを使用します。このファイルをコピーすれば設定情報は復元できます。
[komei@localhost ~]# ps aux | grep open root 21413 0.0 0.5 46488 2528 ? S< 6月17 0:12 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 root 21426 0.0 7.0 268568 35180 ? S<Ll 6月17 4:23 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
ovs-vsctlのオプション
databaseファイルを指定
[komei@localhost ~]# ovs-vsctl --db=unix:/var/run/openvswitch/db.sock show ed7907f7-314f-465d-8971-e6a8792c9dfd Bridge br-int Port "qr-peer2" tag: 2 Interface "qr-peer2" Port br-int Interface br-int type: internal Port "vm-peer1" Interface "vm-peer1" Port "vm-peer2" tag: 2 Interface "vm-peer2" Port "ns-peer2" tag: 2 Interface "ns-peer2" Port "qr-peer1" Interface "qr-peer1" Bridge br-ex Port "qg-peer1" Interface "qg-peer1" Port "qg-peer2" Interface "qg-peer2" Port "pub-peer1" Interface "pub-peer1" Port br-ex Interface br-ex type: internal ovs_version: "2.3.1"
外部のovsdbへ接続
ovsdbへの外部アクセスに備えてlistenする
- ptcp:port[:ip]
- pssl;port[:ip]
openvswitchのsyslog
--no-syslogでsyslogへの出力を制御できる
デフォルトでは以下の通りsyslog形式でログが出力されています。
[komei@localhost ~]# cat /var/log/messages | grep ovs-vsctl Jun 23 00:01:26 localhost ovs-vsctl: ovs|00001|vsctl|ERR|'list' command requires at least 1 arguments
他には以下のオプションもあります。
--log-file[=file]
デフォルトでは/var/log/openvswitch/ovs-vsctl.logです
その他の便利なオプション
--dry-run
--timeout=secs
--syslog-target=host:port
ovs-vsctlの確認コマンド
Bridgeのリスト
[komei@localhost ~]# ovs-vsctl list-br br-ex br-int
Bridgeの存在確認
[komei@localhost ~]# ovs-vsctl br-exists br-ex1 [komei@localhost ~]# echo $? 2 [komei@localhost ~]# ovs-vsctl br-exists br-ex [komei@localhost ~]# echo $? 0
Bridgeのリスト確認
[komei@localhost ~]# ovs-vsctl list-ports br-ex pub-peer1 qg-peer1 qg-peer2 [komei@localhost ~]# ovs-vsctl list-ports br-int ns-peer2 qr-peer1 qr-peer2 vm-peer1 vm-peer2
ポートがどのBridgeに接続されているか
[komei@localhost ~]# ovs-vsctl port-to-br pub-peer1 br-ex
OpenFlowコントローラーの確認
[komei@localhost ~]# ovs-vsctl get-controller br-ex
set-controllerもあります。opendaylightのエントリで書いたような記憶もありますが。
蛇足ですがNetFlowやsFlowにも対応しています。あとMirroringやQoS、GREトンネルにも対応しています。
[komei@localhost ~]# ovs-vsctl add-port br0 gre0 --set Interface gre0 type=gre options:remote_ip=1.2.3.4
ovs-ofctl
ovs-ofctlって何?
openvswichのopen flow部分を見るコマンドです。
OpenflowスイッチとしてのBridge確認
[komei@localhost ~]# ovs-ofctl show br-ex OFPT_FEATURES_REPLY (xid=0x2): dpid:00001237cc5df04d n_tables:254, n_buffers:256 capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP actions: OUTPUT SET_VLAN_VID SET_VLAN_PCP STRIP_VLAN SET_DL_SRC SET_DL_DST SET_NW_SRC SET_NW_DST SET_NW_TOS SET_TP_SRC SET_TP_DST ENQUEUE 1(qg-peer1): addr:ea:9c:0d:31:eb:4b config: 0 state: 0 current: 10GB-FD COPPER speed: 10000 Mbps now, 0 Mbps max 2(pub-peer1): addr:82:ca:37:c4:9c:1d config: 0 state: 0 current: 10GB-FD COPPER speed: 10000 Mbps now, 0 Mbps max 3(qg-peer2): addr:1a:13:3c:79:30:12 config: 0 state: 0 current: 10GB-FD COPPER speed: 10000 Mbps now, 0 Mbps max LOCAL(br-ex): addr:12:37:cc:5d:f0:4d config: 0 state: 0 speed: 0 Mbps now, 0 Mbps max OFPT_GET_CONFIG_REPLY (xid=0x4): frags=normal miss_send_len=0
flowのstatisticsを確認
[komei@localhost ~]# ovs-ofctl dump-flows br-int NXST_FLOW reply (xid=0x4): cookie=0x0, duration=488096.484s, table=0, n_packets=48, n_bytes=3800, idle_age=65534, hard_age=65534, priority=0 actions=NORMAL
openvswitch Portのstatistics
[komei@localhost ~]# ovs-ofctl dump-ports br-int qr-peer2 OFPST_PORT reply (xid=0x4): 1 ports port 3: rx pkts=145, bytes=13290, drop=0, errs=0, frame=0, over=0, crc=0 tx pkts=161, bytes=14586, drop=0, errs=0, coll=0
ovs-dpctl
ovs-dpctlって何?
ovs-dpctlはデータパス部分の設定や確認をするコマンドです。
openvswitchのdata path確認
[komei@localhost ~]# ovs-dpctl dump-dps system@ovs-system
openvswitchを通過するflow一覧を表示
- まだ何も表示されない
[komei@localhost ~]# ovs-dpctl dump-flows
- Pingを打って通信を発生させる
[komei@localhost ~]# ip netns exec qpublic ping 192.168.101.12 PING 192.168.101.12 (192.168.101.12) 56(84) bytes of data. 64 bytes from 192.168.101.12: icmp_seq=1 ttl=63 time=0.322 ms 64 bytes from 192.168.101.12: icmp_seq=2 ttl=63 time=0.224 ms
- 再度表示
[komei@localhost ~]# ovs-dpctl dump-flows recirc_id(0),skb_priority(0),in_port(5),eth(src=e2:26:c6:c9:1b:72,dst=26:81:8d:99:47:80),eth_type(0x0800),ipv4(src=192.168.101.200/0.0.0.0,dst=192.168.101.12/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:1, bytes:98, used:0.140s, actions:10 recirc_id(0),skb_priority(0),in_port(7),eth(src=4a:f3:46:10:ec:34,dst=c6:79:ae:27:8e:db),eth_type(0x0800),ipv4(src=192.168.101.12/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=63/0,frag=no/0xff), packets:1, bytes:98, used:0.140s, actions:9 recirc_id(0),skb_priority(0),in_port(9),eth(src=c6:79:ae:27:8e:db,dst=4a:f3:46:10:ec:34),eth_type(0x0800),ipv4(src=10.0.0.3/0.0.0.0,dst=192.168.101.12/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:2, bytes:196, used:0.140s, actions:7 recirc_id(0),skb_priority(0),in_port(10),eth(src=26:81:8d:99:47:80,dst=e2:26:c6:c9:1b:72),eth_type(0x0800),ipv4(src=192.168.101.12/0.0.0.0,dst=192.168.101.200/0.0.0.0,proto=1/0,tos=0/0,ttl=63/0,frag=no/0xff), packets:2, bytes:196, used:0.140s, actions:5
- statisticsを確認
[komei@localhost ~]# ovs-ofctl dump-flows br-int NXST_FLOW reply (xid=0x4): cookie=0x0, duration=488404.848s, table=0, n_packets=130, n_bytes=11388, idle_age=0, hard_age=65534, priority=0 actions=NORMAL [komei@localhost ~]# ovs-ofctl dump-flows br-int NXST_FLOW reply (xid=0x4): cookie=0x0, duration=488405.936s, table=0, n_packets=132, n_bytes=11584, idle_age=0, hard_age=65534, priority=0 actions=NORMAL
その他
MACアドレステーブル確認
[komei@localhost ~]# ovs-appctl fdb/show br-ex port VLAN MAC Age 1 0 5e:6e:bb:98:eb:d5 5 2 0 e2:26:c6:c9:1b:72 1 3 0 26:81:8d:99:47:80 1 [komei@localhost ~]# ovs-appctl fdb/show br-int port VLAN MAC Age 2 0 42:8a:36:9d:7d:21 7 1 0 06:b0:47:10:06:32 7 3 2 4a:f3:46:10:ec:34 1
※ Ageはデフォルトで300秒
[komei@localhost ~]# ip netns exec qpublic ip a 15: pub-veth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether e2:26:c6:c9:1b:72 brd ff:ff:ff:ff:ff:ff inet 192.168.101.200/24 scope global pub-veth1 valid_lft forever preferred_lft forever inet6 fe80::e026:c6ff:fec9:1b72/64 scope link valid_lft forever preferred_lft forever
23: qg-veth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 26:81:8d:99:47:80 brd ff:ff:ff:ff:ff:ff inet 192.168.101.9/24 scope global qg-veth2 valid_lft forever preferred_lft forever inet 192.168.101.12/32 scope global qg-veth2 valid_lft forever preferred_lft forever inet6 fe80::2481:8dff:fe99:4780/64 scope link valid_lft forever preferred_lft forever
17: qr-veth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 4a:f3:46:10:ec:34 brd ff:ff:ff:ff:ff:ff inet 10.0.0.1/8 scope global qr-veth2 valid_lft forever preferred_lft forever inet6 fe80::48f3:46ff:fe10:ec34/64 scope link valid_lft forever preferred_lft forever
21: vm-veth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether c6:79:ae:27:8e:db brd ff:ff:ff:ff:ff:ff inet 10.0.0.3/8 scope global vm-veth2 valid_lft forever preferred_lft forever inet6 fe80::c479:aeff:fe27:8edb/64 scope link valid_lft forever preferred_lft forever
※ qvo, qvb, tapとかが入っているのを確認。
MACアドレスのテーブルサイズ変更
openvswitchで設定できるテーブルサイズ
other_config : mac-table-size: optional string, containing an integer, at least 1 The maximum number of MAC addresses to learn. The default is currently 2048. The value, if specified, is forced into a reasonable range, cur‐ rently 10 to 1,000,000.
現在のテーブルサイズ確認
[komei@localhost ~]# ovs-vsctl list bridge br-int _uuid : 4fc8c288-5a54-41ed-85f4-854eaf1f31fd controller : [] datapath_id : "00008ac2c84fed41" datapath_type : "" external_ids : {} fail_mode : [] flood_vlans : [] flow_tables : {} ipfix : [] mirrors : [] name : br-int netflow : [] other_config : {mac-table-size="4096"} ports : [01e94661-0d5d-4154-b931-2f05068de40f, 25f9a4ed-7f73-4069-a9e2-fd67d4b870b4, 9c08bee6-0304-4cb5-82a4-676806f6e94e, d013c5a1-2e70-4e87-8d7a-5759b4e9cd22, e8245b4a-7be5-4cc8-a8f0-3f5f10b6f247, f09afbd4-7477-4de7-acf0-e42ee7edd9eb] protocols : [] sflow : [] status : {} stp_enable : false
テーブルサイズ変更
[komei@localhost ~]# ovs-vsctl set Bridge br-int other_config:mac-table-size=8192 [komei@localhost ~]# ovs-vsctl list bridge br-int _uuid : 4fc8c288-5a54-41ed-85f4-854eaf1f31fd controller : [] datapath_id : "00008ac2c84fed41" datapath_type : "" external_ids : {} fail_mode : [] flood_vlans : [] flow_tables : {} ipfix : [] mirrors : [] name : br-int netflow : [] other_config : {mac-table-size="8192"} ports : [01e94661-0d5d-4154-b931-2f05068de40f, 25f9a4ed-7f73-4069-a9e2-fd67d4b870b4, 9c08bee6-0304-4cb5-82a4-676806f6e94e, d013c5a1-2e70-4e87-8d7a-5759b4e9cd22, e8245b4a-7be5-4cc8-a8f0-3f5f10b6f247, f09afbd4-7477-4de7-acf0-e42ee7edd9eb] protocols : [] sflow : [] status : {} stp_enable : false
何故か設定範囲を超えた値が入る気が・・・
[komei@localhost ~]# ovs-vsctl set Bridge br-int other_config:mac-table-size=1000000000 [komei@localhost ~]# ovs-vsctl list bridge br-int _uuid : 4fc8c288-5a54-41ed-85f4-854eaf1f31fd controller : [] datapath_id : "00008ac2c84fed41" datapath_type : "" external_ids : {} fail_mode : [] flood_vlans : [] flow_tables : {} ipfix : [] mirrors : [] name : br-int netflow : [] other_config : {mac-table-size="1000000000"} ports : [01e94661-0d5d-4154-b931-2f05068de40f, 25f9a4ed-7f73-4069-a9e2-fd67d4b870b4, 9c08bee6-0304-4cb5-82a4-676806f6e94e, d013c5a1-2e70-4e87-8d7a-5759b4e9cd22, e8245b4a-7be5-4cc8-a8f0-3f5f10b6f247, f09afbd4-7477-4de7-acf0-e42ee7edd9eb] protocols : [] sflow : [] status : {} stp_enable : false
現在のテーブル数確認
お好みで。
sudo ovs-appctl fdb/show br-int | wc -l
シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。
OpenStackクラウドインテグレーション オープンソースクラウドによるサービス構築入門
- 作者: 日本OpenStackユーザ会
- 出版社/メーカー: 翔泳社
- 発売日: 2015/01/28
- メディア: 大型本
- この商品を含むブログ (1件) を見る
オープンソース・クラウド基盤 OpenStack入門 構築・利用方法から内部構造の理解まで (アスキー書籍)
- 作者: 中井悦司,中島倫明
- 出版社/メーカー: KADOKAWA / アスキー・メディアワークス
- 発売日: 2014/06/03
- メディア: Kindle版
- この商品を含むブログ (2件) を見る