上次使用corosync+pacemaker搭建了个集群实现了HA,在测试环境中经过各种测试都运行正常,有效实现了高可用性。后来在上生产环境的时候遇到了个问题,由于生产环境中的交换机默认是把组播禁掉了,导致组播报文无法通过网络设备传输,集群因此建立失败。Corosync同时支持组播、单播,后来重点研究了单播实现集群的方法。
1、单播心跳组建集群配置文件
####corosync.conf配置
compatibility: whitetank
quorum {
provider: corosync_votequorum
expected_votes: 3
}
totem {
version: 2
secauth: off
interface {
member {
memberaddr: 9.2.4.1
}
member {
memberaddr: 9.2.4.2
}
member {
memberaddr: 9.2.4.3
}
ringnumber: 0
bindnetaddr: 9.2.4.1
mcastport: 5405
}
transport: udpu
}
service {
# Load the Pacemaker Cluster Resource Manager
ver: 0
name: pacemaker
use_mgmtd: yes
use_logd: yes
}
logging {
fileline: off
to_logfile: yes
to_syslog: yes
debug: off
logfile: /var/log/cluster/corosync.log
debug: off
timestamp: on
logger_subsys {
subsys: AMF
debug: off
}
}
#####如果是两个节点,需要调整下quorum的配置:
quorum {
provider: corosync_votequorum
expected_votes: 2
two_node: 1
}
2、corosync+pacemaker测试用例:
环境描述:
三个节点:
control
compute1
node-3
每个节点都有两个网卡,分别作为mgt平面和pub平面,mgt网卡用来承载corosync之间心跳报文
两个资源:
pub_vip
pub_haproxy
配置的约束:
pub_vip和pub_haproxy绑定到一起,在同一个节点上面启动,使用colocation进行约束;
pub_vip每次都在pub_hapoxy之前启动,使用order进行约束;
用例描述
0.起始状态
pub_vip和pub_haproxy都位于node-3节点
1.将node-3节点置为standby,node-3节点上面的资源会自动切换到另外一个节点
crm node standby node-3
crm node online node-3
注意:一旦切换后,如果利用location指定了某些资源放置在node-3, 再将其设置为online,也能正常切换回来
2.杀死haproxy进程,杀死后能够重新自动拉起来
注意:连续杀死3次(具体次数和migration-threshold配置有关)后,该节点就会被认为处于ineligible状态,然后crm就不会再将资源放置上面,资源会自动切换到另外一个节点上面。
3.直接将端口down掉
1)将pub端口down掉,pub_vip和pub_haproxy会自动切换到另外一个节点,此时node-3仍处于Online。此时再将pub端口置为up,pub_vip没有自动切换回来。
注意:如果重新使用location将pub_vip设置为在node-3节点启动,那么pub_vip还是会切换到node-3上面。
2)将mgt端口down掉,node-3就直接变成offline,同时集群分裂为两个,node-3单独成为一个集群,但没有任何资源,此时再将mgt端口置为up,集群会恢复正常,同时pub_vip会自动切换回来,但很快又会分裂为两个集群,mgt端口IP自动消失
注意:将集群中node-3节点删除,同时将location中涉及到node-3的规则删除,然后将node-3上面的corosync和pacemaker重启后,集群才能重新恢复正常
4.将node-3重启
重启后,pub_vip和pub_haproxy会自动切换到其他节点
5.杀死node-3上面的corosync进程
node-3自动变为offline,资源自动切换
******这时候crm会认为node-3已经处于ineligible,不会将资源再放置到上面,除非将该节点删除,然后重新加入集群
3、问题解决记录
1.资源启动失败多次,使用cibadmin --erase --force清除资源重新配置发现资源启动失败
解决办法:
执行 crm resource cleanup mgt_vip进行状态清除
2.显示node xx UNCLEAN (offline) ,通常情况是节点时间不一致导致的
解决办法:使用ntp命令进行同步时间后解决
3.节点1上多次杀死neutron-l3-agent, 不会切换到节点2,是因为没有设置meta migration-threshold配置项,按如下配置,可再杀死3次进程后自动切换到另外一个节点:
meta migration-threshold=3
4. 节点1上面多次杀死neutron-l3-agent进程,会自动切换到节点2上面,然后再节点2上面多次杀死进程,却没有自动切换到节点1上面,这是因为此时节点1和节点2上面的状态已经出现了问题,
需要清除该资源在各节点的状态,如下:
crm resource cleanup p_neutron_agent_l3
执行后,就能够自动切换。
转载至https://blog.youkuaiyun.com/jiahaojie1984/article/details/53006527