一、PXC介绍
PXC(Percona XtraDB Cluster)是一个开源的MySQL高可用解决方案。它将Percona server和XtraBackup与galera库集成,以实现同步多主复制。基于galera的高可用方案主要有MariaDB galeracluster和Percona XtraDB cluster,目前PXC架构在生产线上用的很多而且更加成熟。
PXC相比那些传统的基于主从模式的集群架构MHA和双主,galera cluster最突出的特点是解决了诟病已久的复制延迟问题,基本上可以达到实时同步。而且节点与节点之间,他们互相的关系是对等的。
本身galera cluster也是一种多主架构。PXC是在存储引擎层实现的同步复制,而非异步复制,所以其数据的一致性是相当高的。
要搭建PXC架构至少需要三个MySQL实例来组成一个集群,三个实例之间不是主从模式,而是各自为主,所以三者是对等关系,不分从属,这也叫multi-master架构。客户端读写时,连接哪个实例都是一样的,读取到的数据是相同的,写入任意一个实例后,集群会将自己新写入的数据同步到其他实例上,这种架构不共享任何数据,是一种高冗余的集群架构。
二、PXC软件包下载
官网地址:
https://www.percona.com/downloads/Percona-XtraDB-Cluster-LATEST
使用官方地址下载速度相对较慢,可以选择国内镜像地址下载:
https://mirrors.tuna.tsinghua.edu.cn/percona/pxc-80/yum/release/8/RPMS/x86_64/
三、安装步骤说明(本方法适用于服务器无法访问外网的情况)
1、将网站中各个压缩包下载至本地
2、将上图中的rpm包 上传至需要安装的主机
3、配置主机yum源,因为在安装的过程中会需要其他依赖包(如何配置yum源在本文中不赘述)
4、进入rpm所在目录,执行如下命令
下面的命令需要root用户下执行
yum localinstall *.rpm
执行后会出现选择,按y进行安装
5、修改配置文件,配置文件路径/etc/my.cnf
vi /etc/my.cnf
以下为配置文件内容:
[client]
socket=/data/mysql/mysql.sock
[mysqld]
server-id=141 #每台mysql的id不能相同
datadir=/data/mysql #根据硬盘大小情况修改,需要大空间
socket=/data/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
#下面这三行在配置文件中没有需要添加
lower_case_table_names=1
innodb_file_per_table=1
innodb_strict_mode=0
#二进制日志过期时间为604800秒,等于7天
binlog_expire_logs_seconds=604800
######## wsrep ###### #########
Galera 库的路径
wsrep_provider=/usr/lib64/galera4/libgalera_smm.so
# 集群连接 URL 包含节点的 IP #
如果没有找到 IP,这意味着需要一个新的集群创建,
#为了做到这一点,你需要引导这个节点
wsrep_cluster_address =gcomm://集群的IP,逗号分割
#为了显示为正确的二进制日志格式应该是ROW
binlog_format = ROW
#从服务器线程使用
wsrep_slave_threads = 8个
wsrep_log_conflicts
#这个变化的InnoDB自动增量锁是如何管理的
innodb_autoinc_lock_mode = 2
#节点 IP 地址,本机IP
wsrep_node_address=192.168.70.63
# 集群名称,集群中的主机名称需要相同
wsrep_cluster_name=pxc-cluster
#节点名称,集群中的节点名称不能相同
wsrep_node_name=pxc-cluster-node-1
#pxc_strict_mode, allowed values:RCMISSABLE,EN MASTER
pxc_strict_mode=ENFORCING
# SST 方法
wsrep_sst_method=xtrabackup-v2
6、启动MySQL服务,本次将第一台安装的主机作为引导机
systemctl start mysql@bootstrap.service
7、登录MySQL查看集群节点情况
第一次启动MySQL后,在/var/log/mysqld.log日志中记录了root账号对应的密码,搜索password关键字可以找到
登录MySQL
mysql -uroot -p
输入密码
show status LIKE 'wsrep%';
返回结果中:wsrep_cluster_size 表示集群中的主机数量
8、另外的主机按照上面的方法执行 1~5步,执行后,将引导机数据目录下的*.pem文件导入到其他主机的数据目录下。
9、启动MySQL
其余主机启动方式与引导机不同
执行命令如下:
systemctl start mysql
10、查看wsrep_cluster_size是否增加,显示的数量与启动的MySQL数量相同即可
11、完成,请使用高可用MySQL集群吧
12、PXC节点的上线与下线