这篇文章主要为大家展示了“如何通过双主DRBD配置KVM双节点高可用群集”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何通过双主DRBD配置KVM双节点高可用群集”这篇文章吧。

DRBD(Distributed Replicated Block Device,分布式复制块设备)是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。DRBD是镜像块设备,是按数据位镜像成一样的数据块。DRBD(Distributed Replicated Block Device,分布式复制块设备)是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。DRBD是镜像块设备,是按数据位镜像成一样的数据块。

实验目的:构件基于本地存储,可平滑迁移虚拟机的kvm高可用平台高可用架构:pacemaker+corosync并由pcs进行管理所需组件:DRBD,DLM,gfs2,clvm,pcs,pacemeker,corosync,libvirtd,qemu,qemu-img系统环境:两台kvm节点都是最新的centos7.4,每台节点,挂载一块sdb40G的磁盘

实验环境:kvm节点运行在ESXI6.5的宿主机上(如图)

基于双主DRBD的KVM双节点高可用群集配置基于双主DRBD的KVM双节点高可用群集配置
基于双主DRBD的KVM双节点高可用群集配置基于双主DRBD的KVM双节点高可用群集配置
软件安装(双节点操作)

#DRBD管理软件的安装(先添加key和elrepo源)rpm--importhttps://www.elrepo.org/RPM-GPG-KEY-elrepo.orgrpm-Uvhhttp://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpmyuminstallkmod-drbd84drbd84-utils-y#虚拟化软件安装yumgroupsinstall-y"VirtualizationPlatform"yumgroupsinstall-y"VirtualizationHypervisor"yumgroupsinstall-y"VirtualizationTools"yumgroupsinstall-y"VirtualizationClient"#群集及配套软件安装yuminstallbash-completionntpdatetigervnc-server-yyuminstallpacemakercorosyncpcspsmiscpolicycoreutils-pythonfence-agents-all-y#gfs2和dlm还有clvm软件yuminstalldlmlvm2-clustergfs2-utils-y#升级标准的kvm组件为ev版本(可选)yuminstallcentos-release-qemu-ev-yyuminstallqemu-kvm-ev-y#经测试,安装它后,创建虚拟机时会卡住#或则运行下面命令一步到位rpm--importhttps://www.elrepo.org/RPM-GPG-KEY-elrepo.org&&rpm-Uvhhttp://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm&&yuminstallkmod-drbd84drbd84-utils-y&&yumgroupsinstall-y"VirtualizationPlatform"&&yumgroupsinstall-y"VirtualizationHypervisor"&&yumgroupsinstall-y"VirtualizationTools"&&yumgroupsinstall-y"VirtualizationClient"&&yuminstallbash-completionntpdatetigervnc-servercentos-release-qemu-ev-y&&yuminstallpacemakercorosyncpcspsmiscpolicycoreutils-pythonfence-agents-all-y&&yuminstalldlmlvm2-clustergfs2-utils-y&&reboot准备阶段

1;主机名,hosts解析10.0.0.31node110.0.0.32node22:sshkey互信ssh-keygen-trsa-P''ssh-copy-id-i~/.ssh/id_rsa.pubroot@node1#到自己免密码ssh-copy-id-i~/.ssh/id_rsa.pubroot@node2#到node2免密码(双向)3:每个node节点准备挂载一块40G的本地磁盘sdb4:配置时区和时钟cp-f/usr/share/zoneinfo/Asia/Shanghai/etc/localtimecrontab-e*/30****/usr/sbin/ntpdatetime.windows.com&>/dev/null5:在所有节点创建一个目录mkdir/kvm-hosts6:配置firewalld防火墙,将corosync,drbd的专用网段设置为全开放firewall-cmd--zone=trusted--add-source=10.0.0.0/24--permanentfirewall-cmd--zone=trusted--add-source=172.168.1.0/24--permanentfirewall-cmd--reload7:配置selinuxyuminstall-ypolicycoreutils-python#安装这个软件包,才会有下面的命令semanagepermissive-adrbd_t8:磁盘准备#为本地的那块40G的磁盘创建lv(注意磁盘的大小要一致)(双节点都要做,建议将lv的名称都配置为一样的)fdisk/dev/sdbpartprobepvcreate/dev/sdb1vgcreatevgdrbd0/dev/sdb1lvcreate-nlvdrbd0-L40Gvgdrbd0第一:配置DRBD(双节点操作)

#修改全局配置文件:vi/etc/drbd.d/global_common.confusage-countyes;改成no,这是使用计数,drbd团队收集互联网上有多少在使用drbd#创建配置文件vi/etc/drbd.d/r0.resresourcer0{protocolC;meta-diskinternal;device/dev/drbd0;disk/dev/vgdrbd0/lvdrbd0;syncer{verify-algsha1;}onnode1{address172.168.1.41:7789;}onnode2{address172.168.1.42:7789;}#若是单主drbd可以不配置下面的参数,这里是双主需要配置net{allow-two-primaries;after-sb-0pridiscard-zero-changes;after-sb-1pridiscard-secondary;after-sb-2pridisconnect;}disk{fencingresource-and-stonith;}handlers{fence-peer"/usr/lib/drbd/crm-fence-peer.sh";after-resync-target"/usr/lib/drbd/crm-unfence-peer.sh";}}#初始化drbdadmcreate-mdr0cat/proc/drbd#此时还看不到状态modprobedrbd#加载drbd模块,drbdadmupr0cat/proc/drbd#此时便能看见状态#同步(在其中一个节点上,将其置为主,并查看是否从指定网卡进行同步)drbdadmprimaryr0--forceifstat#查看网卡流量cat/proc/drbd#查看同步进度#设drbd为开机启动echo"drbdadmupr0">>/etc/rc.localchmod+x/etc/rc.d/rc.local第二:创建群集

systemctlstartpcsdsystemctlenablepcsdecho"7845"|passwd--stdinhacluster#前面三步是双节点操作,后面只需任一节点操作pcsclusterauthnode1node2-uhacluster-p7845pcsclustersetup--namekvm-ha-clusternode1node2#创建名为kvm-ha-cluster的群集,后面gfs2需要再次用到pcsclusterstart--allpcsclusterenable--all#开机自动启动所有群集节点(在生产环境中不要将群集设为开机自启动)第三:配置STONITH(由于节点的承载平台是ESXI,所以这里用fence_vmware_soap)

#在双节点上查看是否安装了fence_vmware_soappcsstonithlist|grepfence_vmware_soap#在所有节点上,查看是否可以与esxi主机通信[root@node1~]fence_vmware_soap-a192.168.5.1-z--ssl-insecure--actionlist--username="root"--password="tianyu@esxi"node1,564d59df-c34e-78e9-87d2-6551bdf96b14node2,564d585f-f120-4be2-0ad4-0e1964d4b7b9#尝试fence_vmware_soap是否能控制esxi主机,对虚拟机进行操作(譬如:重启node2这台虚拟机)[root@node1~]#fence_vmware_soap-a192.168.5.1-z--ssl-insecure--actionlist-lroot-ptianyu@esxi--plug="node2"--action=rebootSuccess:Rebooted解释:-a指代ESXI的管理地址,-z表示使用ssl连接443端口,-l是esxi的管理用户名称,-p是管理密码,--plug是虚拟机名字,名称不唯一时可以为UUID,--action是执行动作(reboot|off|on)#配置STONITHpcsclustercibstonith_cfgpcs-fstonith_cfgstonithcreateMyVMwareFencefence_vmware_soapipaddr=192.168.5.1ipport=443ssl_insecure=1inet4_only=1login="root"passwd="tianyu@esxi"action=rebootpcmk_host_map="node1:564d59df-c34e-78e9-87d2-6551bdf96b14;node2:564d585f-f120-4be2-0ad4-0e1964d4b7b9"pcmk_host_check=static-listpcmk_host_list="node1,node2"power_wait=3opmonitorinterval=60spcs-fstonith_cfgpropertysetstonith-enabled=truepcsclustercib-pushstonith_cfg#更新#注意1:pcmk_host_map这里是在ESXI上显示的虚拟机的名字,不是kvm节点系统层面的主机名2:pcmk_host_map后面格式是"虚拟机名字:UUID;虚拟机名字:UUID"#这是查看pcs关于fence_vmware_soap的stonith设置的写法pcsstonithdescribefence_vmware_soap#查看刚才配置好的stonith资源[root@node1~]#pcsstonithshow--fullResource:MyVMwareFence(class=stonithtype=fence_vmware_soap)Attributes:action=rebootinet4_only=1ipaddr=192.168.5.1ipport=443login=rootpasswd=tianyu@esxipcmk_host_check=static-listpcmk_host_list=node1,node2pcmk_host_map=node1:564df454-4553-2940-fac6-085387383a62;node2:564def17-cb33-c0fc-3e3f-1ad408818d62power_wait=3ssl_insecure=1Operations:monitorinterval=60s(MyVMwareFence-monitor-interval-60s)#查看刚才配置的stonith当出现脑裂时将会执行的动作[root@node1~]#pcsproperty--all|grepstonith-actionstonith-action:reboot测试STONITH设置是否正确设置并生效pcsstatus#先查看刚才创建的stonith资源MyVMwareFence是否已经在某个节点启动了(然后执行下面的验证)stonith_admin--rebootnode2#重启node2节点,验证成功第四:配置DLM

pcsresourcecreatedlmocf:pacemaker:controldopmonitorinterval=30son-fail=fencecloneinterleave=trueordered=true#查看dlm是否启动了pcsstatussystemctlstatuspacemaker第五:为群集添加DRBD资源

#首先,要保证两个状态均为Secondary,数据状态都为UpToDate[root@node1~]#cat/proc/drbdversion:8.4.10-1(api:1/proto:86-101)GIT-hash:a4d5de01fffd7e4cde48a080e2c686f9e8cebf4cbuildbymockbuild@,2017-09-1514:23:220:cs:Connectedro:Secondary/Secondaryds:UpToDate/UpToDateCr-----ns:0nr:0dw:0dr:0al:0bm:0lo:0pe:0ua:0ap:0ep:1wo:foos:0#若drbd状态现在是这样的Primary/Secondarydrbdadmdownr0#在Primary端做drbdadmupr0#在Primary端做,而后在查看cat/proc/drbd#添加资源(这步操作会将两个节点的drbd状态变成Primary/Primary)pcsclustercibdrbd_cfgpcs-fdrbd_cfgresourcecreateVMdataocf:linbit:drbddrbd_resource=r0opmonitorinterval=60spcs-fdrbd_cfgresourcemasterVMdatacloneVMdatamaster-max=2master-node-max=1clone-max=2clone-node-max=1notify=truepcs-fdrbd_cfgresourceshow#检查是否正确pcsclustercib-pushdrbd_cfg#提交#查看drbd两边的状态cat/proc/drbd#结果是Primary/Primaryok[root@node1~]#cat/proc/drbdversion:8.4.10-1(api:1/proto:86-101)GIT-hash:a4d5de01fffd7e4cde48a080e2c686f9e8cebf4cbuildbymockbuild@,2017-09-1514:23:220:cs:Connectedro:Primary/Primaryds:UpToDate/UpToDateCr-----ns:0nr:0dw:0dr:912al:0bm:0lo:0pe:0ua:0ap:0ep:1wo:foos:0第六:创建CLVM,并配置约束

基于双主DRBD的KVM双节点高可用群集配置基于双主DRBD的KVM双节点高可用群集配置

#将lvm工作模式设为群集模式(双节点操作)lvmconf--enable-clusterreboot#向群集添加CLVM资源pcsresourcecreateclvmdocf:heartbeat:clvmopmonitorinterval=30son-fail=fencecloneinterleave=trueordered=true#查看会发现clvm启动了systemctlstatuspacemaker#配置约束pcsconstraintorderstartdlm-clonethenclvmd-clonepcsconstraintcolocationaddclvmd-clonewithdlm-clonepcsconstraintorderpromoteVMdataclonethenstartclvmd-clonepcsconstraintcolocationaddclvmd-clonewithVMdataclone#验证查看约束pcsconstraint第七:为群集创建LV

