溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

如何通過(guò)雙主DRBD配置KVM雙節(jié)點(diǎn)高可用群集

發(fā)布時(shí)間:2022-02-18 14:17:47 來(lái)源:億速云 閱讀:170 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要為大家展示了“如何通過(guò)雙主DRBD配置KVM雙節(jié)點(diǎn)高可用群集”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“如何通過(guò)雙主DRBD配置KVM雙節(jié)點(diǎn)高可用群集”這篇文章吧。

DRBD(Distributed Replicated Block Device,分布式復(fù)制塊設(shè)備)是一個(gè)用軟件實(shí)現(xiàn)的、無(wú)共享的、服務(wù)器之間鏡像塊設(shè)備內(nèi)容的存儲(chǔ)復(fù)制解決方案。DRBD是鏡像塊設(shè)備,是按數(shù)據(jù)位鏡像成一樣的數(shù)據(jù)塊。DRBD(Distributed Replicated Block Device,分布式復(fù)制塊設(shè)備)是一個(gè)用軟件實(shí)現(xiàn)的、無(wú)共享的、服務(wù)器之間鏡像塊設(shè)備內(nèi)容的存儲(chǔ)復(fù)制解決方案。DRBD是鏡像塊設(shè)備,是按數(shù)據(jù)位鏡像成一樣的數(shù)據(jù)塊。

實(shí)驗(yàn)?zāi)康模簶?gòu)件基于本地存儲(chǔ),可平滑遷移虛擬機(jī)的kvm高可用平臺(tái)
高可用架構(gòu):pacemaker+corosync 并由pcs進(jìn)行管理
所需組件:DRBD,DLM,gfs2,clvm,pcs,pacemeker,corosync,libvirtd,qemu,qemu-img
系統(tǒng)環(huán)境:兩臺(tái)kvm節(jié)點(diǎn)都是最新的centos7.4,每臺(tái)節(jié)點(diǎn),掛載一塊sdb 40G的磁盤(pán)

實(shí)驗(yàn)環(huán)境:kvm節(jié)點(diǎn)運(yùn)行在ESXI6.5的宿主機(jī)上(如圖)

如何通過(guò)雙主DRBD配置KVM雙節(jié)點(diǎn)高可用群集
基于雙主DRBD的KVM雙節(jié)點(diǎn)高可用群集配置基于雙主DRBD的KVM雙節(jié)點(diǎn)高可用群集配置
如何通過(guò)雙主DRBD配置KVM雙節(jié)點(diǎn)高可用群集
基于雙主DRBD的KVM雙節(jié)點(diǎn)高可用群集配置基于雙主DRBD的KVM雙節(jié)點(diǎn)高可用群集配置

軟件安裝(雙節(jié)點(diǎn)操作)

#DRBD管理軟件的安裝(先添加key和elrepo源)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 -y
yum install pacemaker corosync pcs psmisc policycoreutils-python fence-agents-all -y#gfs2和dlm還有clvm軟件yum install dlm lvm2-cluster gfs2-utils -y#升級(jí)標(biāo)準(zhǔn)的kvm組件為ev版本(可選)yum install centos-release-qemu-ev -y
yum install qemu-kvm-ev -y  #經(jīng)測(cè)試,安裝它后,創(chuàng)建虛擬機(jī)時(shí)會(huì)卡住#或則運(yùn)行下面命令一步到位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

準(zhǔn)備階段

1;主機(jī)名,hosts解析
10.0.0.31 node1
10.0.0.32 node2

2: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:每個(gè)node節(jié)點(diǎn)準(zhǔn)備掛載一塊40G的本地磁盤(pán)sdb

4:配置時(shí)區(qū)和時(shí)鐘
cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
crontab -e
*/30 * * * * /usr/sbin/ntpdate time.windows.com &> /dev/null

5:在所有節(jié)點(diǎn)創(chuàng)建一個(gè)目錄
mkdir /kvm-hosts

6:配置firewalld防火墻,將corosync,drbd的專(zhuān)用網(wǎng)段設(shè)置為全開(kāi)放
firewall-cmd --zone=trusted --add-source=10.0.0.0/24 --permanent
firewall-cmd --zone=trusted --add-source=172.168.1.0/24 --permanent
firewall-cmd --reload

7:配置selinux
yum install -y policycoreutils-python #安裝這個(gè)軟件包,才會(huì)有下面的命令semanage permissive -a drbd_t

8:磁盤(pán)準(zhǔn)備#為本地的那塊40G的磁盤(pán)創(chuàng)建lv(注意磁盤(pán)的大小要一致)(雙節(jié)點(diǎn)都要做,建議將lv的名稱(chēng)都配置為一樣的)fdisk /dev/sdb
partprobe
pvcreate /dev/sdb1
vgcreate vgdrbd0 /dev/sdb1
lvcreate -n lvdrbd0 -L 40G vgdrbd0

第一:配置DRBD(雙節(jié)點(diǎn)操作)

#修改全局配置文件:vi /etc/drbd.d/global_common.conf
usage-count yes; 改成no,這是使用計(jì)數(shù),drbd團(tuán)隊(duì)收集互聯(lián)網(wǎng)上有多少在使用drbd#創(chuàng)建配置文件vi /etc/drbd.d/r0.res

resource 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可以不配置下面的參數(shù),這里是雙主需要配置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  #此時(shí)還看不到狀態(tài)modprobe drbd  #加載drbd模塊,drbdadm up r0
 cat /proc/drbd  #此時(shí)便能看見(jiàn)狀態(tài)#同步(在其中一個(gè)節(jié)點(diǎn)上,將其置為主,并查看是否從指定網(wǎng)卡進(jìn)行同步)drbdadm primary r0 --force
ifstat   #查看網(wǎng)卡流量cat /proc/drbd  #查看同步進(jìn)度#設(shè)drbd為開(kāi)機(jī)啟動(dòng)echo "drbdadm up r0 " >> /etc/rc.local
chmod +x /etc/rc.d/rc.local

第二:創(chuàng)建群集

systemctl start pcsd
systemctl enable pcsdecho "7845" | passwd --stdin hacluster  #前面三步是雙節(jié)點(diǎn)操作,后面只需任一節(jié)點(diǎn)操作pcs cluster auth node1 node2 -u hacluster -p 7845
pcs cluster setup --name kvm-ha-cluster node1 node2 #創(chuàng)建名為kvm-ha-cluster的群集,后面gfs2需要再次用到pcs cluster start --all
pcs cluster enable --all #開(kāi)機(jī)自動(dòng)啟動(dòng)所有群集節(jié)點(diǎn)(在生產(chǎn)環(huán)境中不要將群集設(shè)為開(kāi)機(jī)自啟動(dòng))

第三:配置STONITH(由于節(jié)點(diǎn)的承載平臺(tái)是ESXI,所以這里用fence_vmware_soap)

#在雙節(jié)點(diǎn)上查看是否安裝了fence_vmware_soappcs stonith list | grep fence_vmware_soap#在所有節(jié)點(diǎn)上,查看是否可以與esxi主機(jī)通信[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-6551bdf96b14
node2,564d585f-f120-4be2-0ad4-0e1964d4b7b9#嘗試fence_vmware_soap 是否能控制esxi主機(jī),對(duì)虛擬機(jī)進(jìn)行操作(譬如:重啟node2這臺(tái)虛擬機(jī))[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

解釋?zhuān)?a指代ESXI的管理地址,-z 表示使用ssl連接443端口,-l 是esxi的管理用戶(hù)名稱(chēng),-p 是管理密碼, --plug 是虛擬機(jī)名字,名稱(chēng)不唯一時(shí)可以為UUID, --action 是執(zhí)行動(dòng)作(reboot|off|on)#配置STONITHpcs cluster cib stonith_cfg

pcs -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=60s

pcs -f stonith_cfg property set stonith-enabled=truepcs cluster cib-push stonith_cfg #更新#注意1:pcmk_host_map這里是在ESXI上顯示的虛擬機(jī)的名字,不是kvm節(jié)點(diǎn)系統(tǒng)層面的主機(jī)名
2:pcmk_host_map后面格式是"虛擬機(jī)名字:UUID;虛擬機(jī)名字:UUID"#這是查看pcs關(guān)于fence_vmware_soap的stonith設(shè)置的寫(xiě)法pcs stonith describe fence_vmware_soap#查看剛才配置好的stonith資源[root@node1 ~]# pcs stonith show --fullResource: 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當(dāng)出現(xiàn)腦裂時(shí)將會(huì)執(zhí)行的動(dòng)作[root@node1 ~]# pcs property --all |grep stonith-actionstonith-action: reboot

