Galera Cluster for MySQL

一、MySQL Galera介绍

1、galera特性

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

1)同步复制

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

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

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

5)自动节点接入

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

7)无单点故障,易扩展

2、架构图

二、Galera Cluster安装

1、安装前的准备

1)需要至少三台mysql服务器,如果只有两台做cluster的话,一旦出现数据不一致的情况,就可能发生脑裂,需要一台仲裁服务器,如果直接三台做cluster的话,就不再需要仲裁

2)如果是对现有环境做galera集群,需要对mysql现有表做检查,包括表,表引擎,是否无主键,是否有全文索引,是否有空间索引:


SELECT DISTINCT
       CONCAT(t.table_schema,‘.‘,t.table_name) as tbl,
       t.engine,
       IF(ISNULL(c.constraint_name),‘NOPK‘,‘‘) AS nopk,
       IF(s.index_type = ‘FULLTEXT‘,‘FULLTEXT‘,‘‘) as ftidx,
       IF(s.index_type = ‘SPATIAL‘,‘SPATIAL‘,‘‘) as gisidx
  FROM information_schema.tables AS t
  LEFT JOIN information_schema.key_column_usage AS c
    ON (t.table_schema = c.constraint_schema AND t.table_name = c.table_name
        AND c.constraint_name = ‘PRIMARY‘)
  LEFT JOIN information_schema.statistics AS s
    ON (t.table_schema = s.table_schema AND t.table_name = s.table_name
        AND s.index_type IN (‘FULLTEXT‘,‘SPATIAL‘))
  WHERE t.table_schema NOT IN (‘information_schema‘,‘performance_schema‘,‘mysql‘)
    AND t.table_type = ‘BASE TABLE‘
    AND (t.engine <> ‘InnoDB‘ OR c.constraint_name IS NULL OR s.index_type IN (‘FULLTEXT‘,‘SPATIAL‘))
  ORDER BY t.table_schema,t.table_name;

2、实验环境:

mysql1:172.16.5.156

mysql2:172.16.5.157

mysql3:172.16.5.158

3、安装相关依赖包:

yum groupinstall -y "Development Tools" "Server Platform Development"

4、安装含wsrep patch的mysql版本

yum install -y libaio-devel

wget https://launchpad.net/codership-mysql/5.6/5.6.16-25.5/+download/mysql-5.6.16_wsrep_25.5-linux-x86_64.tar.gz

tar xf mysql-5.6.16_wsrep_25.5-linux-x86_64.tar.gz

mv mysql-5.6.16_wsrep_25.5-linux-x86_64 /usr/local/mysql

useradd -s /sbin/nologin -M mysql

mkdir /data/mydata

./scripts/mysql_install_db --no-defaults --datadir=/data/mydata --user=mysql

chown -R mysql.mysql /data/mydata/

chown root.mysql /usr/local/mysql

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

5、安装galera复制插件

wget https://launchpad.net/galera/3.x/25.3.5/+download/galera-25.3.5-src.tar.gz

tar xf galera-25.3.5-src.tar.gz

cd galera-25.3.5-src

scons

cp garb/garbd /usr/local/mysql/bin

cp libgalera_smm.so /usr/local/mysql/lib/plugin/

6、编辑mysql配置文件my.cnf


[mysqld]

basedir = /usr/local/mysql

datadir = /data/mydata

port = 3306

server-id=101

socket = /tmp/mysql.sock

pid-file=/data/mydata/mysql.pid

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

wsrep_node_name = mysql1

wsrep_provider = /usr/local/mysql/lib/plugin/libgalera_smm.so

wsrep_sst_method = rsync

#wsrep_sst_auth=sst:sstpass     #使用sst的用户和密码,这里如果开启,需要在mysql上创建该用户,并授予其足够的权限

default_storage_engine=InnoDB

innodb_autoinc_lock_mode=2

innodb_locks_unsafe_for_binlog=1

innodb_flush_log_at_trx_commit=1

innodb_file_per_table=1

binlog_format=ROW

log-bin=mysql-bin

relay-log=mysql-relay-bin

log-slave-updates=1

7、启动mysql

service mysqld start --wsrep_cluster_address=gcomm://

注:

1)"gcomm://"是特殊地址,仅仅是galera cluster初始化启动时候使用,再次启动时需要使用具体的ip地址

2)wsrep默认使用4567端口,mysql启动后,除了检查mysql的3306端口外,还要检查此端口

8、给Galera添加一个新的mysql节点

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

在生产环境中,建议设置一个专用的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:集群名称

三、Galera监控

1、常用查询指令

查看wsrep版本: mysql> SHOW GLOBAL STATUS LIKE ‘wsrep_provider_version‘;

查看wsrep有关的所有变量: mysql> SHOW VARIABLES LIKE ‘wsrep%‘ \G

查看Galera集群状态: mysql> show status like ‘wsrep%‘;

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

时间: 2024-10-09 15:53:57

Galera Cluster for MySQL的相关文章

基于MHA和Galera Cluster实现MySQL高可用

MHA:Master HA:是一款开源的MySQL的高可用程序,它为MySQL主从复制架构提供了automating  master  failover功能.MHA在监控到master节点故障时,会将拥有最新数据的slave节点升为新的master节点,在此期间,MHA会通过于slave节点获取额外信息来避免一致性方面的问题.MHA还提供了master节点在线切换功能,即按需切换master/slave节点 MHA服务有两种角色:管理节点(MHA Manager)和数据节点(MHA Node)

Percona XtraDB Cluster vs Galera Cluster vs MySQL Group Replication

Overview Galera Cluster Percona XtraDB Cluster MySQL Group Replication MySQL InnoDB Cluster Similarities Similar - Use Cases Similar Limitation Differences GR & Galera Group Communication System 组通信系统 Binlogs & Gcache Node Provisioning 节点配置 GTID v

Galera Cluster 实现mysql的高可用 (Percona XtraDB Cluster)

Galera Cluster 实现mysql的高可用 (Percona XtraDB Cluster) # 基础搭建 # 设备:三台主机 192.168.47.101 192.168.47.102 192.168.47.103 # centos7 系统 关闭防火墙 selinux # 设置清华源用于下载 cat >/etc/yum.repos.d/pxe.repo <<eof [percona] name=percona baseurl=https://mirrors.tuna.tsin

LVS/DR + KeepAlived+ Galera Cluster 实现mysql群集

一.MySQL Galera介绍 MySQL/Galera是MySQL/InnoDB的多主集群,有以下特性: 1)同步复制 2)Active-active的多主拓扑结构 3)集群任意节点可以读和写 4)自动身份控制,失败节点自动脱离集群 5)自动节点接入 6)真正的基于"行"级别和ID检查的并行复制 7)无单点故障,易扩展 2.架构图 二.Galera Cluster安装 1.安装前的准备 1)需要至少三台mysql服务器,如果只有两台做cluster的话,一旦出现数据不一致的情况,就

mysql借助Galera Cluster构建多主集群

首先安装带有Galera Cluster功能的MariaDB版本的程序包: 官方文档:https://mariadb.com/kb/en/mariadb/getting-started-with-mariadb-galera-cluster/ Galera Cluster实现的复制与mysql传统的复制实现方式不同,传统复制都是通过读取mysql的二进制日志中的事务然后在本地重放实现数据复制的,而Galera Cluster则不需要,它是通过wsrep协议直接从底层复制数据到其它各节点上完成数据

Galera Cluster mysql+keepalived集群部署

1.卸载mysql 查找本机安装的mysqlrpm -qa | grep -i mysql --nodeps --force rpm -ev MySQL-server-5.6.15-1.el6.x86_64rpm -ev --nodeps mysql-libs-5.1.71-1.el6.x86_64 (强制卸载) 查找之前老版本mysql的目录.并且删除老版本mysql的文件和库 find / -name mysql rm -rf /usr/lib64/mysql 卸载后/etc/my.cnf不

Galera Cluster——一种新型的高一致性MySQL集群架构

原文链接:https://www.sohu.com/a/147032902_505779,最近被分配定位mysql的问题,学习下. 1. 何谓Galera Cluster 何谓Galera Cluster?就是集成了Galera插件的MySQL集群,是一种新型的,数据不共享的,高度冗余的高可用方案,目前Galera Cluster有两个版本,分别是Percona Xtradb Cluster及MariaDB Cluster,都是基于Galera的,所以这里都统称为Galera Cluster了,

43 MySQL复制及Galera Cluster、MHA

01 MySQL复制及MHA 实战:配置MHA 配置: node1: MHA 192.168.1.130 CentOS7.2 node2:Master 192.168.1.131 CentOS7.2 node3:Slave  192.168.1.132 CentOS7.2 node4:Slave  192.168.1.133 CentOS7.2 一.准备mysql复制环境 [[email protected] ~]# yum -y install mariadb-server [[email p

关于Oracle的rac集群和mysql Galera Cluster的想法

到了新公司,公司用的是rac,我比较熟悉mysql第三方的集群方案Galera Cluster这类多主集群, 下面是我参考了他人对rac的介绍,然后和mysql方案进行的臆测级别的分析对比. rac和mysql Galera Cluster(mgc)的对比, 1.实施和运维,rac是商业方案系统化性当然强点,mgc大多使用各种开源高可用负载均衡器,部署起来对实施人员的要求rac比较低,废话...rmb都给了甲骨文了,如果是自行配制弄得不好性能2台还不如一台,其实运维方面来说体量大了都一样: 2.