Galera Cluster特点
多主架构:真正的多点读写的集群,在任何时候读写数据,都是最新的
同步复制:集群不同节点之间数据同步,没有延迟,在数据库挂掉之后,数据不会丢失
并发复制:从节点APPLY数据时,支持并行执行,更好的性能
故障切换:在出现数据库故障时,因支持多点写入,切换容易
热插拔:在服务期间,如果数据库挂了,只要监控程序发现的够快,不可服务时间就会非常少。在
节点故障期间,节点本身对集群的影响非常小
自动节点克隆:在新增节点,或者停机维护时,增量数据或者基础数据不需要人工手动备份提供,
Galera Cluster会自动拉取在线节点数据,最终集群会变为一致
对应用透明:集群的维护,对应用程序是透明的
Galera Cluster 缺点
由于DDL 需全局验证通过,则集群性能由集群中最差性能节点决定(一般集群节点配置都是一样
的)
新节点加入或延后较大的节点重新加入需全量拷贝数据(SST,State Snapshot Transfer),作为
donor( 贡献者,如: 同步数据时的提供者)的节点在同步过程中无法提供读写
只支持innodb存储引擎的表
PXC最常使用如下4个端口号:
3306:数据库对外服务的端口号
4444:请求SST的端口号
4567:组成员之间进行沟通的端口号
4568:用于传输IST的端口号
下面是MyCat结合PXC的架构图
PXC:Percona XtraDB Cluster,是Percona对Galera的实现
参考仓库:
https://mirrors.tuna.tsinghua.edu.cn/percona/release/$releasever/RPMS/$basearch
案例:Percona XtraDB Cluster(PXC 5.7)
1 环境准备
四台主机
pxc1:172.31.0.7
pxc2:172.31.0.17
pxc3:172.31.0.27
pxc4:172.31.0.37 # 这台是作为测试添加新机器到集群
OS 版本目前不支持CentOS 8
关闭防火墙和SELinux,保证时间同步
注意:如果已经安装MySQL,必须卸载
此处使用清华大学yum源,官方源太慢了
[root@localhost ~]# vim /etc/yum.repos.d/pxc.repo
[percona]
name=percona-repo
baseurl=https://mirrors.tuna.tsinghua.edu.cn/percona/release/$releasever/RPMS/$basearch
enabled=1
gpgcheck=0
# 把镜像源拷贝到远端服务器
[root@localhost ~]# scp /etc/yum.repos.d/pxc.repo 172.31.0.17:/etc/yum.repos.d/
[root@localhost ~]# scp /etc/yum.repos.d/pxc.repo 172.31.0.27:/etc/yum.repos.d/
# 在三个节点都安装好PXC 5.7
[root@localhost ~]# yum install Percona-XtraDB-Cluster-57 -y
[root@localhost ~]# yum install Percona-XtraDB-Cluster-57 -y
[root@localhost ~]# yum install Percona-XtraDB-Cluster-57 -y
在各个节点上分别配置mysql及集群配置文件
/etc/my.cnf为主配置文件,当前版本中,其余的配置文件都放在/etc/percona-xtradb-cluster.conf.d目
录里,包括mysqld.cnf,mysqld_safe.cnf,wsrep.cnf 三个文件
# 主配置文件不需要修改
[root@localhost ~]# vim /etc/my.cnf
# 各个节点改id号即可
[root@localhost ~]# vim /etc/percona-xtradb-cluster.conf.d/mysqld.cnf
# Template my.cnf for PXC
# Edit to your requirements.
[client]
socket=/var/lib/mysql/mysql.sock
[mysqld]
server-id=17
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
log-bin
log_slave_updates
expire_logs_days=7
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# PXC的配置文件必须修改
# 172.31.0.17
[root@localhost ~]# grep -Ev "^#|^$" /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
[mysqld]
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_address=gcomm://172.31.0.17,172.31.0.27,172.31.0.37 # 各个节点IP
binlog_format=ROW
default_storage_engine=InnoDB
wsrep_slave_threads= 8
wsrep_log_conflicts
innodb_autoinc_lock_mode=2
wsrep_node_address=172.31.0.17 # 本机ip
wsrep_cluster_name=pxc-cluster-m520
wsrep_node_name=pxc-cluster-node-1-m520 # 各个节点指定的ID
pxc_strict_mode=ENFORCING
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth="sstuser:s3cretPass"
# 172.31.0.27
[root@localhost ~]# grep -Ev "^#|^$" /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
[mysqld]
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_address=gcomm://172.31.0.17,172.31.0.27,172.31.0.37
binlog_format=ROW
default_storage_engine=InnoDB
wsrep_slave_threads= 8
wsrep_log_conflicts
innodb_autoinc_lock_mode=2
wsrep_node_address=172.31.0.27
wsrep_cluster_name=pxc-cluster-m520
wsrep_node_name=pxc-cluster-node-2-m520 # 各个节点指定的ID
pxc_strict_mode=ENFORCING
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth="sstuser:s3cretPass" # 取消注释
# 172.31.0.37
[root@localhost ~]# grep -Ev "^#|^$" /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
[mysqld]
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_address=gcomm://172.31.0.17,172.31.0.27,172.31.0.27
binlog_format=ROW
default_storage_engine=InnoDB
wsrep_slave_threads= 8
wsrep_log_conflicts
innodb_autoinc_lock_mode=2
wsrep_node_address=172.31.0.37
wsrep_cluster_name=pxc-cluster-m520
wsrep_node_name=pxc-cluster-node-3-m520
pxc_strict_mode=ENFORCING
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth="sstuser:s3cretPass"
注意:尽管Galera Cluster不再需要通过binlog的形式进行同步,但还是建议在配置文件中开启二进制日
志功能,原因是后期如果有新节点需要加入,老节点通过SST全量传输的方式向新节点传输数据,很可
能会拖垮集群性能,所以让新节点先通过binlog方式完成同步后再加入集群会是一种更好的选择
配置文件各项配置意义
配置 | 说明 |
---|---|
wsrep_provider | 指定Galera库的路径 |
wsrep_cluster_name | Galera集群的名称 |
wsrep_cluster_address | Galera集群中各节点地址。地址使用组通信协议gcomm://(groupcommunication) |
wsrep_node_name | 本节点在Galera集群中的名称 |
wsrep_node_address | 本节点在Galera集群中的通信地址 |
wsrep_sst_method | state_snapshot_transfer(SST)使用的传输方法,可用方法有mysqldump、rsync和xtrabackup,前两者在传输时都需要对Donor加全局只读锁(FLUSH TABLES WITH READLOCK),xtrabackup则不需要(它使用percona自己提供的backup lock)。强烈建议采用xtrabackup |
wsrep_sst_auth | 在SST传输时需要用到的认证凭据,格式为:“用户:密码” |
pxc_strict_mode | 是否限制PXC启用正在试用阶段的功能,ENFORCING是默认值,表示不启用 |
binlog_format | 二进制日志的格式。Galera只支持row格式的二进制日志 |
default_storage_engine | 指定默认存储引擎。Galera的复制功能只支持InnoDB |
innodb_autoinc_lock_mode | 只能设置为2,设置为0或1时会无法正确处理死锁问题 |
启动PXC集群中任意的节点可以作为第一节点
[root@localhost ~]# systemctl start mysql@bootstrap.service
# 查看端口有4567和3306
[root@localhost ~]# ss -tunl
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 *:22 *:*
tcp LISTEN 0 128 *:4567 *:*
tcp LISTEN 0 100 127.0.0.1:25 *:*
tcp LISTEN 0 80 :::3306 :::*
tcp LISTEN 0 128 :::22 :::*
tcp L