測(cè)試STONITH設(shè)置是否正確設(shè)置并生效
pcs status  #先查看剛才創(chuàng)建的stonith資源MyVMwareFence是否已經(jīng)在某個(gè)節(jié)點(diǎn)啟動(dòng)了(然后執(zhí)行下面的驗(yàn)證)stonith_admin --reboot node2  #重啟node2節(jié)點(diǎn),驗(yàn)證成功

第四:配置DLM

pcs resource create dlm ocf:pacemaker:controld op monitor interval=30s on-fail=fence clone interleave=true ordered=true#查看dlm是否啟動(dòng)了pcs status
systemctl status pacemaker

第五:為群集添加DRBD資源

#首先,要保證兩個(gè)狀態(tài)均為Secondary,數(shù)據(jù)狀態(tài)都為UpToDate[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: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狀態(tài)現(xiàn)在是這樣的Primary/Secondarydrbdadm down r0  #在Primary端做drbdadm up r0  #在Primary端做,而后在查看cat /proc/drbd#添加資源(這步操作會(huì)將兩個(gè)節(jié)點(diǎn)的drbd狀態(tài)變成Primary/Primary)pcs cluster cib drbd_cfg
pcs -f drbd_cfg resource create VMdata ocf:linbit:drbd drbd_resource=r0 op monitor interval=60s
pcs -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兩邊的狀態(tài)cat /proc/drbd  #結(jié)果是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

第六:創(chuàng)建CLVM,并配置約束

如何通過(guò)雙主DRBD配置KVM雙節(jié)點(diǎn)高可用群集
基于雙主DRBD的KVM雙節(jié)點(diǎn)高可用群集配置基于雙主DRBD的KVM雙節(jié)點(diǎn)高可用群集配置
#將lvm工作模式設(shè)為群集模式(雙節(jié)點(diǎn)操作)lvmconf --enable-cluster
reboot#向群集添加CLVM資源pcs resource create clvmd ocf:heartbeat:clvm op monitor interval=30s on-fail=fence clone interleave=true ordered=true#查看會(huì)發(fā)現(xiàn)clvm啟動(dòng)了systemctl status pacemaker#配置約束pcs constraint order start dlm-clone then clvmd-clone
pcs constraint colocation add clvmd-clone with dlm-clone

pcs constraint order promote VMdataclone then start clvmd-clone
pcs constraint colocation add clvmd-clone with VMdataclone#驗(yàn)證查看約束pcs constraint

第七:為群集創(chuàng)建LV

#根據(jù)場(chǎng)景,這里需要?jiǎng)?chuàng)建lvm的過(guò)濾屬性,避免lvm會(huì)看到重復(fù)的數(shù)據(jù)(雙節(jié)點(diǎn)操作)#其中一個(gè)節(jié)點(diǎn)[root@node1 ~]# lvscanACTIVE            '/dev/vgdrbd0/lvdrbd0' [5.00 GiB] inherit
ACTIVE            '/dev/cl/swap' [2.00 GiB] inherit
ACTIVE            '/dev/cl/root' [28.99 GiB] inherit

pvcreate /dev/drbd0
pvscan #發(fā)現(xiàn)報(bào)錯(cuò)#(雙節(jié)點(diǎn)操作)vi /etc/lvm/lvm.conf #找到filter,將其修改為如下filter = [ "a|/dev/sd*|", "a|/dev/drbd*|", "r|.*|" ]#a 表示接受,r表示拒絕,這里sd*是本地磁盤(pán),drbd*是創(chuàng)建的設(shè)備,根據(jù)自己實(shí)驗(yàn)環(huán)境修改,你的可能是vd*#再次查看pvscan  #沒(méi)有錯(cuò)誤了#在所有節(jié)點(diǎn)刷新lvmvgscan -v#只需在其中一個(gè)節(jié)點(diǎn)創(chuàng)建lvmpvcreate /dev/drbd0
partprobe ; multipath -r
vgcreate vgvm0 /dev/drbd0
lvcreate -n lvvm0 -l 100%FREE vgvm0
lvscan

