通过在物理机上启动多个KVM的方式可以用来模拟需要使用大量物理机的环境,并进行服务功能的一些验证。同一物理机上的KVM之间是可以进行通信的,但是不同物理机之间的KVM通信就需要使用openvswitch来进行连接。
VXLAN(Virtual eXtensible Local Area Network)是一种将二层报文用三层协议进行封装的技术,可以对二层网络在三层范围进行扩展。VXLAN屏蔽了UDP的存在,上层基本上不感知这层封装。同时VXLAN避免了GRE的点对点必须有连接的缺点。
wget http://openvswitch.org/releases/openvswitch-2.5.1.tar.gz
tar -zxvf openvswitch-2.5.1.tar.gz
cd openvswitch-2.5.1
./configure --with-linux=/lib/modules/`uname -r`/build 2>/dev/null
cp /usr/bin/libtool . [note: 安装包libtool和系统不一致,将系统的拷贝至当前目录即可]
make -j24
make install
modinfo datapath/linux/openvswitch.ko | grep depends
将上述依赖使用如下命令逐个添加
modprobe libcrc32c[多个依赖]
insmod datapath/linux/openvswitch.ko
make modules_install
/sbin/modprobe openvswitch
mkdir -p /usr/local/etc/openvswitch
ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema 2>/dev/null
至此,如果没有报错的话OVS的部署已经成功完成。
ovsdb-server -v remote=punix:/usr/local/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,Open_vSwitch,manager_options --private-key=db:Open_vSwitch,SSL,private_key --certificate=db:Open_vSwitch,SSL,certificate --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert --pidfile --detach
ovs-vsctl --no-wait init
ovs-vswitchd --pidfile --detach
ps -ef |grep ovs
由于是公司内部的部署脚本,不方便公开。大家可以参考网络上的部署方法,或者直接使用XML方式创建虚拟机会更加快捷。最好支持ssh登陆方式。
ssh root@192.168.122.21 即可登陆
在物理机上可使用virsh 命令操作虚拟机,常用的有
virsh list --all 列出虚拟机和状态
virsh destroy vmname 强制关闭虚拟机
virsh start vmname 启动虚拟机
virsh edit vmname 编辑虚拟机的xml文件
ovs-vsctl add-br ovsbr0
ovs-vsctl add-port ovsbr0 vxlan0 -- set interface vxlan0 type=vxlan options:remote_ip=10.101.161.35
[note: remote_ip 为另一个物理机的ip地址]
ovs-vsctl show
brctl show 查看virbr0上面的vnet端口号
brctl delif virbr0 vnet_num
ovs-vsctl add-port ovsbr0 vnet_num
使用ovs-vsctl show显示如下:
之后就可以用ssh登陆不同主机上的虚拟机,尝试ping命令啦!
此处可以在虚拟机中使用tcpdump查看是否是二层协议,即不通过网关:
tcpdump -i eth0 icmp
网络结构:
物理机: 11.239.153.34
kvm12220: 192.168.122.20
kvm12221: 192.168.122.21
物理机: 10.101.161.35
kvm12213: 192.168.122.13
最后,这里是搭建了两台物理机之间的vxlan,如果是多台,那么就要添加多个port,在其中指定要到达的remote_ip,即这是一个完全图。
[注意]使用scp或者telnet检测网络的速度,如果速度很慢,那么需要设置KVM内部网络的mtu小一些(1400)左右,原因是vxlan在包通过ovsbr0网桥后进行了封包操作,有可能导致包的大小超过1500(默认值),会进行分片或者丢弃,导致网络情况变差。
搭建的过程不容易,遇到各种版本、兼容性和网络方面的问题,这里列出一些问题列表,希望可以提供一些帮助。