写点什么

基于 DRBD 的 KVM 动态迁移,Java 开发需要学什么

用户头像
极客good
关注
发布于: 2 小时前

3:每个 node 节点准备挂载一块 40G 的本地磁盘 sdb


4:配置时区和时钟


cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime


crontab -e


*/30 * * * * /usr/sbin/ntpdate time.windows.com &> /de


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


v/null


5:在所有节点创建一个目录


mkdir /kvm-hosts


6:配置 firewalld 防火墙,将 corosync,drbd 的专用网段设置为全开放


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 #安装这个软件包,才会有下面的命令


semanage permissive -a drbd_t


8:磁盘准备


#为本地的那块 40G 的磁盘创建 lv(注意磁盘的大小要一致)(双节点都要做,建议将 lv 的名称都配置为一样的)


fdisk /dev/sdb


partprobe


pvcreate /dev/sdb1


vgcreate vgdrbd0 /dev/sdb1


lvcreate -n lvdrbd0 -L 40G vgdrbd0

[](

)第一:配置 DRBD(双节点操作)


#修改全局配置文件:


vi /etc/drbd.d/global_common.conf


usage-count yes; 改成 no,这是使用计数,drbd 团队收集互联网上有多少在使用 drbd


#创建配置文件


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 可以不配置下面的参数,这里是双主需要配置


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 pcsd


systemctl enable pcsd


echo "7845" | passwd --stdin hacluster #前面三步是双节点操作,后面只需任一节点操作


pcs cluster auth node1 node2 -u hacluster -p 7845


pcs cluster setup --name kvm-ha-cluster node1 node2 #创建名为 kvm-ha-cluster 的群集,后面 gfs2 需要再次用到


pcs cluster start --all


pcs cluster enable --all #开机自动启动所有群集节点(在生产环境中不要将群集设为开机自启动)

[](

)第三:配置 STONITH(由于节点的承载平台是 ESXI,所以这里用 fence_vmware_soap)


#在双节点上查看是否安装了 fence_vmware_soap


pcs 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-6551bdf96b14


node2,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=reboot


Success: Rebooted


解释:-a 指代 ESXI 的管理地址,-z 表示使用 ssl 连接 443 端口,-l 是 esxi 的管理用户名称,-p 是管理密码, --plug 是虚拟机名字,名称不唯一时可以为 UUID, --action 是执行动作(reboot|off|on)


#配置 STONITH


pcs 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=true


pcs 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 status


systemctl 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/Secondary


drbdadm down r0 #在 Primary 端做


drbdadm up r0 #在 Primary 端做,而后在查看 cat /proc/drbd


#添加资源(这步操作会将两个节点的 drbd 状态变成 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=true


pcs -f drbd_cfg resource show #检查是否正确


pcs cluster cib-push drbd_cfg #提交


#查看 drbd 两边的状态


cat /proc/drbd #结果是 Primary/Primary ok


[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: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-cluster


reboot


#向群集添加 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-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


#验证查看约束


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] inherit


pvcreate /dev/drbd0


pvscan #发现报错


#(双节点操作)


vi /etc/lvm/lvm.conf #找到 filter,将其修改为如下


filter = [ "a|/dev/sd*|", "a|/dev/drbd*|", "r|.*|" ]


#a 表示接受,r 表示拒绝,这里 sd 是本地磁盘,drbd 是创建的设备,根据自己实验环境修改,你的可能是 vd*

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
基于DRBD的KVM动态迁移,Java开发需要学什么