1.方案说明
目前公司的应用不适用于eucalyptus的非持久性的instance,必须使用通过bfebs创建的持久性instance。在测试持久性的instance过程中,发现了许多奇怪的问题,诸如NC节点重启,持久性instance无法启动等问题。所以根据现有需求搭建以下环境
- sheepdog cluster:提供安装操作系统以及应用数据的存储空间;
- NFS:提供libvirt xml文件的共享空间,所有KVM宿主机连接该共享空间,一旦任一KVM宿主机宕机,可通过另一台KVM宿主机读取NFS上的xml文件,快速启动VM,最小的缩短故障修复时间;
- KVM宿主机:提供VM所需的CPU、Memory、Network;
2.安装说明
2.1安装KVM & Sheepdog
可参考前面的文章
2.2安装NFS
分别在NFS以及KVM宿主机上安装NFS安装包
#yum -y install nfs*
NFS服务器的配置相对比较简单,只需要在相应的配置文件中进行设置,然后启动NFS服务器即可。
NFS的常用目录
/etc/exports NFS服务的主要配置文件
/usr/sbin/exportfs NFS服务的管理命令
/usr/sbin/showmount 客户端的查看命令
/var/lib/nfs/etab 记录NFS分享出来的目录的完整权限设定值
/var/lib/nfs/xtab 记录曾经登录过的客户端信息
NFS服务的配置文件为 /etc/exports,这个文件是NFS的主要配置文件,不过系统并没有默认值,所以这个文件不一定会存在,可能要使用vim手动建立,然后在文件里面写入配置内容。
/etc/exports文件内容格式:
<输出目录> [客户端1 选项(访问权限,用户映射,其他)] [客户端2 选项(访问权限,用户映射,其他)]
a. 输出目录:
输出目录是指NFS系统中需要共享给客户机使用的目录;
b. 客户端:
客户端是指网络中可以访问这个NFS输出目录的计算机
客户端常用的指定方式
- 指定ip地址的主机:192.168.0.200
- 指定子网中的所有主机:192.168.0.0/24 192.168.0.0/255.255.255.0
- 指定域名的主机:david.bsmart.cn
- 指定域中的所有主机:*.bsmart.cn
- 所有主机:*
c. 选项:
选项用来设置输出目录的访问权限、用户映射等。
NFS主要有3类选项:
访问权限选项
- 设置输出目录只读:ro
- 设置输出目录读写:rw
用户映射选项
- all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody);
- no_all_squash:与all_squash取反(默认设置);
- root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置);
- no_root_squash:与rootsquash取反;
- anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);
- anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx);
其它选项
- secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
- insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
- sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
- async:将数据先保存在内存缓冲区中,必要时才写入磁盘;
- wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);
- no_wdelay:若有写操作则立即执行,应与sync配合使用;
- subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);
- no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;
这里主要是测试使用,所以进行简单的配置
#mkdir /opt/kvmcluster //共享目录
#vi /etc/exports /opt/kvmcluster *(rw)
#chmod 777 -R /opt/kvmcluster
启动nfs以及rpcbind
#service rpcbind start
#chkconfig rpcbind on
#service nfs start
#chkconfig nfs on
查看共享目录
root@linux-nfs kvmcluster]# exportfs
/opt/kvmcluster
<world>
mount 10.10.200.238:/opt/kvmcluster /mnt
[root@euca-clc mnt]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/vg_eucaclc-LogVol00
271567352 21812948 235936548 9% /
tmpfs 4088808 4256 4084552 1% /dev/shm
/dev/sdb1 999320 64188 866320 7% /boot
/dev/sda1 1921681272 34216952 1789825564 2% /var/lib/eucalyptus
10.10.200.238:/opt/kvmcluster
17542144 2206464 14444800 14% /mnt
通过以上就完成了NFS的配置与连接,下面进行编写创建VM所需的xml文件
2.3创建VDI
在sheepdog cluster中创建所需的VDI
#qemu-img create sheepdog:centos6 4G //用于安装OS
#qemu-img create sheepdog:test 10G //用于存储应用数据
查看VDI
[root@sheepdog-2 linux-2.6.33]# collie vdi list
Name Id Size Used Shared Creation time VDI id Copies Tag
c centos-clone 0 4.0 GB 0.0 MB 2.1 GB 2013-08-27 11:34 3eff61 2
s centos6 1 4.0 GB 2.1 GB 0.0 MB 2013-08-26 10:54 6c3ecd 2
centos6 0 4.0 GB 120 MB 2.0 GB 2013-08-27 11:18 6c3ece 2
test 0 10 GB 10 GB 0.0 MB 2013-08-26 10:54 7c2b25 2
centos6-clone 0 4.0 GB 0.0 MB 0.0 MB 2013-08-27 11:14 d5581d 2
iscsivol 0 10 GB 10 GB 0.0 MB 2013-08-26 13:14 edea1b 2
2.4创建VM
编写xml文件如下:
euca-linux.xml
<domain type='kvm'>
<name>euca-linux</name>
<os>
<type arch='x86_64' machine='pc'>hvm</type>
<boot dev='cdrom'/>
</os>
<features>
<acpi/>
</features>
<memory>1024000</memory>
<vcpu>1</vcpu>
<devices>
<emulator>/usr/local/bin/qemu-system-x86_64</emulator>
<disk type='network'>
<driver name="qemu" type="raw" io="threads" />
<source protocol="sheepdog" name="centos6">
<host name="10.10.200.213" port="7000"/>
<host name="10.10.200.214" port="7000"/>
<host name="10.10.200.215" port="7000"/>
<host name="10.10.200.216" port="7000"/>
</source>
<target dev="hda" bus="ide"/>
<address type='drive' controller='0' bus='0' unit='1'/>
</disk>
<disk type='network'>
<driver name="qemu" type="raw" io="threads" />
<source protocol="sheepdog" name="test">
<host name="10.10.200.213" port="7000"/>
<host name="10.10.200.214" port="7000"/>
<host name="10.10.200.215" port="7000"/>
<host name="10.10.200.216" port="7000"/>
</source>
<target dev="hdb" bus="ide"/>
<address type='drive' controller='0' bus='1' unit='1'/>
</disk>
<disk type='file' device='cdrom'>
<source file='/var/lib/libvirt/images/CentOS-6.0-x86_64-bin-DVD1.iso'/>
<target dev='hdc'/>
<readonly/>
</disk>
<interface type='bridge'>
<source bridge='br0'/>
<model type='rtl8139'/>
</interface>
<graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'/>
</devices>
</domain>
执行virsh create euca-linux.xml安装centos6操作系统,通过以上操作完成了操作系统的安装,也完成了整个系统的配置。
3.系统测试
模拟kvm任一宿主机宕机,通过另一kvm宿主机启动VM。
在KVM宿主上执行
#virsh create euca.linux.xml
[root@euca-clc mnt]# ps -ef | grep vnc
root 9302 1 22 15:18 ? 00:00:14 /usr/local/bin/qemu-system-x86_64 -name eucalyptus-linux -S -M pc-0.14 -enable-kvm -m 1000 -smp 1,sockets=1,cores=1,threads=1 -uuid 89b058d5-73d0-4e6b-bf09-39fcdafabcf1 -nodefconfig -nodefaults -chardev socket,id=charmonitor,path=/usr/local/var/lib/libvirt/qemu/eucalyptus-linux.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=readline -rtc base=utc -boot c -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 -drive file=sheepdog:10.10.200.213:7000:centos6,if=none,id=drive-ide0-0-1,format=raw,aio=threads -device ide-drive,bus=ide.0,unit=1,drive=drive-ide0-0-1,id=ide0-0-1 -drive file=sheepdog:10.10.200.213:7000:test,if=none,id=drive-ide0-1-1,format=raw,aio=threads -device ide-drive,bus=ide.1,unit=1,drive=drive-ide0-1-1,id=ide0-1-1 -netdev tap,fd=18,id=hostnet0 -device rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:38:aa:c3,bus=pci.0,addr=0x3 -vnc 0.0.0.0:0 -vga cirrus -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4
root 9492 28486 0 15:19 pts/0 00:00:00 grep vnc
查看vm状态
[root@euca-clc mnt]# virsh list
Id Name State
----------------------------------------------------
5 euca-linux running
通过VNC连接VM