Ryan

VMware Workstation 虚拟机环境搭建 pacemacker+corosync HA集群
环境说明本次实验环境采用心跳网口与业务网口复用的设计,生产环境中的服务器一般网口比较多,建议分开。集群IP 192...
扫描右侧二维码阅读全文
19
2019/04

VMware Workstation 虚拟机环境搭建 pacemacker+corosync HA集群

环境说明

本次实验环境采用心跳网口与业务网口复用的设计,生产环境中的服务器一般网口比较多,建议分开。
集群IP 192.168.202.100

HA1
ens33:192.168.202.101 HA1
ens34:192.168.202.111 HA1-BACKUP
HA2
ens33:192.168.202.102 HA2
ens33:192.168.202.112 HA2-BACKUP
HA3
ens33:192.168.202.103 HA3
ens33:192.168.202.113 HA3-BACKUP

共享一块20G的磁盘,做成datavg文件系统

安装配置

VMware的配置

建立共享磁盘,必须选中立即分配所有磁盘空间。
setup-pacemaker-corosync-ha-cluster-on-vmware-1.png
setup-pacemaker-corosync-ha-cluster-on-vmware-2.png
建立完后当前虚拟机的vmx文件中会多出如下文本,是新增硬盘的配置。

scsi2.virtualDev = "lsilogic"
scsi2.present = "TRUE"
scsi2:0.fileName = "D:\VMs\HA_Storage\sharedisk1.vmdk"
scsi2:0.mode = "independent-persistent"
scsi2:0.present = "TRUE"
scsi2:0.redo = ""
scsi2.pciSlotNumber = "40"

需要修改成下面的样子,并且复制到需要共享磁盘的虚拟机的vmx文件最后

disk.locking = "false"
diskLib.dataCacheMaxSize = "0"
scsi2.virtualDev = "lsilogic"
scsi2.present = "TRUE"
scsi2:0.fileName = "D:\VMs\HA_Storage\sharedisk1.vmdk"
scsi2:0.mode = "independent-persistent"
scsi2:0.present = "TRUE"
scsi2:0.redo = ""
scsi2.pciSlotNumber = "40"

重新打开VMWare Workstation修改过的虚拟机都能看见这块共享磁盘。

集群搭建

系统安装这里就不多说了,选择软件包基础服务器设施即可。
setup-pacemaker-corosync-ha-cluster-on-vmware-3.png

基础配置

1、配置防火墙端口

# systemctl disable firewalld
# systemctl stop firewalld

实验里只是为了方便,生产环境请配置相应的防火墙规则
TCP:2224、3121、21064
UDP:5405
2、关闭SELinux

# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

重启后生效
setup-pacemaker-corosync-ha-cluster-on-vmware-4.png
3、配置网络及hosts:

# vim /etc/sysconfig/network-scripts/ifcfg-ens33
# vim /etc/hosts

setup-pacemaker-corosync-ha-cluster-on-vmware-5.png
4、时间同步:

# yum install ntp -y
# ntpdate cn.pool.ntp.org

5、虚拟机互相通信

# ping HA1
# ping HA2

setup-pacemaker-corosync-ha-cluster-on-vmware-6.png
6、安装并启动集群

# yum install pcs pacemaker corosync fence-agents-all -y
# systemctl start pcsd.service
# systemctl enable pcsd.service

7、创建集群用户:

# passwd hacluster

(此用户在安装pcs时候会自动创建)
需要输入自定义密码
上述操作都需要在2个节点上面执行。

认证作业节点

# pcs cluster auth HA1 HA2

(此处需要输入的用户名必须为pcs自动创建的hacluster,并输入密码)
setup-pacemaker-corosync-ha-cluster-on-vmware-7.png

配置和启用作业节点

1,创建并启动名为FClu的集群,其中HA1、HA2为集群成员:

# pcs cluster setup --start --name FClu HA1 HA2

setup-pacemaker-corosync-ha-cluster-on-vmware-8.png
一般生产环境都是双网卡各取一个网口做bond,无需再做两个心跳口,若想使用两个网口心跳,请使用命令。

# pcs cluster setup --start --name FClu HA1,HA1-BACKUP HA2,HA2-BACKUP

