Percona XtraDB Cluster双节点故障的情况

来源:互联网 发布:淘宝天猫优惠券兼职 编辑:程序博客网 时间:2024/05/20 01:45

1.  环境

OS:Redhat 6.5

Cluster:Percona-XtraDB-Cluster5.6.22-25

主节点:

hostname:mysql-pxc01

ipaddr:192.168.163.6

备节点:

hostname:mysql-pxc02

ipaddr:192.168.163.7

 

2.  查看当前状态

1.        查看主节点状态

2.        查看备节点状态


3.  断开节点通信

1)        在主节点上运行

iptables -A INPUT -d 192.168.163.7 -s 192.168.163.6 -jREJECT

iptables -A OUTPUT -d 192.168.163.7 -s 192.168.163.6 -jREJECT

2)        查看主节点iptables


3)        查看主节点状态



4)        查看备节点状态


当网络通信断开的时候,由于未满足剩余可用节点数大于原集群节点数目,因此主备节点都降级为non-primary状态。

4.  通信断开状态下运行命令

在节点状态为non-primary的节点中运行插入操作

返回Unknown command的错误。

5.  更改节点状态启动

Ø  PerconaXtraDB cluster中有两种参数可用于在通信断开时防止节点降级为non-primary状态。分别为pc.ignore_quorum和pc.ignore_sb。

Ø  pc.ignore_quorum参数设置为true的时候,节点忽略quorum算法,节点正常运行。

Ø  pc.ignore_sb是当节点通讯关闭,发生脑裂时,忽略为防止脑裂时数据不一致而无法执行语句的机制,可以在各个节点正常运行命令。

我们来看下相关参数的具体作用。

6.  pc.ignore_quorum

1)        我们将节点状态置为正常



2)        在/etc/my.cnf中加入参数

wsrep_provider_options = "pc.ignore_quorum =true"

重启各个节点数据库

3)        查看配置参数成功


4)        将节点通信关闭

iptables -A INPUT -d 192.168.163.7 -s 192.168.163.6 -j REJECT

iptables -A OUTPUT -d 192.168.163.7 -s 192.168.163.6 -j REJECT

5)        查看节点状态


可发现cluster size将为1,而节点状态并没有降级

6)        在各个节点可以正常进行sql操作,我们在不同的节点插入不同的数据

主节点


备节点


可以看到双节点可以进行相关的操作。

7)        我们来恢复网络通信来看看节点之间会发生什么


发现即使恢复通信,节点不会自动恢复到同步状态,不会发生数据同步,双节点各自形成一个cluster环境。

如果要恢复集群模式,只能通过SST方式将数据同步,但是会造成一个节点的数据丢失!

7.  pc.ignore_sb

1)        恢复集群环境,我们在/etc/my.cnf中添加参数

wsrep_provider_options = “pc.ignore_sb = true”

重启数据库

2)        查看参数是否生效


3)        断开连接

iptables -A INPUT -d 192.168.163.7 -s 192.168.163.6 -j REJECT

iptables -A OUTPUT -d 192.168.163.7 -s 192.168.163.6 -jREJECT

4)        查看节点状态

主节点


备节点


两个节点都没有降级成为non-primary状态。

5)        向两个节点中插入不同的数据后将状态置为正常

主节点


备节点比主节点多插入数据


 主节点

iptables -D INPUT -d 192.168.163.7 -s 192.168.163.6 -j REJECT

iptables -D OUTPUT -d 192.168.163.7 -s 192.168.163.6 -jREJECT

6)        集群没有恢复到原来状态


7)        重启备节点


由于备节点多插入数据,seqno比主节点高因此重启失败,节点间无法重新构成cluster。只能删除数据重新进行SST同步。会造成备节点的数据丢失!

 

为防止双节点的脑裂问题和数据不同步的问题,最好是能够布置成3个及以上节点的cluster环境。

如果没有多余资源布置一个datacenter,我们可以使用arbitrator(仲裁)来防止以上情况的发生,这个在后续中介绍。

 

参考文档http://www.percona.com/blog/2012/07/25/percona-xtradb-cluster-failure-scenarios-with-only-2-nodes/

0 0
原创粉丝点击