open vswitch研究:ovs的安裝和使用

通過

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的話也無法支持,對於構建多租戶虛擬網絡而言,我們需要更加先進的技術方案

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章