corosync+pacemaker实现openstack HA(二)


    上次使用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
执行后,就能够自动切换。

你可能感兴趣的:(openstack,HA)