[ java-003 ] Mysql PXC集群

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第15天,点击查看活动详情

本章节介绍Mysql集群方案中的一种,著名的MySQL服务和工具提供商percona实现的percona xtradb cluster,简称PXC

PXC介绍

要搭建PXC架构至少需要三台MySQL实例来组成一个集群,三个实例之间不是主从模式,而是各自为主,所以三者之间的关系是对等的,不分主从,这也叫multi-master架构,客户端读写时,连接哪个实例都是一样的,读取到的数据是相同的,写入任意一个实例后,集群会将自己新写入的数据同步到其他实例上,这种架构不共享任何数据,是一种高冗余的MySQL集群架构。

任何更新的事务都需要全局验证通过,才会在其他节点上执行,集群性能受限于最差的节点,也就是所谓的短板效应(木桶定律)。

因为需要保证数据的一致性,PXC采用的实时基于存储引擎层来实现同步复制,所以在多节点并发写入时,锁冲突问题比较严重。

存在写扩大的问题,所有节点上都会发生写操作,对于写负载较大的场景,不推荐使用PXC。

在高可用环境下重启mysql服务需要严格按照顺序来进行,否则会导致mysql集群重启失败宕机

1.在主节点systemctl restart mysql@bootstrap

2.在node节点systemctl restart mysql

主节点判断

  • 所有节点的safe_to_bootstrap值最大的为主节点;
  • 所有节点的safe_to_bootstrap值都为0,查看seqno的值,将seqno值最大的节点的safe_to_bootstrap的值手动改为1,然后启动主节点;
  • 所有节点的safe_to_bootstrap值都为0,且seqno的值相等,可任选一节点将safe_to_bootstrap的值手动改为1,然后启动主节点;
  • 所有节点的safe_to_bootstrap值都为0,且其中两个节点seqno的值最大相等,可对比数据库数据大小,一般最大的那个是主节点

注意事项

  • 集群关闭之后,再启动,谁做第一个节点谁就执行systemctl start mysql@bootstrap;
  • 如果最后关闭的PXC节点是安全退出的,那么下次启动要最先启动这个节点,而且要以主节点启动;
  • 如果最后关闭的PXC节点不是安全退出的,那么要先修改/data/mysql/grastate.dat 文件,把其中的safe_to_bootstrap属性值设置为1,再安装主节点启动;
  • 除了名义上的master之外,其它的node节点只需要启动mysql,即systemctl start mysql

最终连接数据库临时换用北向IP和外部端口的方式,这种虽然能临时解决问题,但是pxc本身应该是高可用和负载的目的,改成这种后,失去了负载的目的,每次写到会到主Node节点上的pod

猜你喜欢

转载自juejin.im/post/7086805375814467592