#根据场景,这里需要创建lvm的过滤属性,避免lvm会看到重复的数据(双节点操作)#其中一个节点[root@node1~]#lvscanACTIVE'/dev/vgdrbd0/lvdrbd0'[5.00GiB]inheritACTIVE'/dev/cl/swap'[2.00GiB]inheritACTIVE'/dev/cl/root'[28.99GiB]inheritpvcreate/dev/drbd0pvscan#发现报错#(双节点操作)vi/etc/lvm/lvm.conf#找到filter,将其修改为如下filter=["a|/dev/sd*|","a|/dev/drbd*|","r|.*|"]#a表示接受,r表示拒绝,这里sd*是本地磁盘,drbd*是创建的设备,根据自己实验环境修改,你的可能是vd*#再次查看pvscan#没有错误了#在所有节点刷新lvmvgscan-v#只需在其中一个节点创建lvmpvcreate/dev/drbd0partprobe;multipath-rvgcreatevgvm0/dev/drbd0lvcreate-nlvvm0-l100%FREEvgvm0lvscan[root@node1~]#vgsVG#PV#LV#SNAttrVSizeVFreecl120wz--n-#上面做完后,在另一个节点上刷新一下partprobe;multipath-rlvs第八:配置gfs2(任意节点操作)

#格式化lvscanmkfs.gfs2-plock_dlm-j2-tkvm-ha-cluster:kvm/dev/vgvm0/lvvm0#向群集中添加gfs2文件系统pcsresourcecreateVMFSFilesystemdevice="/dev/vgvm0/lvvm0"directory="/kvm-hosts"fstype="gfs2"clone#配置约束pcsconstraintorderclvmd-clonethenVMFS-clonepcsconstraintcolocationaddVMFS-clonewithclvmd-clone#配置SELINUX(不然虚拟机无法访问存储文件)(所有节点都要做)semanagefcontext-a-tvirt_image_t"/kvm-hosts(/.*)?"#如果没有semanage,可以如下安装yuminstallpolicycoreutils-pythonrestorecon-R-v/kvm-hosts第九:准备测试用的虚拟机,配置防火墙,并进行在线迁移测试

#单点创建虚拟机qemu-imgcreate-fqcow2/kvm-hosts/web01.qcow210Gvirt-install--nameweb01--virt-typekvm--ram1024--cdrom=/kvm-hosts/CentOS-7-x86_64-Minimal-1708.iso--diskpath=/kvm-hosts/web01.qcow2--networknetwork=default--graphicsvnc,listen=0.0.0.0--noautoconsole--os-type=linux--os-variant=rhel7#配置第三方管理机能用virtual-manage连接并显示kvm-pt上的虚拟机(所有node节点都要)firewall-cmd--permanent--add-service=vnc-server#配置防火墙(所有kvm节点)firewall-cmd--permanent--add-port=16509/tcp#这是virsh-cqemu+tcp://node2/system模式,这里不会用到,但还是放行firewall-cmd--permanent--add-port=49152-49215/tcp#迁移端口firewall-cmd--reload#创建前:要进行迁移测试(virt-manage和命令行)结果:都ok,都能平滑迁移virshmigrateweb01qemu+ssh://root@node2/system--live--unsafe--persistent--undefinesource第十:为群集创建虚拟机资源,并配置相应约束

#在虚拟机运行节点上导出xml文件virshdumpxmlweb01>/kvm-hosts/web01.xmlvirshundefineweb01#创建虚拟机(虚拟机的磁盘文件和xml配置文件都要放在共享存储上)(虚拟机由群集软件来控制,不由本地的libvirt来控制)pcsresourcecreateweb01_resVirtualDomain\hypervisor="qemu:///system"\config="/kvm-hosts/web01.xml"\migration_transport="ssh"\metaallow-migrate="true"#配置约束(每配置一个虚拟机,就需要配置下面类似的约束)pcsconstraintorderstartVMFS-clonethenweb01_res#先启动文件系统,在启动虚拟机资源#当你对一个节点上的群集服务重启后,若是发现没有挂载gfs2文件系统到响应目录,解决办法有两个1:停掉所有节点上的群集,做一次全部启动2:在任意节点执行,下面的操作pcsconstraintcolocationaddweb01_reswithVMFS-clone#查找刚才创建约束的id,并立即删除pcsconstraint--fullpcsconstraintremovepcsconstraint#查看约束,可以加--full#配置完成后,虚拟机可以正常启动最后:迁移测试#pcsclusterstandbynode2#平滑迁移ok#pcsresourcemoveweb01_resnode2#平滑迁移ok#pcsclusterstop#平滑迁移ok#init6#平滑迁移no

以上是“如何通过双主DRBD配置KVM双节点高可用群集”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!