Corosync+Pacemaker+Crm
简介
资源管理层(pacemaker负责仲裁指定谁是活动节点、IP地址的转移、本地资源管理系统)、消息传递层负责心跳信息(heartbeat、corosync)、Resource Agent(理解为服务脚本)负责服务的启动、停止、查看状态。多个节点上允许多个不同服务,剩下的2个备节点称为故障转移域,主节点所在位置只是相对的,同样,第三方仲裁也是相对的。vote system:少数服从多数。当故障节点修复后,资源返回来称为failback,当故障节点修复后,资源仍在备用节点,称为failover。
CRM:cluster resource manager ===>pacemaker心脏起搏器,每个节点都要一个crmd(5560/tcp)的守护进程,有命令行接口crmsh和pcs(在heartbeat v3,红帽提出的)编辑xml文件,让crmd识别并负责资源服务的处理。也就是说crmsh和pcs等价。
Resource Agent,OCF(open cluster framework)
primtive:主资源,在集群中只运行一个实例。clone:克隆资源,在集群中可运行多个实例。每个资源都有一定的优先级。
无穷大+负无穷大=负无穷大。主机名要和DNS解析的名称相同才行
环境:
操作系统 CentOS 7
IP: 192.168.20.21 node1
IP: 192.168.20.22 node2
VIP: 192.168.20.20
配置双机互信 与 ansible(为了安装时的方便,也可以不配置ansible)
配置时间服务器(集群服务时间至关重要)
安装过程
yum install pcs 会自动解决依赖关系 安装上pacemaker corosysnc(在centos7)
yum install -y pacemaker pcs pasmisc policycoreutils-python (CentOS7之前的版本)
各个集群节点运行pcsd 并使其开机自动启动、各节点创建用户
systemctl start pcsd
systemctl enable pcsd
systemctl start corosync
systemctl enable corosync
systemctl start pacemaker
systemctl enable pacemaker
useradd hacluster
echo ‘chunge.com’ |passwd –stdin hacluster
配置corosync
pcs cluster auth node1 node2 -u hacluster
注:若失败,打开5405端口若还是不行关闭防火墙
iptables -A INPUT -p TCP –dport 5405 -j ACCEPT
同步:
pcs cluster setup –name mycluster node1 node2 node3 node4
–force 强制
同步完成后 会生成corosync.conf 配置文件 在 /etc/corosync下
启动集群
pcs cluster start –name hacluster
–name :集群的名字
–all:所有集群
pcs cluster stop –all 关闭所有集群
查看节点运行状况
corosync-cfgtool -s
corosync-cmaptcl |grep members
pcs status
设置全局变量
pcs property -h 查看帮助
pcs property –all 显示默认的全局变量
pcs property list 显示修改了的全局变量
crm_verify -L -V 查看集群配置是否有问题
在两台集群机器上配置httpd服务为了测试,设置页面不同即可。
修改或创建 /var/www/html/inde.html
安装crmsh
获取crmsh yum仓库
wget http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-7/network:ha-clustering:Stable.repo
或者
https://build.opensuse.org/package/binaries/network:ha-clustering:Stable/crmsh/CentOS_CentOS-7
这里只介绍yum安装 找其中一个节点安装就够了,为了以后方便可以每个节点都安装上去
yum install crmsh pssh -y
crm命令下
创建vip资源,命名位webip
crm(live)# configure
crm(live)configure# primitive webip ocf:heartbeat:IPaddr params ip=192.168.20.20 //定义虚拟IP地址
crm(live)configure#verify
crm(live)configure# commit
创建webserver资源
crm(live)configure# primitive webserver systemd:httpd
定义成组资源
crm(live)configure# group webservice webip webserver
若要将本节点软下线
crm(live)# node standby node1
将某一节点上线
crm(live)#node online node1
配置 vip +nfs +httpd 并配置资源
注:colocaltion 表是排列约束,order 表示顺序约束,localtion 位置约束
crm
configure
primitive webip ocf:heartbeat:IPaddr2 params ip=”192.168.20.20” op monitor interval=30s timeout=20s
primitive webserver systemd:httpd op monitor interval=20s timeout=20s
primitive webstore2 ocf:heartbeat:Filesystem params device=”192.168.149.132:/www/htdocs” directory=”/var/www/html” fstype=”nfs” op start timeout=60s op stop timeout=60s op monitor interval=20s timeout=40s
colocation webserver_with_webstore_and_webip inf: webserver ( webip webstore ) 要加空格,不然会报错
order webstore_after_webip Mandatory: webip webstore这段表示先启动webip在启动webstore
Mandatory 表示强制
order websever_afer_webstore Mandatory: webstore webserver
location webservice_pref_node1 webip 100: node1 表示webip资源对于node1节点的倾向性是100