MySQL之PXC

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值