第一篇:【个人总结系列-15】搭建虚拟网络环境总结-XEN-创建及克隆虚拟机-安装配置OpenvSwitch-NOX
搭建虚拟网络环境总结-XEN-创建及克隆虚拟机-安装配置
OpenvSwitch-NOX 搭建虚拟网络环境的工作内容主要涉及到安装xen、创建虚拟机、复制虚拟机、安装ovs、配置ovs和安装nox等这些方面。以下各节是对这些主要内容的介绍。1.1.1 安装xen 编写本文档所对应的Xen的安装环境是CentOS5.6。具体的安装步骤如下: 安装xen相关的软件包:
[root@localhost ~]# yum-y install kernel-xen virt-manager virt-viewer libvirt xen 修改启动顺序并重启电脑:
[root@localhost ~]# vi /boot/grub/grub.conf default=1改为default=0,使得电脑优先以包含xen的内核启动(不然的话要每次启动的时候手动选择与xen相关的内核来启动)
检查xen列表:
[root@localhost ~]# xm list Name ID Mem(MiB)VCPUs State Time(s)Domain-0 0 423 4 r-----65.3 如果xen进程未启动,手动执行:
[root@localhost ~]# /etc/init.d/xend start [root@localhost ~]# /etc/init.d/xendomains start #正常情况xend启动后将默认启动xendomains
1.1.2 创建虚拟机
如上面安装好xen之后,打开virt-manager(在终端里输入:virt-manager),用virt-manager新建一个CentOS5.6的虚拟机。创建Xen虚拟机的步骤如下图所示:
在virt-manager的图形界面中点击右键,选择新建虚拟机,为虚拟机选择一个名称,设置虚拟机的各项参数,步骤如截图所示:
图2-1 创建虚拟机
图2-2 为虚拟机选择名称
图2-3 选择半虚拟化
图2-4 选择网络安装树
半虚拟化的需要网络安装,网络安装的地址是:http://202.115.44.135/centos5.6。剩下的步骤如下图所示:
图2-5 填写安装的URL
图2-6 选择映像文件的存放位置及大小
图2-7 选择虚拟网络
图2-8 设置虚拟机的内存等信息
图2-9 完成虚拟机的创建
图2-10 安装虚拟机
这样就开始了一个虚拟机的安装,接下去的步骤同普通安装基本一样。
1.1.3 快速克隆虚拟机
安装完之后,在/var/lib/xen/images中有一个vmpc1.img文件,即虚拟机的映像文件。在/etc/xen中有一个vmpc1的配置文件。如果想再建一个虚拟机的话,可以通过克隆前面安装的那台虚拟机。克隆一台虚拟机非常方便,只要复制一份那台虚拟机的映像文件(即.img文件,但是文件必须重命名)和配置文件(需要修改部分内容,如主机名、mac地址等)即可。
复制一台虚拟机的步骤如下:
首先关闭被复制的那台虚拟机(假如复制vmpc1)
xm shutdown vmpc1 复制虚拟机映像文件和配置文件
cp /var/lib/xen/images /vmpc1.img /var/lib/xen/images /vmpc2.img cp /etc/xen/vmpc1 /etc/xen/vmpc2 修改虚拟机配置文件
vi /etc/xen/vmpc2 配置文件如下所示:
--------------------name = “vmpc1”
uuid = “85386e79-9f79-e243-9b62-3c9da736ae9f” maxmem = 2048 memory = 2048 vcpus = 2
bootloader = “/usr/bin/pygrub” on_poweroff = “destroy” on_reboot = “restart” on_crash = “restart”
disk = [ “tap:aio:/opt/vm1/vm1.img,xvda,w” ]
vif = [ “mac=00:16:36:47:a2:89,bridge=virbr0,script=vif-bridge” ]--------------------修改name、uuid、mac保持唯一,通常将最后一位加1。修改disk路径,vmpc1的配置文件中的disk路径对应vmpc1.img这个映像文件
启动并进入虚拟机
vm create vmpc2-c 修改主机名
hostname vmpc2 vi /etc/sysconfig/network vi /etc/hosts 修改网卡ip和mac,使得和和xen配置对应
vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=static
BROADCAST=192.168.122.255 HWADDR=00:16:36:47:A2:80 IPADDR=192.168.122.12 NETMASK=255.255.255.0 NETWORK=192.168.122.0 ONBOOT=yes 重启网络,完成修改 /etc/init.d/network restart
1.1.4 安装ovs Linux的发行版本比较多,下面的安装说明只针对于安装有 Xen 虚拟化平台的 CentOS 64 位操作系统。安装步骤如下:
安装Xen虚拟化环境,并保证Xend启动成功,网络可正常连接,如不讲究
Xen 版本,可利用 CentOS 更新源已有的 Xen 虚拟化平台,采取下面的简单办法:
[root@localhost ~]# yum install xen.x86_64
安装完成后重启,启动菜单中选择包含xen的操作系统选项,启动成功之后,如不出异常,xend将正常运行于后台,进入dom0客户操作系统。通过以下命令可并判断xend是否正常启动,正常启动的情况下该命令将显示客户操作系统dom列表。
启动成功后安装内核源码,如下
[root@localhost ~]# yum install kernel.x86_64
从官方网站http://openvswitch.org/中下载Open vSwitch源代码包,最新版本可使用下面的链接:http://openvswitch.org/releases/openvswitch-1.1.0pre2.tar.gz,下载完后输入以下命令解压
[root@localhost ~]# tar –xzvf openvswitch-1.1.0pre2.tar.gz
进入解压后目录,输入以下命令配置Open vSwitch工程,生成Makefile文件。
[root@localhost ~]#./configure--with-l26=/lib/modules/`uname-r`/build--with-l26:生成内核模式的Open vSwitch时需指定的内核源码编译目录 指定Open vSwitch的安装位置加参数:--prefix=/…
如有其他问题可参考源码根目录下的帮助文件:INSTALL.Linux
编译、链接、生成和安装Open vSwitch,命令如下,make install目录只安装Open vSwitch除内核模块外的其他所有模块,如ovs-vsctl、ovs-vswitchd、ovs-ofctl等
[root@localhost ~]# make [root@localhost ~]# make install
卸载原有虚拟网桥模块,命令如下,如果Xend正常启动,将自动加载linux虚拟网桥模块bridge.ko。
[root@localhost ~]# rmmod bridge
如果无法卸载,可用―lsmod‖命令查看已加载的依赖于bridge的内核模块,并用“rmmod 模块名”卸载,常见的无法卸载的情况可通过预先执行下面两条命令解决。
[root@localhost ~]# /etc/init.d/iptables stop [root@localhost ~]# rmmod xt_physdev
加载Open vSwitch内核模块openvswitch_mod.ko和linux虚拟网桥兼容模块brcompat_mod.ko [root@localhost~]#insmod openvswitch-1.1.0pre2/datapath/linux-2.6/openvswitch_mod.ko [root@localhost ~]# insmod openvswitch-1.1.0pre2/datapath/linux-2.6/brcompat_mod.ko 根据ovsdb
模板
vswitch.ovsschema
创建
ovsdb
数据库ovs-vswitchd.conf.db,用于存储虚拟交换机的配置信息,只需第一次运行Open vSwitch时创建
[root@localhost ~]# ovsdb-tool create /usr/local/etc/ovs-vswitchd.conf.db openvswitch-1.1.0pre2/vswitchd/vswitch.ovsschema
启动ovsdb数据库服务器,Open vSwitch虚拟网桥模块将通过ovsdb-server获得虚拟交换机配置信息,―—detach‖表示以后台方式运行,ovsdb-server其他参数请参考―ovsdb-server –help‖
[root@localhost ~]# ovsdb-server /usr/local/etc/ovs-vswitchd.conf.db--remote=punix:/usr/local/var/run/openvswitch/db.sock--remote=db:Open_vSwitch,managers--private-key=db:SSL,private_key--certificate=db:SSL,certificate--bootstrap-ca-cert=db:SSL,ca_cert--detach
初始化Open vSwitch控制接口,以便用ovs-vsctl管理配置虚拟交换机
[root@localhost ~]# ovs-vsctl--no-wait init 启动Open vSwitch用户态模块,unix:后的文件为socket文件,为ovsdb-server监听的socket文件。
[root@localhost ~]# ovs-vswitchd unix:/usr/local/var/run/openvswitch/db.sock--detach
启动linux原有虚拟网桥兼容模块用户态组件ovs-brcompatd,该模块必须在ovsdb-server和ovs-vswitchd启动后才能启动。
[root@localhost ~]# ovs-brcompatd--pidfile--detach-vANY:console:EMER unix:/usr/local/var/run/openvswitch/db.sock
1.1.5 配置ovs 在安装了xen的主机中,当使用ifconfig命令时,除了熟悉的eth0以外还会出现许多平常没有见到过的网络接口,这些接口的出现的原因是因为xen会自动为虚拟机创建一些虚拟的网络接口,装有xen的主机在启动时网络的配置过程为:
1.执行在/etc/xen/xend-config.sxp中指定的/etc/xen/scripts/network-bridge脚本
2.network-bridge脚本创建一个新网桥,名字为xenbr0 3.复制物理网卡接口eth0的MAC地址和IP地址
4.停止物理网卡接口eth0
5.创建一对相连的虚拟网卡接口,veth0和vif0.0
6.将之前复制的物理网卡接口的MAC,IP分配给虚拟接口veth0 7.重命名物理网卡接口,从eth0改名为peth0 8.重名名虚拟网卡接口,从veth0改名为eth0
9.将物理网卡接口peth0,虚拟网卡接口vif0.0加入到网桥xenbr0中
10.启动网桥xenbr0,启动其他网络接口peth0,eth0,vif0.0
对于每一个新的domU,Xen会创建“一对相连的虚拟网卡”,其中一块在新建的domU上,另一块在dom0上。对于Linux的domU来说,其虚拟网卡名字是eth0,而在dom0这端的这一块的网卡名字是vif
图2-11 装有xen的主机中网络端口的状态
数据包到达物理网卡之后的处理流程为:数据包到达硬件物理网卡接口peth0,dom0上的网卡驱动会进行处理。因为peth0绑定在网桥上,所以数据包被发送到网桥上。观察ifconfig的输出,你会发现peth0,xenbr0,vif0.0和vif1.0都共享一个相同的MAC地址FE:FF:FF:FF:FF:FF,该地址是以太网广播地址。这表明物理网卡接口,dom0的loopback接口,所有guest domain的后端接口都广播到网桥接口xenbr0。当物理网卡接口peth0接收到一个数据包,它会将数据包直接发送到网桥接口xenbr0上。然后网桥会分发数据包,像交换机一样(话说交换机也是网桥的一种)。网桥会根据数据包接收者的MAC地址将其转发到正确的网络接口上。所以peth0这个接口不需要配置ip地址,只有MAC地址就够了。然后vif接口会将数据包发送给domU上相连的接口,然后domU中返回的数据包也通过vif发送回来。dom0也是一样的操作模式,通过vif0.0->eth0这一对相连的网卡。
vif0.1:表示ID为0的第二个网络接口,vif6.0:表示ID为6的第一个网络接口 virbr0:是虚拟系统和真实系统进行连接的接口,实现NAT功能 xenbr1:是虚拟系统和真实系统进行连接的接口,桥接功能
图2-11 装有xen的主机中网桥的转发原理
以上就是在装有虚拟机的主机上网桥的转发原理,使用ovs进行基于网桥的转发也是同上面描述的原理类似,只是要使用ovs自己建一个网桥(假设为br0),然后把物理网卡、虚拟网卡0、虚拟网卡1„„连接在这个br0上,具体的命令如下: 添加网桥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
然后把虚拟机的网桥设置为br0,原来可能是xenbr0,修改虚拟机的配置文件即可,然后重启虚拟机。1.1.6 安装nox 首先是NOX的安装,安装的环境是Ubuntu10.04,安装操作的过程如下:
cd /etc/apt/sources.list.d sudo wget http://openflowswitch.org/downloads/debian/nox.list sudo apt-get update sudo apt-get install nox-dependencies git clone git://noxrepo.org/nox cd nox 如果需要启动gui 必须做branch这一步
git branch –a git checkout-b destiny origin/destiny./boot.sh mkdir build/ cd build/../configure make-j 5 启动控制器
./nox_core-v-i ptcp:6633 monitoring 有时候会因为依赖包的问题而使安装出现问题,所以建议执行以下操作
apt-get install python-qt4 python-simplejson apt-get install python-qt4-sql 使open vswitch连接到控制器,查看安装是否成功
ovs-vsctl set-controller br0 tcp:172.16.1.230