构建 MariaDB Galera Cluster 分布式数据库集群(一)
MariaDB Galera Cluster 介绍
简介
MariaDB集群是MariaDB同步多主机集群,仅支持XtraDB(详见本文结尾注释)/InnoDB存储引擎(虽然有对MyISAM实验支持 - 看wsrep_replicate_myisam系统变量)
主要功能
- 同步复制 --- Galera主从复制是同步的,底层依赖rsync;
- 真正的multi-master,即所有节点可以同时读写数据库;
- 自动的节点成员控制,失效节点自动被清除;
- 新节点加入数据自动复制;
- 真正的并行复制,行级;
- 用户可以直接连接集群,使用感受上与MySQL完全一致;
优势
- 因为是多主,所以不存在Slavelag(延迟) 不存在丢失事务的情况
- 同时具有读和写的扩展能力
- 更小的客户端延迟
- 节点间数据是同步的,而Master/Slave模式是异步的,不同slave上的binlog可能是不同的
说明
Galera集群的复制功能基于Galeralibrary实现,为了让MySQL与Galera library通讯,特别针对MySQL开发了wsrep API。
以下内容摘自于 https://mariadb.com/kb/en/mariadb/getting-started-with-mariadb-galera-cluster/,是在发布MariaDB 10.1版本时摘录的
MariaDB Galera Cluster is MariaDB plus the MySQL-wsrep patch from Codership. It is currently available on Linux only.
#翻译:MariaDB Galera集群是MariaDB加上来自于诺基亚的MySQL-wsrep补丁。 它目前仅在Linux上可用。
In
MariaDB 5.5 and MariaDB 10.0, MariaDB Galera Server is a separate
package installed instead of the standard MariaDB Server package. In
MariaDB 10.1 the MariaDB Server and MariaDB Galera Server packages have
been combined and Galera packages and their dependencies get installed
automatically when installing MariaDB. The Galera parts remain dormant until configured, like a plugin or storage engine.
#翻译: 在MariaDB 5.5和MariaDB 10.0中,MariaDB Galera Server是一个单独的软件包,而不是标准的MariaDB Server软件包。 在MariaDB 10.1中,MariaDB Server和MariaDB Galera服务器软件包已合并,Galera软件包及其依赖关系在安装MariaDB时自动安装。 Galera部分在配置之前保持休眠状态,就像插件或存储引擎一样。
早期的MariaDB Galera Cluster架构
- haproxy作为MariaDB Galera Cluster的前端
- 2台haproxy用keepalived避免单点故障
- 3台MariaDB和一个garbd仲裁节点组成集群,仲裁节点上无数据
- Galera的SST采用Percona提供的XtraBackup(防止锁表,非阻塞)
- 配置文件 /etc/my.cnf.d/wsrep.cnf
wsrep_ready 为ON
为防止脑裂引入仲裁人arbitrator
早期版本的架构和安装配置和现在有很大不同,这里仅作为了解,不必关注。
*值得注意的是目前的MariaDB 10版本演进中,各升级版本的安装和配置也是不同的,所以在安装的时候一定要根据自身版本参照与之相匹配的安装设置文档进行。
监控
- 查看集群节点地址:mysql> show variables like 'wsrep_cluster_address';
- 查看MySQL版本: mysql> SHOW GLOBAL VARIABLES LIKE 'version';
- 查看wsrep版本: mysql> SHOW GLOBAL STATUS LIKE 'wsrep_provider_version';
- 查看wsrep有关的所有变量: mysql> SHOW VARIABLES LIKE 'wsrep%' \G
- 查看Galera集群状态: mysql> show status like 'wsrep
监控状态参数说明
- 集群完整性检查
- wsrep_cluster_state_uuid:在集群所有节点的值应该是相同的,有不同值的节点,说明其没有连接入集群.
- wsrep_cluster_conf_id:正常情况下所有节点上该值是一样的.如果值不同,说明该节点被临时"分区"了.当节点之间网络连接恢复的时候应该会恢复一样的值.
- wsrep_cluster_size:如果这个值跟预期的节点数一致,则所有的集群节点已经连接.
- wsrep_cluster_status:集群组成的状态.如果不为"Primary",说明出现"分区"或是"split-brain"状况.
- 节点状态检查
- 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,则可以从该项查看原因.
- 复制健康检查
- 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这两个值最高.这两个值较低的话,相对更好.
- 检测慢网络问题
wsrep_local_send_queue_avg:网络瓶颈的预兆.如果这个值比较高的话,可能存在网络瓶 - 冲突或死锁的数目
wsrep_last_committed:最后提交的事务数目
wsrep_local_cert_failures和wsrep_local_bf_aborts:回滚,检测到的冲突数目
注释
XtraDB
XtraDB存储引擎是由Percona开发的一款MySQL数据库的高性能存储引擎,其目的是用来代替InnoDB存储引擎,可用于需要更高性能的环境。
可以看作是InnoDB存储引擎的增强版本,它在InnoDB上进行了大量的修改和patched,它完全兼容InnoDB,且提供了很多InnoDB不具备的有用的功能。
例如:在多核CPU上面的性能和伸缩性要更好;对于内存的分配和使用也要更好;也解除了InnoDB的很多限制;提供了比InnoDB更多的配置和性能监控参数。
对于高负载的MySQL应用来说,如果不需要MySQL官方技术支持的话,完全可以使用XtraDB来代替InnoDB存储引擎。此外,Percona还提供了打了补丁的MySQL版本,这些补丁对MySQL很多方面进行了改进,性能提高,增加更多监控参数等等。据说JavaEye的数据库就是使用了Percona的版本。
当前XtraDB的最新版本是1.0.4-8(release-8)
https://www.percona.com/ 提供开源和技术服务,目前只在美国和欧洲设置联络处
Percona XtraDB Cluster是针对MySQL用户的高可用性和扩展性解决方案,基于Percona Server 5.5.17,最新到了5.7版
-本章完-
2017-02-23
@Gordon_chang
1997年毕业于北京联合大学,先后在中国万网,新媒传信,亚信等公司工作,现在在一家创业型公司担任云计算与大数据运维方面的 PM & Engineer。 专注于以下四个领域:
分布式存储
分布式数据库
云计算
大数据
重点通过技术架构与性能优化(底层)实现基于私有云的大数据平台能力