您的位置:首页 > 博客中心 > 数据库 >

Galera Cluster for MySQL

时间:2022-03-15 05:42

1、galera特性

 MySQL/Galera是MySQL/InnoDB的多主集群,有以下特性: 

1)同步复制

2)Active-active的多主拓扑结构

3)集群任意节点可以读和写

4)自动身份控制,失败节点自动脱离集群

5)自动节点接入

6)真正的基于”行”级别和ID检查的并行复制

7)无单点故障,易扩展


2、架构图

gxlsystem.com,布布扣

在生产环境中,建议设置一个专用的donor,这个专用的donor不执行任何来自客户端的SQL请求,这样做有以下几点好处:

    1)数据的一致性:

        因为donor本身不执行任何客户端SQL,所以在这个节点上发生事务冲突的可能性最小,因此,如果发现集群有数据不一致时,donor上的数据应该是整个集群中最准确的。

    2)数据安全性:

        因为专用donor本身不执行任何客户端SQL,所以在这个节点上发生灾难事件的可能性最小,因此当整个集群宕掉的时候,该节点应该是恢复集群的最佳节点。

    3)高可用性:

        专用donor可以作为专门的state snapshot donor。因为该节点不服务于客户端,因此当使用此节点进行sst的时候,不影响用户体验,并且前端的负载均衡设备也不需要重新配置。


添加的新节点需要满足以下几个条件:

    1)安装带有wsrep patch的mysql版本

    2)安装galera复制插件

    3)配置好新节点的mysql(参考donor的my.cnf)

    4)配置或启动的gcomm://的地址需要使用donor的IP。


由此,可以参考172.16.5.156配置172.16.5.157,启动mysql如下:

service mysqld start --wsrep_cluster_address="gcomm://172.16.5.156:4567"

注:

指定集群ip的方式有三种:

1)如上所示,在mysql启动时,加--wsrep_cluster_address参数指定

2)在my.cnf中配置wsrep_cluster_address

3)直接修改全局变量:set global wsrep_cluster_address="gcomm://172.16.5.156:4567"

另外需要说明的是,gcomm://的值可以有多个,彼此间用逗号隔开,例:gcomm://172.16.5.156:4567, 172.16.5.158:4567


9、添加仲裁节点

在只有两台数据库节点的galera集群中,为了解决脑裂问题,需要引入仲裁节点,集群中可以有多个仲裁节点。仲裁节点上没有数据,它仅仅只是在集群发生脑裂时仲裁。仲裁节点加入集群的方法如下:

garbd -a gcomm://172.16.5.156:4567 -g my_wsrep_cluster -d

-a:指定集群地址

-d:以守护进程的方式运行

-g:集群名称


2、参数说明

    1)集群完整性检查:

        wsrep_cluster_state_uuid:在集群所有节点的值应该是相同的,有不同值的节点,说明其没有连接入集群.

        wsrep_cluster_conf_id:正常情况下所有节点上该值是一样的.如果值不同,说明该节点被临时”分区”了.当节点之间网络连接恢复的时候应该会恢复一样的值.

        wsrep_cluster_size:如果这个值跟预期的节点数一致,则所有的集群节点已经连接.

        wsrep_cluster_status:集群组成的状态.如果不为”Primary”,说明出现”分区”或是”split-brain”状况.


    2)节点状态检查:

        wsrep_ready: 该值为ON,则说明可以接受SQL负载.如果为Off,则需要检查wsrep_connected.

        wsrep_connected: 如果该值为Off,且wsrep_ready的值也为Off,则说明该节点没有连接到集群.(可能是wsrep_cluster_address或wsrep_cluster_name等配置错造成的.具体错误需要查看错误日志)

        wsrep_local_state_comment:如果wsrep_connected为On,但wsrep_ready为OFF,则可以从该项查看原因.


    3)复制健康检查:

        wsrep_flow_control_paused:表示复制停止了多长时间.即表明集群因为Slave延迟而慢的程度.值为0~1,越靠近0越好,值为1表示复制完全停止.可优化wsrep_slave_threads的值来改善.

        wsrep_cert_deps_distance:有多少事务可以并行应用处理.wsrep_slave_threads设置的值不应该高出该值太多.

        wsrep_flow_control_sent:表示该节点已经停止复制了多少次.

        wsrep_local_recv_queue_avg:表示slave事务队列的平均长度.slave瓶颈的预兆.


    最慢的节点的wsrep_flow_control_sent和wsrep_local_recv_queue_avg这两个值最高.这两个值较低的话,相对更好.


    4)检测慢网络问题:

        wsrep_local_send_queue_avg:网络瓶颈的预兆.如果这个值比较高的话,可能存在网络瓶


    5)冲突或死锁的数目:

        wsrep_last_committed:最后提交的事务数目

        wsrep_local_cert_failures和wsrep_local_bf_aborts:回滚,检测到的冲突数目


四、Galera的状态快照转移(SST)

    SST允许新接入的节点使用定制的方法来获取最初的数据,当前mysql支持三种SST方法:

    1、mysqldump

        这需要接收服务器在转移前完全初始化和准备接收连接。此方法是通过定义阻塞,阻止修改自身状态转移的持续时间。这也是最慢的方式,可能会带来高负载的问题。

    2、rsync

        最快的方式,也是galera默认使用的方式。rsync脚本运行在发送和接收端上。在接收端,开启rsync服务模式,等待发送端连接。在发送端,开启rsync客户端模式,发送mysql数据目录内容到连接节点。这种方法也会阻塞,但是比mysqldump快。

    3、xtrabackup

        也很快,但需要额外安装。




本文出自 “” 博客,请务必保留此出处

Galera Cluster for MySQL,布布扣,bubuko.com

热门排行

今日推荐

热门手游