KVM+Sheepdog+NFS构建KVM集群

来源:互联网 发布:无懈可击知乎 编辑:程序博客网 时间:2024/06/07 22:52

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 Server上配置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>

分别在KVM宿主机上连接NFS
mount 10.10.200.238:/opt/kvmcluster /mnt

查看挂载情况
[root@euca-clc mnt]# dfFilesystem           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/eucalyptus10.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  Tagc 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 

查看VNC
[root@euca-clc mnt]# ps -ef | grep vncroot      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=0x4root      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


通过以上测试可以发现,vm已经在另一台KVM宿主机上启动。






 

原创粉丝点击