git 源码安装
参考: Installing OpenVSwitch on CentOS 6 (6.5)
yum install kernel-headers kernel-devel gcc make python-devel openssl-devel kernel-devel, graphviz kernel-debug-devel automake rpm-build redhat-rpm-config libtool git cd /root/ wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.64.tar.gz tar xvf autoconf-2.64.tar.gz cd autoconf-2.64/ ./configure make make install cd /root/ git clone git://git.openvswitch.org/openvswitch cd openvswitch/ ./boot.sh;./configure; make dist mkdir /root/rpmbuild/SOURCES cp openvswitch*.tar.gz /root/rpmbuild/SOURCES/#
cp rhel/openvswitch-kmod.files /root/rpmbuild/SOURCES/ rpmbuild -bb rhel/openvswitch.spec rpmbuild -bb rhel/openvswitch-kmod-rhel6.spec cd /root/rpmbuild/RPMS/x86_64/ 目录安装rpm包
rpm -ivh *.rpm
编绎成功!
常见问题
rpmbuild的时候出错 Dependency tokens must begin with alpha-numeric, ‘_’ or ‘/’: BuildRequires: %kernel_module_package_buildreqs
参考: http://www.soliddb.org/2010/07/16/88/
安装 redhat-rpm-config 包即可
error: conflicting types for 'netdev_features_t'
参考: http://n40lab.wordpress.com/2014/01/11/centos-6-5-openvswitch-1-9-3-lts-installation/
使用
启用 openvswitch
注意,我们禁用 NetworkManager 服务,使用 network 服务:
# chkconfig NetworkManager off # chkconfig network on # service NetworkManager stop # service network start
启动 OVS 服务,首次使用添加 br0 网口:
# /etc/init.d/openvswitch start # ovs-vsctl add-br br0
编辑 /etc/sysconfig/network-scripts/ifcfg-br0
文件,如下:
DEVICE=br0 ONBOOT=yes DEVICETYPE=ovs TYPE=OVSBridge BOOTPROTO=static IPADDR=192.168.1.15 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 HOTPLUG=no
编辑 /etc/sysconfig/network-scripts/ifcfg-eth0
文件,如下:
DEVICE=eth0 ONBOOT=yes DEVICETYPE=ovs TYPE=OVSPort OVS_BRIDGE=br0 BOOTPROTO=none HOTPLUG=no
重启 network 服务:
# /etc/init.d/network restart
在 KVM 命令行具中使用 OVS
参考: How to Use Open vSwitch with KVM
CentOS 下需要使用 tunctl 命令, 安装:
# yum install bridge-utils tunctl
创建 /etc/ovs-ifup
脚本 :
#!/bin/sh switch='br0' /sbin/ifconfig $1 0.0.0.0 up ovs-vsctl add-port ${switch} $1
创建 /etc/ovs-ifdown
脚本 :
#!/bin/sh switch='br0' /sbin/ifconfig $1 0.0.0.0 down ovs-vsctl del-port ${switch} $1
给脚本添加可执行权限 :
# chmod a+x /etc/ovs-if*
启动虚拟机 :
# /usr/libexec/qemu-kvm -m 2048 -name WIN7-TEST -drive file=/data/jian/vos/win7.img -vga qxl -spice port=5910,addr=0.0.0.0,disable-ticketing -usbdevice tablet -soundhw ac97 -device virtio-serial -chardev spicevmc,id=vdagent,name=vdagent -device virtserialport,chardev=vdagent,name=com.redhat.spice.0 -net nic,model=rtl8139 -net tap,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown
现在可以使用 spice client 连接机器的 5910 端口。
使用 virtio
参考: kvm安装windows xp、windows7时磁盘使用virtio驱动
加截驱动 iso :
-drive file=/path/to/virtio-win-VERSION.iso,index=1,media=cdrom -boot once=d
我的 KVM 安装 OS 示例 :
/usr/libexec/qemu-kvm -m 2048 -smp 2 -name WIN7-TEST -drive file=/data/jian/vos/win7_x64.img,if=virtio -vga qxl -spice port=5910,addr=0.0.0.0,disable-ticketing -usbdevice tablet -soundhw ac97 -device virtio-serial -chardev spicevmc,id=vdagent,name=vdagent -device virtserialport,chardev=vdagent,name=com.redhat.spice.0 -net nic,model=virtio -net tap,script=/data/jian/ooclab/kvm/scripts/ovs-ifup,downscript=/data/jian/ooclab/kvm/scripts/ovs-ifdown -drive file=/data/isos/windows/cn_windows_7_ultimate_with_sp1_x64_dvd_618537.iso,index=0,media=cdrom -drive file=/data/virtio-win-0.1-74.iso,index=1,media=cdrom -boot once=d
常用问题
Device 'tap' could not be initialized
参考: KVM “qemu-ifup: could not configure /dev/net/tun: Operation not permitted”解决方案
这个问题很常见,我的原因是 ovs-ifup, ovs-ifdown 没有执权限,加上即可:
# chmod a+x ovs-if*
OVS中的bridge
上面,说到,一个桥就是一个交换机。在OVS中,
ovs-vsctl add-br brname(br-int)
root@Compute2:~# ifconfig
br-int Link encap:Ethernet HWaddr 1a:09:56:ea:0b:49
inet6 addr: fe80::1809:56ff:feea:b49/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1584 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:316502 (316.5 KB) TX bytes:468 (468.0 B)
当我们创建了一个交换机(网桥)以后,此时网络功能不受影响,但是会产生一个虚拟网卡,名字就是brname,之所以会产生一个虚拟网卡,是为了实现接下来的网桥(交换机)功能。有了这个交换机以后,我还需要为这个交换机增加端口(port),一个端口,就是一个物理网卡,当网卡加入到这个交换机之后,其工作方式就和普通交换机的一个端口的工作方式类似了。
ovs-vsctl add-port brname port
这里要特别注意,网卡加入网桥以后,要按照网桥的工作标准工作,那么加入的一个端口就必须是以混杂模式工作,工作在链路层,处理2层的帧,所以这个port就不需要配置IP了。(你没见过哪个交换的端口有IP的吧)
那么接下来你可能会问,通常的交换机不都是有一个管理接口,可以telnet到交换机上进行配置吧,那么在OVS中创建的虚拟交换机有木有这种呢,有的!上面既然创建交换机brname的时候产生了一个虚拟网口brname,那么,你给这个虚拟网卡配置了IP以后,就相当于给交换机的管理接口配置了IP,此时一个正常的虚拟交换机就搞定了。
ip address add 192.168.1.1/24 dev brname
最后,我们来看看一个br的具体信息:
添加网桥br0
[root@localhost ~]# ovs-vsctl add-br br0
激活网桥br0
[root@localhost ~]# ifconfig br0 up
配置网桥br0的ip地址和子网掩码
[root@localhost ~]# ifconfig br0 192.168.203.100/24
将需要添加到网桥br0上的网络接口添加到br0中
[root@localhost ~]# ovs-vsctl add-port br0 peth0
[root@localhost ~]# ovs-vsctl add-port br0 vif0.0
#ovs-vsctladd-br br0#ovs-vsctl add-port br0 vif1.0#ovs-vsctl add-port br0 eth0#ifconfigbr up
root@Compute2:~# ovs-vsctl show
bc12c8d2-6900-42dd-9c1c-30e8ecb99a1b
Bridge "br0"
Port "eth0"
Interface "eth0"
Port "br0"
Interface "br0"
type: internal
ovs_version: "1.4.0+build0"