[root@node1 ~]# vgs VG      #PV #LV #SN Attr   VSize   VFree   cl        1   2   0 wz--n- #上面做完后,在另一個(gè)節(jié)點(diǎn)上刷新一下
partprobe ; multipath -r
lvs

第八:配置gfs2(任意節(jié)點(diǎn)操作)

#格式化lvscan
mkfs.gfs2 -p lock_dlm -j 2 -t kvm-ha-cluster:kvm /dev/vgvm0/lvvm0#向群集中添加gfs2文件系統(tǒng)pcs resource create VMFS Filesystem device="/dev/vgvm0/lvvm0" directory="/kvm-hosts" fstype="gfs2" clone#配置約束pcs constraint order clvmd-clone then VMFS-clone
pcs constraint colocation add VMFS-clone with clvmd-clone#配置SELINUX(不然虛擬機(jī)無(wú)法訪問(wèn)存儲(chǔ)文件)(所有節(jié)點(diǎn)都要做)semanage fcontext -a -t virt_image_t "/kvm-hosts(/.*)?"#如果沒(méi)有semanage,可以如下安裝yum install policycoreutils-python
restorecon -R -v /kvm-hosts

第九:準(zhǔn)備測(cè)試用的虛擬機(jī),配置防火墻,并進(jìn)行在線遷移測(cè)試

#單點(diǎn)創(chuàng)建虛擬機(jī)qemu-img create -f qcow2 /kvm-hosts/web01.qcow2 10G

virt-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#配置第三方管理機(jī)能用virtual-manage連接并顯示kvm-pt上的虛擬機(jī)(所有node節(jié)點(diǎn)都要)firewall-cmd --permanent --add-service=vnc-server#配置防火墻(所有kvm節(jié)點(diǎn))firewall-cmd --permanent --add-port=16509/tcp #這是virsh -c qemu+tcp://node2/system 模式,這里不會(huì)用到,但還是放行firewall-cmd --permanent --add-port=49152-49215/tcp #遷移端口firewall-cmd --reload#創(chuàng)建前:要進(jìn)行遷移測(cè)試(virt-manage和命令行) 結(jié)果:都o(jì)k,都能平滑遷移virsh migrate web01 qemu+ssh://root@node2/system --live --unsafe --persistent --undefinesource

第十:為群集創(chuàng)建虛擬機(jī)資源,并配置相應(yīng)約束

#在虛擬機(jī)運(yùn)行節(jié)點(diǎn)上導(dǎo)出xml文件virsh dumpxml web01 > /kvm-hosts/web01.xml
virsh undefine web01#創(chuàng)建虛擬機(jī)(虛擬機(jī)的磁盤(pán)文件和xml配置文件都要放在共享存儲(chǔ)上)(虛擬機(jī)由群集軟件來(lái)控制,不由本地的libvirt來(lái)控制)pcs resource create web01_res VirtualDomain \
hypervisor="qemu:///system" \
config="/kvm-hosts/web01.xml" \
migration_transport="ssh" \
meta allow-migrate="true"#配置約束(每配置一個(gè)虛擬機(jī),就需要配置下面類(lèi)似的約束)pcs constraint order start VMFS-clone then web01_res  #先啟動(dòng)文件系統(tǒng),在啟動(dòng)虛擬機(jī)資源#當(dāng)你對(duì)一個(gè)節(jié)點(diǎn)上的群集服務(wù)重啟后,若是發(fā)現(xiàn)沒(méi)有掛載gfs2文件系統(tǒng)到響應(yīng)目錄,解決辦法有兩個(gè)1:停掉所有節(jié)點(diǎn)上的群集,做一次全部啟動(dòng)
2:在任意節(jié)點(diǎn)執(zhí)行,下面的操作
pcs constraint colocation add web01_res with VMFS-clone#查找剛才創(chuàng)建約束的id,并立即刪除pcs constraint --full
pcs constraint remove  
pcs constraint #查看約束,可以加 --full#配置完成后,虛擬機(jī)可以正常啟動(dòng)最后:遷移測(cè)試#pcs cluster standby node2   #平滑遷移ok#pcs resource move web01_res node2  #平滑遷移ok#pcs cluster stop    #平滑遷移ok#init 6      #平滑遷移no

以上是“如何通過(guò)雙主DRBD配置KVM雙節(jié)點(diǎn)高可用群集”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI