如何配置基于双主DRBD的KVM双节点高可用群集
发表于:2024-10-27 作者:千家信息网编辑
千家信息网最后更新 2024年10月27日,这篇文章主要为大家展示了"如何配置基于双主DRBD的KVM双节点高可用群集",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何配置基于双主DRBD的KVM双
千家信息网最后更新 2024年10月27日如何配置基于双主DRBD的KVM双节点高可用群集
这篇文章主要为大家展示了"如何配置基于双主DRBD的KVM双节点高可用群集",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何配置基于双主DRBD的KVM双节点高可用群集"这篇文章吧。
实验目的:构件基于本地存储,可平滑迁移虚拟机的kvm高可用平台高可用架构:pacemaker+corosync 并由pcs进行管理所需组件:DRBD,DLM,gfs2,clvm,pcs,pacemeker,corosync,libvirtd,qemu,qemu-img系统环境:两台kvm节点都是最新的centos7.4,每台节点,挂载一块sdb 40G的磁盘
实验环境:kvm节点运行在ESXI6.5的宿主机上(如图)
软件安装(双节点操作)
#DRBD管理软件的安装(先添加key和elrepo源)rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.orgrpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpmyum install kmod-drbd84 drbd84-utils -y #虚拟化软件安装yum groups install -y "Virtualization Platform " yum groups install -y "Virtualization Hypervisor "yum groups install -y "Virtualization Tools "yum groups install -y "Virtualization Client "#群集及配套软件安装yum install bash-completion ntpdate tigervnc-server -yyum install pacemaker corosync pcs psmisc policycoreutils-python fence-agents-all -y#gfs2和dlm还有clvm软件yum install dlm lvm2-cluster gfs2-utils -y#升级标准的kvm组件为ev版本(可选)yum install centos-release-qemu-ev -yyum install qemu-kvm-ev -y #经测试,安装它后,创建虚拟机时会卡住#或则运行下面命令一步到位rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org && rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm && yum install kmod-drbd84 drbd84-utils -y && yum groups install -y "Virtualization Platform " && yum groups install -y "Virtualization Hypervisor " && yum groups install -y "Virtualization Tools " && yum groups install -y "Virtualization Client " && yum install bash-completion ntpdate tigervnc-server centos-release-qemu-ev -y && yum install pacemaker corosync pcs psmisc policycoreutils-python fence-agents-all -y && yum install dlm lvm2-cluster gfs2-utils -y && reboot
准备阶段
1;主机名,hosts解析10.0.0.31 node110.0.0.32 node22:ssh key互信ssh-keygen -t rsa -P ''ssh-copy-id -i ~/.ssh/id_rsa.pub root@node1 #到自己免密码ssh-copy-id -i ~/.ssh/id_rsa.pub root@node2 #到node2免密码(双向)3:每个node节点准备挂载一块40G的本地磁盘sdb4:配置时区和时钟cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtimecrontab -e*/30 * * * * /usr/sbin/ntpdate time.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:配置selinuxyum install -y policycoreutils-python #安装这个软件包,才会有下面的命令semanage permissive -a drbd_t8:磁盘准备#为本地的那块40G的磁盘创建lv(注意磁盘的大小要一致)(双节点都要做,建议将lv的名称都配置为一样的)fdisk /dev/sdbpartprobepvcreate /dev/sdb1vgcreate vgdrbd0 /dev/sdb1lvcreate -n lvdrbd0 -L 40G vgdrbd0
第一:配置DRBD(双节点操作)
#修改全局配置文件:vi /etc/drbd.d/global_common.confusage-count yes; 改成no,这是使用计数,drbd团队收集互联网上有多少在使用drbd#创建配置文件vi /etc/drbd.d/r0.resresource r0 { protocol C; meta-disk internal; device /dev/drbd0; disk /dev/vgdrbd0/lvdrbd0; syncer { verify-alg sha1; } on node1 { address 172.168.1.41:7789; } on node2 { address 172.168.1.42:7789; }#若是单主drbd可以不配置下面的参数,这里是双主需要配置 net { allow-two-primaries; after-sb-0pri discard-zero-changes; after-sb-1pri discard-secondary; after-sb-2pri disconnect; } disk { fencing resource-and-stonith; } handlers { fence-peer "/usr/lib/drbd/crm-fence-peer.sh"; after-resync-target "/usr/lib/drbd/crm-unfence-peer.sh"; }}#初始化 drbdadm create-md r0 cat /proc/drbd #此时还看不到状态 modprobe drbd #加载drbd模块, drbdadm up r0 cat /proc/drbd #此时便能看见状态#同步(在其中一个节点上,将其置为主,并查看是否从指定网卡进行同步) drbdadm primary r0 --force ifstat #查看网卡流量 cat /proc/drbd #查看同步进度#设drbd为开机启动 echo "drbdadm up r0 " >> /etc/rc.local chmod +x /etc/rc.d/rc.local
第二:创建群集
systemctl start pcsdsystemctl enable pcsdecho "7845" | passwd --stdin hacluster #前面三步是双节点操作,后面只需任一节点操作pcs cluster auth node1 node2 -u hacluster -p 7845pcs cluster setup --name kvm-ha-cluster node1 node2 #创建名为kvm-ha-cluster的群集,后面gfs2需要再次用到pcs cluster start --allpcs cluster enable --all #开机自动启动所有群集节点(在生产环境中不要将群集设为开机自启动)
第三:配置STONITH(由于节点的承载平台是ESXI,所以这里用fence_vmware_soap)
#在双节点上查看是否安装了fence_vmware_soappcs stonith list | grep fence_vmware_soap#在所有节点上,查看是否可以与esxi主机通信[root@node1 ~] fence_vmware_soap -a 192.168.5.1 -z --ssl-insecure --action list --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 -a 192.168.5.1 -z --ssl-insecure --action list -l root -p tianyu@esxi --plug="node2" --action=rebootSuccess: Rebooted解释:-a指代ESXI的管理地址,-z 表示使用ssl连接443端口,-l 是esxi的管理用户名称,-p 是管理密码, --plug 是虚拟机名字,名称不唯一时可以为UUID, --action 是执行动作(reboot|off|on)#配置STONITHpcs cluster cib stonith_cfgpcs -f stonith_cfg stonith create MyVMwareFence fence_vmware_soap ipaddr=192.168.5.1 ipport=443 ssl_insecure=1 inet4_only=1 login="root" passwd="tianyu@esxi" action=reboot pcmk_host_map="node1:564d59df-c34e-78e9-87d2-6551bdf96b14;node2:564d585f-f120-4be2-0ad4-0e1964d4b7b9" pcmk_host_check=static-list pcmk_host_list="node1,node2" power_wait=3 op monitor interval=60spcs -f stonith_cfg property set stonith-enabled=truepcs cluster cib-push stonith_cfg #更新#注意1:pcmk_host_map这里是在ESXI上显示的虚拟机的名字,不是kvm节点系统层面的主机名2:pcmk_host_map后面格式是"虚拟机名字:UUID;虚拟机名字:UUID"#这是查看pcs关于fence_vmware_soap的stonith设置的写法pcs stonith describe fence_vmware_soap#查看刚才配置好的stonith资源[root@node1 ~]# pcs stonith show --full Resource: MyVMwareFence (class=stonith type=fence_vmware_soap) Attributes: action=reboot inet4_only=1 ipaddr=192.168.5.1 ipport=443 login=root passwd=tianyu@esxi pcmk_host_check=static-list pcmk_host_list=node1,node2 pcmk_host_map=node1:564df454-4553-2940-fac6-085387383a62;node2:564def17-cb33-c0fc-3e3f-1ad408818d62 power_wait=3 ssl_insecure=1 Operations: monitor interval=60s (MyVMwareFence-monitor-interval-60s)#查看刚才配置的stonith当出现脑裂时将会执行的动作[root@node1 ~]# pcs property --all |grep stonith-action stonith-action: reboot测试STONITH设置是否正确设置并生效pcs status #先查看刚才创建的stonith资源MyVMwareFence是否已经在某个节点启动了(然后执行下面的验证)stonith_admin --reboot node2 #重启node2节点,验证成功
第四:配置DLM
pcs resource create dlm ocf:pacemaker:controld op monitor interval=30s on-fail=fence clone interleave=true ordered=true#查看dlm是否启动了pcs statussystemctl status pacemaker
第五:为群集添加DRBD资源
#首先,要保证两个状态均为Secondary,数据状态都为UpToDate[root@node1 ~]# cat /proc/drbd version: 8.4.10-1 (api:1/proto:86-101)GIT-hash: a4d5de01fffd7e4cde48a080e2c686f9e8cebf4c build by mockbuild@, 2017-09-15 14:23:22 0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r----- ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0#若drbd状态现在是这样的Primary/Secondarydrbdadm down r0 #在Primary端做drbdadm up r0 #在Primary端做,而后在查看cat /proc/drbd #添加资源(这步操作会将两个节点的drbd状态变成Primary/Primary)pcs cluster cib drbd_cfgpcs -f drbd_cfg resource create VMdata ocf:linbit:drbd drbd_resource=r0 op monitor interval=60spcs -f drbd_cfg resource master VMdataclone VMdata master-max=2 master-node-max=1 clone-max=2 clone-node-max=1 notify=truepcs -f drbd_cfg resource show #检查是否正确pcs cluster cib-push drbd_cfg #提交#查看drbd两边的状态cat /proc/drbd #结果是Primary/Primary ok[root@node1 ~]# cat /proc/drbdversion: 8.4.10-1 (api:1/proto:86-101)GIT-hash: a4d5de01fffd7e4cde48a080e2c686f9e8cebf4c build by mockbuild@, 2017-09-15 14:23:22 0: cs:Connected ro:Primary/Primary ds:UpToDate/UpToDate C r----- ns:0 nr:0 dw:0 dr:912 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
第六:创建CLVM,并配置约束
#将lvm工作模式设为群集模式(双节点操作)lvmconf --enable-clusterreboot#向群集添加CLVM资源pcs resource create clvmd ocf:heartbeat:clvm op monitor interval=30s on-fail=fence clone interleave=true ordered=true #查看会发现clvm启动了systemctl status pacemaker#配置约束pcs constraint order start dlm-clone then clvmd-clonepcs constraint colocation add clvmd-clone with dlm-clonepcs constraint order promote VMdataclone then start clvmd-clonepcs constraint colocation add clvmd-clone with VMdataclone#验证查看约束pcs constraint
第七:为群集创建LV
#根据场景,这里需要创建lvm的过滤属性,避免lvm会看到重复的数据(双节点操作)#其中一个节点[root@node1 ~]# lvscan ACTIVE '/dev/vgdrbd0/lvdrbd0' [5.00 GiB] inherit ACTIVE '/dev/cl/swap' [2.00 GiB] inherit ACTIVE '/dev/cl/root' [28.99 GiB] 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 -r vgcreate vgvm0 /dev/drbd0lvcreate -n lvvm0 -l 100%FREE vgvm0lvscan[root@node1 ~]# vgs VG #PV #LV #SN Attr VSize VFree cl 1 2 0 wz--n- <31.00g 4.00m vgdrbd0 1 1 0 wz--n- <40.00g <30.00g vgvm0 1 1 0 wz--nc <10.00g 0 #上面做完后,在另一个节点上刷新一下partprobe ; multipath -r lvs
第八:配置gfs2(任意节点操作)
#格式化lvscanmkfs.gfs2 -p lock_dlm -j 2 -t kvm-ha-cluster:kvm /dev/vgvm0/lvvm0#向群集中添加gfs2文件系统pcs resource create VMFS Filesystem device="/dev/vgvm0/lvvm0" directory="/kvm-hosts" fstype="gfs2" clone#配置约束pcs constraint order clvmd-clone then VMFS-clonepcs constraint colocation add VMFS-clone with clvmd-clone#配置SELINUX(不然虚拟机无法访问存储文件)(所有节点都要做)semanage fcontext -a -t virt_image_t "/kvm-hosts(/.*)?"#如果没有semanage,可以如下安装yum install policycoreutils-pythonrestorecon -R -v /kvm-hosts
第九:准备测试用的虚拟机,配置防火墙,并进行在线迁移测试
#单点创建虚拟机qemu-img create -f qcow2 /kvm-hosts/web01.qcow2 10Gvirt-install --name web01 --virt-type kvm --ram 1024 --cdrom=/kvm-hosts/CentOS-7-x86_64-Minimal-1708.iso --disk path=/kvm-hosts/web01.qcow2 --network network=default --graphics vnc,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 -c qemu+tcp://node2/system 模式,这里不会用到,但还是放行firewall-cmd --permanent --add-port=49152-49215/tcp #迁移端口firewall-cmd --reload#创建前:要进行迁移测试(virt-manage和命令行) 结果:都ok,都能平滑迁移 virsh migrate web01 qemu+ssh://root@node2/system --live --unsafe --persistent --undefinesource
第十:为群集创建虚拟机资源,并配置相应约束
#在虚拟机运行节点上导出xml文件virsh dumpxml web01 > /kvm-hosts/web01.xmlvirsh undefine web01#创建虚拟机(虚拟机的磁盘文件和xml配置文件都要放在共享存储上)(虚拟机由群集软件来控制,不由本地的libvirt来控制)pcs resource create web01_res VirtualDomain \hypervisor="qemu:///system" \config="/kvm-hosts/web01.xml" \migration_transport="ssh" \meta allow-migrate="true" #配置约束(每配置一个虚拟机,就需要配置下面类似的约束)pcs constraint order start VMFS-clone then web01_res #先启动文件系统,在启动虚拟机资源#当你对一个节点上的群集服务重启后,若是发现没有挂载gfs2文件系统到响应目录,解决办法有两个1:停掉所有节点上的群集,做一次全部启动2:在任意节点执行,下面的操作pcs constraint colocation add web01_res with VMFS-clone #查找刚才创建约束的id,并立即删除pcs constraint --fullpcs constraint remove pcs constraint #查看约束,可以加 --full#配置完成后,虚拟机可以正常启动最后:迁移测试#pcs cluster standby node2 #平滑迁移ok#pcs resource move web01_res node2 #平滑迁移ok#pcs cluster stop #平滑迁移ok#init 6 #平滑迁移no
以上是"如何配置基于双主DRBD的KVM双节点高可用群集"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
节点
配置
文件
状态
磁盘
资源
软件
平滑
测试
管理
系统
主机
名字
环境
面的
准备
两个
内容
名称
命令
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件数据库连接问题
数据库删除表中特定数值代码
软件开发网络安全
北京国际服务器公司虚拟主机
如何管理别人的服务器
软件开发很难吗
个人云存储可以用来做服务器吗
江苏数据软件开发创意
软件开发入职不签劳动合同
单个数据库支持多少qps
苹果数据库怎么设置
vba用什么软件开发
网络安全重保服务协议
在美国做软件开发
扩展dns服务器未响应
创造与魔法物价低的几个服务器
猿宝互联网科技公司怎么样
计算机二级数据库培训
完成网络安全监测的保障能力
服务器类电话大全
vf数据库如何输出
广播电视网络安全应急管理的评价
tbase数据库免费吗
电力网络安全的期刊
网络安全进阶必备书籍
南通app软件开发的前景
对政府网络安全的建议
服务器电源哪家优惠
网络技术与社会发展关系
淮安怪痘网络技术有限公司