如果是建立集群后需要新增心跳口,请参照 维护&调优>其他>新增心跳网口操作。
2、设置集群自启动:

# pcs cluster enable --all

setup-pacemaker-corosync-ha-cluster-on-vmware-8.png
3、查看并设置集群属性:

# pcs status

setup-pacemaker-corosync-ha-cluster-on-vmware-10.png
检验Corosync的安装及当前corosync状态:

# corosync-cfgtool -s
# corosync-cmapctl | grep members
# pcs status corosync

setup-pacemaker-corosync-ha-cluster-on-vmware-11.png
检查配置是否正确(假若没有输出则配置正确):

# crm_verify -L -V

会报错,因为目前没有STONITH设备,所以做不了STONITH。
禁用STONITH(使用STONITH最少需要3节点,生产环境建议使用STONITH,可以增加集群健壮性):

# pcs property set stonith-enabled=false

setup-pacemaker-corosync-ha-cluster-on-vmware-12.png
到此,pacemaker+corosync集群搭建完成

资源配置

pacemaker集群支持如下集中资源类型

  • OCF:Open Cluster Framework
  • LSB:Linux Standard Base,Init脚本,一般放在/etc/init.d目录下
  • Ustart:Sysv init脚本的替代
  • Sytemd:Sysv init脚本的替代
  • Service: systemd, upstart, lsb.
  • Fencing:STONITH设备
  • Nagios Plugins

下面示例的apache服务数据Systemd服务资源
虚IP属于OCF资源

共享存储配置

如果使用VMWare做实验,请参考《VMware的配置》配置硬盘参数。
在第一个节点上操作
建立分区

[root@HA1 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。


命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p):
Using default response p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):
将使用默认值 41943039
分区 1 已设置为 Linux 类型,大小设为 20 GiB

命令(输入 m 获取帮助):t
已选择分区 1
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”

命令(输入 m 获取帮助):p

磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xc7bc1dc2

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    41943039    20970496   8e  Linux LVM

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@HA1 ~]#

建立 lvm
setup-pacemaker-corosync-ha-cluster-on-vmware-13.png
setup-pacemaker-corosync-ha-cluster-on-vmware-14.png
重新读取分区表(在其他节点操作)

# partprobe

扫描lv

# lvscan

激活lv

# vgchange -ay /dev/datavg/httpd_lv

创建集群共享磁盘,集群服务自动挂载
httpdfs 是资源名称,device='块文件路径' directory='挂载路径' fstype='文件系统格式' --group参数用于资源分组

# pcs resource create httpdfs Filesystem device="/dev/datavg/httpdlv" directory="/httpd" fstype="ext4" --group httpd

setup-pacemaker-corosync-ha-cluster-on-vmware-15.png

应用资源配置

这里以apache服务为例
1、新增用户

# useradd -G haclient httpd

2、安装apache
apache安装到共享磁盘,把服务启停配置apache24复制到其他节点即可。
3、添加服务器资源,webserver是资源名字,systemd表示使用systemd管理的服务,apache24是服务名字,使用--group参数进行资源分组。

# pcs resource create webserver systemd:apache24 --group httpd

4、新增虚拟IP

# pcs resource create ClusterIP ocf:heartbeat:IPaddr2 ip=192.168.202.100 cidr_netmask=24 nic=ens33 op monitor interval=30s --group httpd

IPaddr2资源可以自动选择网口,但是指定了nic参数可以让该资源只使用选定的网口。
5、资源启动顺序调整
比如apache启动要在盘挂好了以后操作。

# pcs constraint order start httpdfs then start webserver

setup-pacemaker-corosync-ha-cluster-on-vmware-create-ip-resource.png

额外配置

1、开放halvm功能(只需做一次,所有节点都要做)

# lvmconf --enable-halvm --services --startstopservices

setup-pacemaker-corosync-ha-cluster-on-vmware-16.png
2、备份lvm.conf文件

# cp /etc/lvm/lvm.conf /etc/lvm/lvm.conf.bak

3、修改lvm.conf,按照网上的教程说是把不需要ha管理的volume写到volume_list参数里,试验了一下,节点都找不到lv了
setup-pacemaker-corosync-ha-cluster-on-vmware-17.png
正确做法是把需要ha管理的vg加进volume_list参数里。
setup-pacemaker-corosync-ha-cluster-on-vmware-18.png

