一、什么是pacemaker?
Pacemaker是一个集群资源管理器。
它利用集群基础构件(OpenAIS 、heartbeat或corosync)提供的消息和成员管理能力来探测并从节点或资源级别的故障中恢复,
以实现群集服务(亦称资源)的最大可用性。
它可以做几乎任何规模的集群,并带有一个强大的依赖模式,让管理员能够准确地表达群集资源之间的关系(包括顺序和位置)。
几乎任何可以编写的脚本,都可以作为管理起搏器集群的一部分。
尤为重要的是Pacemaker不是一个heartbeat的分支,似乎很多人存在这样的误解。
Pacemaker是CRM项目(亦名V2资源管理器)的延续,该项目最初是为heartbeat而开发,但目前已经成为独立项目。
二、什么是corosync?
Corosync是集群管理套件的一部分,它在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等。
Corosync是集群管理套件的一部分,通常会与其他资源管理器一起组合使用它在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等。它是一个新兴的软件,2008年推出,但其实它并不是一个真正意义上的新软件,在2002年的时候有一个项目Openais , 它由于过大,分裂为两个子项目,其中可以实现HA心跳信息传输的功能就是Corosync ,它的代码60%左右来源于Openais. Corosync可以提供一个完整的HA功能,但是要实现更多,更复杂的功能,那就需要使用Openais了。Corosync是未来的发展方向。在以后的新项目里,一般采用Corosync,而hb_gui可以提供很好的HA管理功能,可以实现图形化的管理。另外相关的图形化有RHCS的套件luci+ricci,当然还有基于java开发的LCMC集群管理工具。
三、搭建实验环境
利用mfs的实验环境
server1( mfsmaster+corosync+pacemaker) 172.25.254.1
server2( mfschunk ) 172.25.254.2
server3(mfschunk) 172.25.254.3
server4( mfsmaster+corosync+pacemaker ) 172.25.254.4
foundation2(client) 172.25.254.66(真机)
server4上添加解析并更改启动脚本
systemctl daemon-reload 刷新启动脚本
在server1上配置yum源
高可用数据库和存储数据库
关闭所有集群相关服务
四、接下来配置集群
在server1/4上安装软件
[root@server1 ~]# yum install -y pacemaker(主程序) corosync(信号同步数据检测) pcs(命令行)
[root@server4 ~]# yum install -y pacemaker corosync pcs
server1和server4实现高可用需要免密
给生成的用户设置密码
启动pcs.d服务
[root@server4 ~]# systemctl start pcsd.service
[root@server4 ~]# systemctl enable pcsd.service
[root@server1 ~]# systemctl start pcsd.service
[root@server1 ~]# systemctl enable pcsd.service
集群主机认证及配置一个集群服务(重新认证重启服务)
认证成功会开启两个服务
[root@server1 ~]# systemctl start corosync
[root@server1 ~]# systemctl start pacemaker.service
[root@server1 ~]# pcs cluster enable --all 设置所有节点的集群都开机自动开启
server1: Cluster Enabled
server4: Cluster Enabled
查看集群状态
检查并解决报错
pcs property set no-quorum-policy=ignore 投票策略
当此节点无法投票,忽略此节点
关闭stonith-enabled
创建集群资源并添加VIP
[root@server1 ~]# pcs resource standards 资源类型
lsb
ocf
service
systemd
[root@server1 ~]# pcs resource create vip ocf:heartbeat:IPaddr ip=172.25.254.100 cidr_netmask=32 op monitor interval=30s 添加VIP
测试VIP是否漂移
查看集群的状态:crm_mon
关闭server1的服务
在server4上查看
[root@server1 ~]# pcs cluster start server1 开启服务
安装Apache并设置默认发布页面
不需要手动启动服务,集群会自动启动服务
[root@server1 ~]# yum install -y httpd
[root@server1 ~]# echo server1 > /var/www/html/index.html
[root@server4 ~]# yum install -y httpd
[root@server4 ~]# echo server4 > /var/www/html/index.html
[root@server1 ~]# pcs resource create apache systemd:httpd op monitor interval=1min
客户端测试访问VIP
往集群中添加存储资源以及验证高可用
首先添加解析
在server3上添加一块硬盘大小为10G
[root@server3 ~]# yum install -y targetcli
在server1上
[root@server1 ~]# yum install -y iscsi-*
分区进行格式化
进行挂载测试共享目录
在server4上
[root@server4 ~]# yum install -y iscsi-*
[root@server4 mfs]# systemctl stop moosefs-master.service 关闭服务
注意:server1和server4的服务都是通过集群启动不需要手动开启
创建集群共享资源
继续在server1上配置
mfsdata资源名称 device=/dev/sdb1 指定挂设备 directory=/var/lib/mfs/挂载目录fstype=xfs文件系统类型
[root@server1 ~]# pcs resource create mfsdata ocf:heartbeat:Filesystem device=/dev/sdb1 directory=/var/lib/mfs/ fstype=xfs op monitor interval=30s
删除刚才添加的Apache服务
上图可以看到VIP、mfsdata和mfsd不在同一台主机上,方便客户端有一个统一的入口访问数据,需要把这些全都放在同一台主机上
[root@server1 ~]# pcs resource group add mfsgroup vip mfsdata mfsd
[root@server1 ~]# pcs resource show
在server4上查看
测试高可用
[root@server4 ~]# pcs cluster stop server4 关闭
server4: Stopping Cluster (pacemaker)...
server4: Stopping Cluster (corosync)...
自动切换
server1查看
五、使用fence设备解决集群节点之间争抢资源的现象
1.FENCE工具的原理及作用
FENCE设备是RHCS集群中必不可少的一个组成部分,通过FENCE设备可以避免因出现不可预知的情况而造成的“脑裂”现象
FENCE设备的出现,就是为了解决类似这些问题,Fence设备主要就是通过服务器或存储本身的硬件管理接口;或者外部电源管理设备,来对服务器或存储直接发出硬件管理指令,将服务器重启或关机,或者与网络断开连接
FENCE的工作原理是:当意外原因导致主机异常或者宕机时,备机会首先调用FENCE设备,然后通过FENCE设备将异常主机重启或者从网络隔离,当FENCE操作成功执行后,返回信息给备机,备机在接到FENCE成功的信息后,开始接管主机的服务和资源。这样通过FENCE设备,将异常节点占据的资源进行了释放,保证了资源和服务始终运行在一个节点上。
RHCS的FENCE设备可以分为两种:内部FENCE和外部FENCE,常用的内部FENCE有IBMRSAII卡,HP的iLO卡,还有IPMI的设备等,外部fence设备有UPS、SANSWITCH、NETWORKSWITCH等
[root@server1 ~]# yum install -y fence-virt
[root@server1 ~]# mkdir /etc/cluster 创建一个目录 存放key
[root@server4 ~]# yum install -y fence-virt
[root@server4 ~]# mkdir /etc/cluster 创建一个目录 存放key
在真机上面搭建fence服务
fence可以控制主机的开关,在主机异常崩溃后会自动重启主机
[root@client ~]# yum search fence 查找软件包
[root@client ~]# yum install -y fence-virtd-multicast.x86_64 fence-virtd.x86_64 fence-virtd-libvirt.x86_64 安装软件
初始化fence设备,网卡选用br0,其余直接回车
在指定目录下面生成fence的key,并且给两个集群各发送过去一个
注意发送key的时候fence不能开启,否则server1和server2接收到的key不一样
创建一个目录/etc/cluster,生成的key将会保存在这个目录中
[root@client ~]# mkdir /etc/cluster
[root@client ~]# cd /etc/cluster/
[root@client cluster]# dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1 生成key
1+0 records in
1+0 records out
128 bytes (128 B) copied, 0.00022445 s, 570 kB/s
[root@client cluster]# ls
fence_xvm.key
上传key文件到server1和server4上传key文件后开启服务
[root@client cluster]# scp fence_xvm.key server1:/etc/cluster/
root@server1's password:
fence_xvm.key
[root@client cluster]# scp fence_xvm.key server4:/etc/cluster/
root@server4's password:
fence_xvm.key
在server1上配置
[root@server1 cluster]# pcs stonith create vmfence fence_xvm pcmk_host_map="server1:server1;server4:server4" op monitor interval=1min_
[root@server1 cluster]# pcs property set stonith-enabled=true
[root@server1 cluster]# crm_verify -LV
[root@server1 cluster]# crm_mon
后续解决报错
解决报错问题:以上实验都是在为windows下的vm虚拟机里面操作,最后切换到linux真机里面没有报错
在linux系统下完成实验如下:
crm_mon
测试
停止server1检测能否正常切换
[root@server1 cluster]# pcs cluster stop server1
成功切换,再次开启server1
当前资源都在server4上,使server4异常退出,查看server1是否可以接替server4.
echo c > /proc/sysrp-trigger异常退出
集群服务mariadb(数据库)
清空上面的实验环境
删除
[root@server1 ~]# pcs resource delete vip
Attempting to stop: vip... Stopped
[root@server1 ~]# pcs resource delete mfd
Error: Resource 'mfd' does not exist.
[root@server1 ~]# pcs resource delete mfsd
Attempting to stop: mfsd... Stopped
[root@server1 ~]# pcs resource delete mfsdata
Attempting to stop: mfsdata... Stopped
安装数据库
[root@server1 ~]# yum install -y mariadb-server.x86_64
[root@server4 ~]# yum install -y mariadb-server.x86_64
[root@server1 ~]# mount /dev/sda1 /mnt/
[root@server1 ~]# ls /mnt/
changelog.0.mfs metadata.crc metadata.mfs metadata.mfs.back.1 metadata.mfs.empty stats.mfs
[root@server1 ~]# rm -rf *
[root@server1 ~]# ls /mnt/
[root@server1 ~]# umount /mnt/
[root@server1 ~]# cd /var/lib/mysql/
[root@server1 mysql]# rm -rf *
[root@server1 mysql]# ls -a
. ..
[root@server1 mysql]# mount /dev/sda1 /var/lib/mysql/
[root@server1 mysql]# chown mysql.mysql /var/lib/mysql/
[root@server1 mysql]# systemctl start mariadb.service
[root@server1 ~]# df
[root@server1 ~]# systemctl status mariadb.service
[root@server1 mysql]# systemctl stop mariadb.service 停止服务
[root@server1 mysql]# mount /var/lib/mysql/ 卸载
[root@server1 ~]# pcs resource create vip ocf:heartbeat:IPaddr2 ip=172.25.254.100 cidr_netmask=32 op monitor interval=30s 添加VIP
[root@server1 ~]# pcs resource create mysql_data ocf:heartbeat:Filesystem device=/dev/sda1 directory=/var/lib/mysql/ fstype=xfs op monitor interval=30s 添加挂载数据
[root@server1 ~]# pcs resource create mariadb systemd:mariadb op monitor interval=1min 设置集群自动启动服务
[root@server1 ~]# pcs resource group add mysql_group mysql_data vip mariadb 创建一个组存放所有资源
测试使server1宕机server4是否可以接替
echo c > /proc/sysrp-trigger异常退出