资源管理层(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解析的名称相同才行。
设置corosync的步骤
centos7
要使用多播模式前提: 网卡要支持 ifconfig 中有 MULTICAST 如果没有可以启用 如ip link set multicast on
前提:1.保持时间的同步 可用ntp同步時間 2.提前做好ssh的密钥认证 会使操作更加快速 3.域名和主机名最好对应 即域名和uname -n 解析出的主机名一直
方法一 1.配置文件使用pcs创建
Node1 AND Node2:
~]# yum install -y pacemaker pcs psmisc policycoreutils-python
~]# systemctl start pcsd.service
~]# systemctl enable pcsd.service
~]# echo 'victory' | passwd --stdin hacluster
2.2 配置corosync
Node1 OR Node2:
~]# pcs cluster auth node1.victory.com node2.victory.com
Username: hacluster
Password:
node1.victory.com: Authorized
node2.victory.com: Authorized
~]# pcs cluster setup --name mycluster node1.victory.com node2.victory.com
执行完创建集群的命令后,会在节点之间单独产生一个配置文件
Shutting down pacemaker/corosync services...
Redirecting to /bin/systemctl stop pacemaker.service
Redirecting to /bin/systemctl stop corosync.service
Killing any remaining services...
Removing all cluster configuration files...
node1.victory.com: Succeeded
node2.victory.com: Succeeded
2.3 启动集群
Nod1 OR Node2:
~]# pcs cluster start --all
node1.victory.com: Starting Cluster...
node2.victory.com: Starting Cluster...
上面的命令相当于在各节点分别执行如下命令:
~]# systemctl start corosync.service
~]# systemctl start pacemaker.service
2. 使用pcs 或者 crmsh来管理 资源 如配置vip和server
复制代码
方法二
1.从示例文本中拷贝 然后修改 /etc/corosync/corosync.conf 如
totem是两个节点进行心跳传播的协议,ring 0代表不需要向任何信息就能到达。
totem {
version: 2
crypto_cipher: aes128
crypto_hash: sha1
secauth:on
interface {
# Rings must be consecutively numbered, starting at 0.
ringnumber: 0
bindnetaddr: 192.168.117.0
# bindnetaddr: 192.168.1.1
mcastaddr: 239.255.1.1
mcastport: 5405
ttl: 1
}
}
nodelist {
node {
ring0_addr: 192.168.117.130
nodeid: 1
}
node {
ring0_addr: 192.168.117.131
nodeid: 2
}
node {
ring0_addr: 192.168.117.177
nodeid: 3
}
}
logging {
fileline: off
to_stderr: no
to_logfile: yes
logfile: /var/log/cluster/corosync.log
to_syslog: no
debug: off
timestamp: on
logger_subsys {
subsys: QUORUM
debug: off
}
}
quorum {
# Enable and configure quorum subsystem (default: off)
# see also corosync.conf.5 and votequorum.5
provider: corosync_votequorum
}
复制代码
注意 : 只有两个节点时无法使用quorum 在crm 里无法选举出新节点 此时 配置了内容也无效 资源是不活动的(资源不会放入节点中)
2.生成认证密钥 corosync-keygen --->生成 authkey:集群中节点间彼此传递消息时使用加密算法以及密钥
3.复制密钥和配置文件到其他节点 scp /etc/corosync/corosync.conf authkey 192.168.117.130:/etc/corosync/corosync.conf authkey scp /etc/corosync/corosync.conf authkey 192.168.117.177:/etc/corosync/corosync.conf authkey
4.启动服务 node4: systemctl start corosync systemctl start pacemaker node3: systemctl start corosync systemctl start pacemaker node6:systemctl start corosync systemctl start pacemaker
5.设置资源 记住时间一定要同步 否则节点无法关联 !!!
a.primitive webip ocf:heartbeat:IPaddr params ip=192.168.117.190 op monitor interval=30s timeout=20s
b.primitive webserver systemd:httpd op monitor interval=30s timeout=20s
c.primitive webstore ocf:heartbeat:Filesystem params device="192.168.117.131:/www/htdoc" directory="/var/www/html" fstype="nfs" op start timeout=20s op stop timeout=20s op monitor interval=30s timeout=20s
复制代码
6.设置约束条件
1.顺序约束 order
2.排列约束 colocation
3.位置约束 location
定义排列约束 将三个排在一起 此时即使其中一个资源在节点中 挂掉 他也不会切换
colocation webserver_webip_webstore inf: webserver ( webip webstore ) 空格隔开
顺序约束 定义资源的启动顺序
order webstor_after_webip Mandatory: webip webstore
order webserver_after_webstore Mandatory: webstore webserver Mandatory:强制定义
倾向性(对任意节点) 如 原本资源在node3节点上 但是node3现在挂了corosync会通知pacemaker 转移资源到其他节点 假如说转移到了node4 但是一段时间之后node3活了 由于倾向性 他还会转移到node3 上 当然这个也要考虑到资源粘性等问题
location web_pref_node3 webip 100: node3.chen.com
粘性(对当前节点 ) 如下所示 定义了每个资源的资源粘性为50 如果有三个资源则资源粘性为150 此时即使上面定义了倾向性 但是资源粘性150 > 倾向性100 所以资源不会转移
property default-resoure-stickness=50
复制代码
crm 具体用法可参考 https://juejin.im/post/5b6a4cdce51d45194a528338
注意: 两个节点安装httpd,注意,只能停止httpd服务,而不能重启,并且不能设置为开机自启动,因为resource manager会自动管理这些服务的运行或停止。