通過
git clone git://openvswitch.org/openvswitch下載ovs代碼到本地,運行boot.sh,如果遇到提示autoconf版本過低,可以去找最新的autoconf m4等rpm包安裝或者通過yum update更新,也可以去下一個較新的包自己裝下,e.g. http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
之後就是 configure --with-linux=/lib/modules/`uname -r`/build
make
make install 默認安裝在/usr/local下
下面開始安裝ovs,對於下列步驟最好寫個腳本放到啓動腳本里
rmmod bridge #移除bridge模塊,我們要用openvswitch.ko替換掉
insmod datapath/openvswitch.ko # ovs的核心模塊,配合ovs-vswitchd使用
mkdir -p /usr/local/etc/openvswitch
創建ovsdb數據庫
ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema # 後續可以更改數據庫的schema, e.g. ovsdb-tool convert /usr/local/etc/openvswitch/conf.db xxxx.schema
啓動ovsdb-server
ovsdb-server /usr/local/etc/openvswitch/conf.db --remote=punix:/usr/local/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,manager_options --pidfile --detach --log-file
啓動vswitchd daemon
需要指定和ovsdb-server通信的機制,默認是unix:/usr/local/var/run/openswitch/db.sock
ovs-vsctl --no-wait init
ovs-vswitchd --pidfile --detach unix:/usr/local/var/run/openvswitch/db.sock --log-file --verbose
(--verbose會產生debug log)
我們可以通過ovs-appctl來管理ovsdb-server, ovs-vswitchd這些daemon,e.g.
ovs-appctl -t ovsdb-server exit, ovs-appctl -t ovsdb-server ovsdb-server/reconnect
ovs-appctl -t ovs-vswitchd exit, ovs-appctl -t ovs-vswitchd qos/show, ovs-appctl -t ovs-vswitchd fdb/flush br0, ovs-appctl -t ovs-vswitchd fdb/show br0
下面就是和bridge基本類似的配置了
ovs-vsctl add-br br0
ovs-vsctl add-port br0 eth0
ifconfig eth0 0 up
ifconfig br0 x.x.x.x netmask x.x.x.x up
route add default gw x.x.x.x
可以通過ovs-vsctl show br0查看
Bridge "br0"
Port "br0"
Interface "br0"
type: internal
Port "eth0"
Interface "eth0"
注意如果想使用brctl(比如xen的很多腳本都依賴brctl),需要啓動ovsbrcompatd,首先insmod brcompatd.ko,之後運行ovs-brcompatd --detach --pidfile
-----------------------------------------------華麗的分割線--------------------------------------------------
下面啓動一臺虛擬機來驗證下ovs,需要準備一個kvm的環境,RHEL6對kvm的支持還是蠻讚的,lsmod | grep kvm,如果發現有kvm, kvm_intel(kvm_amd)兩個模塊,說明已經支持了。同時需要安裝一些包
yum install libvirt*
yum install virt-manager
yum install python-virtinst
爲了啓動libvirtd,還需要安裝
yum install avahi*
/etc/init.d/messagebus start
/etc/init.d/avahi-daemon start
/etc/init.d/libvirtd start
chkconfig messagebus on
chkconfig avahi-daemon on
chkconfig libvirtd on
下面通過virt-install安裝一臺ubuntu11的kvm虛擬機
qemu-img create -f qcow2 ubuntu11 30G #通過qemu-img創建一個qcow2的空盤
virt-install --connect qemu:///system --hvm --virt-type kvm --name ubuntu11_test1 --ram 8192 --vcpus=4 --disk path=/disk2/kvm/ubuntu11/ubuntu11,format=qcow2 --cdrom=/disk1/iso/ubuntu-11.10-desktop-amd64.iso --nonetworks --vnclisten=x.x.x.x --vncport=6900 --vnc
kvm虛擬機創建成功之後,連接到ovs上
注意,爲支持openvswitch,libvirt需要升級到0.9.11以上版本,目前RHEL6上自帶的libvirt都是0.9.10版本的,我們下載fedora16的source rpm來build
從 http://libvirt.org/sources/libvirt-0.9.13-1.fc16.src.rpm 中下載,build過程會依賴很多其他的包,請自行解決
下面修改ubuntu11.xml,增加網絡部分
<interface type='bridge'>
<mac address='54:52:00:83:03:17'/>
<source bridge='br0'/>
<virtualport type='openvswitch'>
</virtualport>
<model type='virtio'/>
</interface>
注意kvm的虛擬機的mac地址都以 54:52:00 開頭,之後virsh create ubuntu11.xml,成功
----------------------------------------- 華麗的分割線 -----------------------------------------------
下面我們來配置一個gre tunnel,驗證下
我使用兩臺物理機,一臺配置了kvm + ovs,另一臺配置了xen + ovs,首先建立gre tunnel
ovs-vsctl add-br br1 #在這個bridge建立gre口
ovs-vsctl add-port br1 gre1 -- set interface gre1 type=gre options:remote_ip=x.x.x.x #這個x.x.x.x 是另一臺物理機的地址
ovs-vsctl add-port br1 vnetXXX #把虛擬機的口接入到網橋
兩臺物理機配置完畢之後,我們看下網橋的fdb表
# ovs-appctl fdb/show br1
port VLAN MAC Age
1 0 00:16:3e:91:e2:b9 0
2 0 54:52:00:83:03:17 0
兩臺vm的mac地址都被學習到了。。下面互相ping下也沒問題
BTW,用傳統gre tunnel的方式,性能下降厲害不說,如果是multipath的話也無法支持,對於構建多租戶虛擬網絡而言,我們需要更加先進的技術方案