测试

切换测试1

查看当前运行节点,如图所示运行在 HA1 节点上

# pcs status
 Resource Group: httpd
     httpdfs    (ocf::heartbeat:Filesystem):    Started HA1
     webserver  (systemd:apache24):     Started HA1
     ClusterIP  (ocf::heartbeat:IPaddr2):       Started HA1

检查集群IP情况

# ip addr show label ens34
3: ens34: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether 00:0c:29:77:fa:43 brd ff:ff:ff:ff:ff:ff
    inet 192.168.202.111/24 brd 192.168.202.255 scope global ens34
       valid_lft forever preferred_lft forever
    inet 192.168.202.100/24 brd 192.168.202.255 scope global secondary ens34
       valid_lft forever preferred_lft forever

关闭ens34网口

# ifconfig ens34 down

等待1分钟,从其他节点检查集群IP是否能ping通

# ping 192.168.202.100
PING 192.168.202.100 (192.168.202.100) 56(84) bytes of data.
64 bytes from 192.168.202.100: icmp_seq=1 ttl=64 time=0.528 ms

检查可知,集群IP已经切换至ens33接口

# ip addr show label ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:77:fa:39 brd ff:ff:ff:ff:ff:ff
    inet 192.168.202.101/24 brd 192.168.202.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.202.100/24 brd 192.168.202.255 scope global secondary ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe77:fa39/64 scope link
       valid_lft forever preferred_lft forever

切换测试2

把HA1节点设置为Standby状态,看资源组是否会切换至HA2

# pcs resource
 Resource Group: httpd
     httpdfs    (ocf::heartbeat:Filesystem):    Started HA1
     webserver  (systemd:apache24):     Started HA1
     ClusterIP  (ocf::heartbeat:IPaddr2):       Started HA1
# pcs node standby HA1
# pcs resource
 Resource Group: httpd
     httpdfs    (ocf::heartbeat:Filesystem):    Started HA2
     webserver  (systemd:apache24):     Started HA2
     ClusterIP  (ocf::heartbeat:IPaddr2):       Started HA2

取消standby状态,资源没有切换回来,因为没有设置节点倾向

# pcs node unstandby HA1
# pcs resource
 Resource Group: httpd
     httpdfs    (ocf::heartbeat:Filesystem):    Started HA2
     webserver  (systemd:apache24):     Started HA2
     ClusterIP  (ocf::heartbeat:IPaddr2):       Started HA2

集群切换功能正常。

切换测试3

关闭HA2节点,业务切换至HA1

[root@HA2 ~]# pcs resource
 Resource Group: httpd
     httpdfs    (ocf::heartbeat:Filesystem):    Started HA2
     webserver  (systemd:apache24):     Started HA2
     ClusterIP  (ocf::heartbeat:IPaddr2):       Started HA2
[root@HA2 ~]# init 0
Connection to 192.168.202.102 closed by remote host.
Connection to 192.168.202.102 closed.
[root@HA1 ~]# pcs resource
 Resource Group: httpd
     httpdfs    (ocf::heartbeat:Filesystem):    Started HA1
     webserver  (systemd:apache24):     Started HA1
     ClusterIP  (ocf::heartbeat:IPaddr2):       Started HA1

参考资料

  1. 手动配置三台虚拟机pacemaker+corosync并添加httpd服务
  2. CentOS7/RHEL7 pacemaker+corosync高可用集群搭建
  3. Troubles with shared storage with GFS2
  4. 透過 PACEMAKER 來配置 RED HAT HIGH AVAILABILITY ADD-ON
  5. changing corosync ring0 address and adding ring 1 notes
搬瓦工年付$187机房套餐补货了,电信联通优化,512M内存/500G流量/1G带宽,建站稳定,优惠码:BWH1ZBPVK,【点击购买】!
搬瓦工年付$28CN2高速线路,512M内存/500G流量/1G带宽,电信联通优化,延迟低,速度快,建站稳定,优惠码同上,【点击购买】!
Last modification:May 2nd, 2019 at 01:37 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment