Galera for MySQL集群方案(一)

基本概念:

Galera Cluster for MySQL是一套基于同步复制的、多主的MySQL集群方案。使用简单,没有单点故障,可用性高,读写性能高,可拓展性好。

特点:

同步复制,主备无延迟;

支持多主同时读写,保证数据一致性;

真正行级别的并发复制;

集群中各节点保存全量数据;

可以在任何节点上读写,无需读写分离了;

自动添加新节点和剔除故障节点,高HA;

不需要写binlog;

对应用透明,客户端连接数据库跟操作单台MySQL数据库的一致;

Wsrep(Write Set Replication集合写入式复制)

wsrep定义了一系列应用回调和复制调用库,来实现事务数据库同步写集的复制,实现抽象的,隔离的复制。虽然这个接口的主要目标时基于认证的多主复制,但同样适用于异步和同步的主从复制。Galara本质是一个wsrep提供者(provider)。

GTID(Global Transaction ID)

wsrep模型中,用状态来表示数据库内容被修改过,GTID就是用来标识状态的改变,这种改变的状态表示为一系列的原子变化,集群中的所有节点通过同步复制具有相同的状态并以相同的顺序应用这些状态。

状态快照转移(SST)

1.mysqldump,此方法是通过定义阻塞,阻止修改自身状态转移的持续时间。这也是最慢的方式,可能会带来高负载的问题。

2.直接拷贝数据文件,rsync、xtrabackup等方法都属于这类。这些方法比mysqldump快,但有一定的局限性,发送和接收服务器配置参数需要高度相似,xtrabackup可以无阻塞发送。

仲裁线程(garbd守护线程)

这个线程是个不存储数据的Galera节点,garbd节点可以帮助我们在最少两个节点的集群中避免主节点分裂的情况。

Donor和Joiner

新接入的节点叫Joiner,给joiner提供复制节点叫Donor。

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

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

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

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

基本复制过程

1.当客户端发起commit命令时(此时并没有发生真正的commit),所有本事务内对数据库改动的数据行主键都会被收入到一个写入集(writeset)中;

2.该写入 集随后被复制到其它节点。

3.该写入集会在每个节点上进行确认性认证测试,来判断该写入集是否可以被应用。如果认证测试失败,写入集会被丢弃并且原始事务会被回滚,如果认证成功,事务被提交并且写入集会在剩余节点进行应用。

4.认证测试在Galera集群中的实现取决于全局事务顺序,每个事务在复制期间都会被指派一个全局顺序序列;当一个事务到达提交点时,该事务会知道当前与该事务不冲突的最新已提交事务的顺序序号,在这两个事务全局顺序序列之间的间隔是不确定的区域,在该区域提交事务是相互看不到对方的影响的,但所有在该间隔之间的唯物都会被进行主键冲突检测。

使用注意

1.使用Galera必须要给MySQL-Server打wsrep补丁,可以直接使用官方提供的已经打好补丁的MySQL安装包,如果服务器上已经安装了标准版MySQL,需要先卸载在重新安装

2.MySQL/Galera集群只支持Innodb/XtraDB/Maria存储引擎,如果你的数据表使用MyISAM,需要转换为InnoDB,否则记录不会在多台复制

3.MySQL5.5及以下的InnoDB引擎不支持全文索引,如果之前使用MyISAM并建了全文索引字段的话,只能安装MySQL5.6 with wsrep patch

4.所有数据表必须要有主键(PRIMARY),如果没有主键可以建一条AUTO_INCREMENT列

5.MySQL/Galera集群不支持下面的查询:LOCK/UNLOCK TABLES,不支持下面的系统变量:character_set_server、utf16、utf32及ucs2

6.数据库日志不支持保存到表,只能输出到文件,不能设置binlog-do-db、binlog-ignore-db

7.跟其他集群一样,为了避免节点出现脑裂而破坏数据,建议Galera集群最低添加3个节点

8.在高并发情况下,多主同时写入时会发生事务冲突,此时只会有一个事务请求会成功,其他的全部失败。可以在写入/更新失败时,自动重试一次,再返回结果。

9.不支持XA事务;

10.允许最大的事务大小由wsrep_max_ws_rows和wsrep_max_ws_size定义,任何大型操作将被拒绝;

11.节点中每个节点的地位是平等的,没有主次,向任何一个节点读写效果都是一样的;

12.第一台启动的服务器以空地址启动如:mysql_safe -wsrep_cluster_address=gcomn://>/dev/null &

 

Galera Cluster for MySQL官网

https://galeracluster.com/

已打好wsrep补丁MySQL下载地址:

https://galeracluster.com/downloads/

按需选择符合自己操作系统进行下载相应的文件:

Galera for MySQL集群方案(一)

 

下一篇进行环境搭建,测试。