七十三、【Linux数据库】MySQL数据库PXC 集群概述与演示
MySQL PXC 集群概述
Percona XtraDB Cluster (PXC) 核心特性
- 同步复制:实时数据同步,无延迟
- 多主架构:所有节点可读写
- 自动故障转移:节点故障自动恢复
- 数据一致性:基于Galera的全局事务ID
- 在线扩展:动态添加节点
架构优势
一、环境准备
1. 节点规划
节点 | IP地址 | 主机名 | 角色 |
---|---|---|---|
节点1 | 192.168.1.101 | pxc1 | 初始节点 |
节点2 | 192.168.1.102 | pxc2 | 加入节点 |
节点3 | 192.168.1.103 | pxc3 | 加入节点 |
2. 系统配置
# 所有节点执行
[root@pxc1 ~]# hostnamectl set-hostname pxc1
[root@pxc1 ~]# systemctl stop firewalld
[root@pxc1 ~]# setenforce 0
[root@pxc1 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
3. 时间同步
# 安装NTP
[root@pxc1 ~]# yum install ntp -y
[root@pxc1 ~]# systemctl start ntpd
[root@pxc1 ~]# systemctl enable ntpd
二、PXC 集群部署
1. 安装Percona仓库
# 所有节点执行
[root@pxc1 ~]# yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm -y
[root@pxc1 ~]# percona-release enable pxc-80 release
2. 安装PXC软件
# 所有节点执行
[root@pxc1 ~]# yum install percona-xtradb-cluster-server -y
3. 配置节点1
# 编辑配置文件
[root@pxc1 ~]# vi /etc/my.cnf
[mysqld]
server-id=1
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid# PXC配置
wsrep_provider=/usr/lib64/galera4/libgalera_smm.so
wsrep_cluster_name=pxc-cluster
wsrep_cluster_address=gcomm://192.168.1.101,192.168.1.102,192.168.1.103
wsrep_node_name=pxc1
wsrep_node_address=192.168.1.101
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth="sstuser:SstPass123!"
pxc_strict_mode=ENFORCING
binlog_format=ROW
default_storage_engine=InnoDB
4. 启动第一个节点
# 特殊启动命令
[root@pxc1 ~]# systemctl start mysql@bootstrap.service# 创建SST用户
[root@pxc1 ~]# mysql -uroot -p
mysql> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'SstPass123!';
mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';
mysql> FLUSH PRIVILEGES;
5. 配置并启动节点2
# 编辑配置文件
[root@pxc2 ~]# vi /etc/my.cnf
[mysqld]
server-id=2
wsrep_node_name=pxc2
wsrep_node_address=192.168.1.102# 启动节点
[root@pxc2 ~]# systemctl start mysql
6. 配置并启动节点3
# 编辑配置文件
[root@pxc3 ~]# vi /etc/my.cnf
[mysqld]
server-id=3
wsrep_node_name=pxc3
wsrep_node_address=192.168.1.103# 启动节点
[root@pxc3 ~]# systemctl start mysql
三、集群验证
1. 查看集群状态
# 在任意节点执行
[root@pxc1 ~]# mysql -uroot -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 3 |
+--------------------+-------+# 查看节点状态
[root@pxc1 ~]# mysql -uroot -p -e "SHOW STATUS LIKE 'wsrep_ready'"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wsrep_ready | ON |
+---------------+-------+
2. 数据同步测试
# 在节点1创建数据库
[root@pxc1 ~]# mysql -uroot -p -e "CREATE DATABASE pxc_test"# 在节点2验证
[root@pxc2 ~]# mysql -uroot -p -e "SHOW DATABASES LIKE 'pxc_test'"
+-------------------+
| Database (pxc_test) |
+-------------------+
| pxc_test |
+-------------------+
3. 多主写入测试
# 节点1插入数据
[root@pxc1 ~]# mysql -uroot -p pxc_test -e "CREATE TABLE test_tbl (id INT PRIMARY KEY, data VARCHAR(100))"
[root@pxc1 ~]# mysql -uroot -p pxc_test -e "INSERT INTO test_tbl VALUES (1, 'Node1')"# 节点2插入数据
[root@pxc2 ~]# mysql -uroot -p pxc_test -e "INSERT INTO test_tbl VALUES (2, 'Node2')"# 节点3查询数据
[root@pxc3 ~]# mysql -uroot -p pxc_test -e "SELECT * FROM test_tbl"
+----+-------+
| id | data |
+----+-------+
| 1 | Node1 |
| 2 | Node2 |
+----+-------+
四、集群管理
1. 节点维护
# 安全关闭节点
[root@pxc1 ~]# systemctl stop mysql# 重新加入集群
[root@pxc1 ~]# systemctl start mysql
2. 添加新节点
# 新节点配置
[root@pxc4 ~]# vi /etc/my.cnf
[mysqld]
server-id=4
wsrep_node_name=pxc4
wsrep_node_address=192.168.1.104
wsrep_cluster_address=gcomm://192.168.1.101,192.168.1.102,192.168.1.103,192.168.1.104# 启动新节点
[root@pxc4 ~]# systemctl start mysql
3. 备份与恢复
# 全量备份
[root@pxc1 ~]# innobackupex --user=root --password=your_password /backup/# 恢复备份
[root@pxc1 ~]# systemctl stop mysql
[root@pxc1 ~]# innobackupex --apply-log /backup/2023-07-21_full/
[root@pxc1 ~]# innobackupex --copy-back /backup/2023-07-21_full/
[root@pxc1 ~]# chown -R mysql:mysql /var/lib/mysql
[root@pxc1 ~]# systemctl start mysql
命令总结表格
演示命令 | 功能描述 | 关键参数 |
---|---|---|
percona-release enable pxc-80 | 启用PXC仓库 | PXC版本 |
yum install percona-xtradb-cluster-server | 安装PXC | 无 |
systemctl start mysql@bootstrap.service | 启动首节点 | 引导集群 |
SHOW STATUS LIKE 'wsrep_cluster_size' | 查看集群大小 | 节点数量 |
CREATE USER 'sstuser'@'localhost' | 创建同步用户 | SST认证 |
GRANT RELOAD, LOCK TABLES ... | 授权SST用户 | 必要权限 |
innobackupex --backup | PXC备份 | 热备份工具 |
innobackupex --copy-back | 恢复备份 | 数据恢复 |
systemctl stop mysql | 停止节点 | 安全关闭 |
SHOW STATUS LIKE 'wsrep_ready' | 检查节点状态 | 集群就绪 |
功能作用详解
1. PXC 架构原理
同步复制流程
组件功能
组件 | 功能描述 |
---|---|
wsrep API | 复制接口 |
Galera Library | 复制核心 |
Certification Layer | 冲突检测 |
SST/IST | 全量/增量同步 |
2. 高可用方案
故障转移流程
脑裂防护
# 最少存活节点数
gcache.size=1G # 增大缓存
pc.weight=1 # 节点权重
evs.keepalive_period=100 # 心跳检测