当前位置: 首页 > article >正文

配置 MySQL 8.0 集群使用 PXC 实现高可用实验

一、实验概述

本实验旨在基于 RHEL 9 系统,使用 Percona XtraDB Cluster(PXC)来配置 MySQL 8.0 集群以实现高可用。PXC 是一个基于 Galera 复制的 MySQL 集群解决方案,提供了多主多活的架构,确保数据的强一致性和高可用性。实验将使用三台服务器,IP 地址分别为 192.168.65.131、192.168.65.132 和 192.168.65.133。

二、实验环境准备

2.1 服务器信息

服务器编号IP 地址主机名
节点 1192.168.65.131pxc-node1
节点 2192.168.65.132pxc-node2
节点 3192.168.65.133pxc-node3

2.2 安装必要软件

在所有节点上执行以下命令更新系统并安装必要的软件:

sudo dnf update -y
sudo dnf install -y wget vim firewalld

2.3 配置主机名和 hosts 文件

在每个节点上设置主机名:

# 节点 1
sudo hostnamectl set-hostname pxc-node1
# 节点 2
sudo hostnamectl set-hostname pxc-node2
# 节点 3
sudo hostnamectl set-hostname pxc-node3

编辑 /etc/hosts 文件,添加以下内容:

192.168.65.131 pxc-node1
192.168.65.132 pxc-node2
192.168.65.133 pxc-node3

2.4 关闭防火墙

sudo systemctl stop firewalld

2.5 关闭 SELinux

编辑 /etc/selinux/config 文件,将 SELINUX 设置为 disabled

SELINUX=disabled

重启服务器使设置生效:

sudo reboot

三、安装 Percona XtraDB Cluster

 yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm  -y
 percona-release setup pxc-80
 yum install percona-xtradb-cluster  -y

四、配置 PXC 集群

4.1 配置节点 1(初始节点)

编辑 /etc/my.cnf.d 文件,在原文件中修改以下内容:

 

4.2 初始化节点 1

查看临时密码

sudo grep 'temporary password' /var/log/mysqld.log

先输入临时密码再重新设置 MySQL root 用户密码:

mysql -u root -p
alter user 'root'@'localhost' identified by 'mysql@123';

 将引导服务mysql目录下的*.pem拷贝给其他服务器 (其他节点删除默认的认证)

[root@pxc2 ~]# cd /var/lib/mysql/
[root@pxc2 mysql]# rm -f *.pem
[root@pxc3 mysql]# rm -f *.pem
[root@pxc1 ~]# scp /var/lib/mysql/*.pem pxc2:/var/lib/mysql/
[root@pxc1 ~]# scp /var/lib/mysql/*.pem pxc3:/var/lib/mysql/

第一个节点需要以引导模式启动 

[root@pxc1 ~]# systemctl start mysql@bootstrap.service

4.3 配置节点 2 和节点 3

在节点 2 和节点 3 上编辑 /etc/my.cnf 文件,修改 server-idwsrep_node_address 和 wsrep_node_name

节点 2
[mysqld]
# 基础设置
server-id = 132
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/galera-4/libgalera_smm.so
wsrep_cluster_name = "pxc_cluster"
wsrep_cluster_address = "gcomm://192.168.65.131,192.168.65.132,192.168.65.133"
wsrep_node_address = "192.168.65.132"
wsrep_node_name = "pxc-node2"
wsrep_sst_method = xtrabackup-v2


# MySQL 配置
binlog_format = ROW
default_storage_engine = InnoDB
innodb_autoinc_lock_mode = 2
节点 3
[mysqld]
# 基础设置
server-id = 133
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/galera-4/libgalera_smm.so
wsrep_cluster_name = "pxc_cluster"
wsrep_cluster_address = "gcomm://192.168.65.131,192.168.65.132,192.168.65.133"
wsrep_node_address = "192.168.65.133"
wsrep_node_name = "pxc-node3"
wsrep_sst_method = xtrabackup-v2

# MySQL 配置
binlog_format = ROW
default_storage_engine = InnoDB
innodb_autoinc_lock_mode = 2

 查看临时密码,并修改密码

sudo grep 'temporary password' /var/log/mysqld.log
mysql -u root -p
alter user 'root'@'localhost' identified by 'mysql@123';

4.4 启动节点 2 和节点 3

在节点 2 和节点 3 上启动 MySQL 服务:

sudo systemctl start mysql

五、验证 PXC 集群

5.1 检查集群状态

在任意节点上登录 MySQL 并执行以下命令:

show status like 'wsrep_incoming_addresses';

show status like 'wsrep_cluster%';

如果 wsrep_cluster_size 显示为 3,wsrep_cluster_status 显示为 Primarywsrep_ready 显示为 ON,则表示集群配置成功。

5.2 测试数据同步

在节点 1 上创建一个数据库和表,并插入数据:

CREATE DATABASE test_db;
USE test_db;
CREATE TABLE test_table (id INT PRIMARY KEY, name VARCHAR(20));
INSERT INTO test_table VALUES (1, 'test');

在节点 2 和节点 3 上查询数据:

USE test_db;
SELECT * FROM test_table;

如果能够查询到相同的数据,则表示数据同步正常。

六、高可用性测试

6.1 模拟节点故障

在节点 1 上停止 MySQL 服务:

sudo systemctl stop mysql

手动关闭pxc的mysql服务进程 

kill -9 <pid>

6.2 检查集群状态

在节点 2 或节点 3 上登录 MySQL 并执行以下命令:

show status like 'wsrep_cluster%';

此时 wsrep_cluster_size 应该显示为 2,wsrep_cluster_status 仍然为 Primary,表示集群仍然正常运行。

6.3 恢复故障节点

在节点 1 上启动 MySQL 服务:

sudo systemctl start mysql

再次检查集群状态,wsrep_cluster_size 应该恢复为 3。


http://www.kler.cn/a/541966.html

相关文章:

  • macbook2015升级最新MacOS 白苹果变黑苹果
  • 使用 Apifox、Postman 测试 Dubbo 服务,Apache Dubbo OpenAPI 即将发布
  • 【详细版】DETR系列之Deformable DETR(2021 ICLR)
  • pytest生成报告no tests ran in 0.01s
  • Linux下Gufw防火墙安装指南
  • 2025/2/10 心得
  • 17vue3实战-----使用配置文件生成简易页面
  • Mockito从入门到精通教程大纲(基于JUnit 5)
  • 1312:【例3.4】昆虫繁殖
  • 视频或者流的测试资源
  • KERL文献阅读分享:知识图谱与预训练语言模型赋能会话推荐系统
  • 从内存到网络:深入理解对象序列化
  • 电脑桌面如何设置待办事项,电脑桌面提醒便签推荐
  • django配置跨域
  • 支持selenium的chrome driver更新到133.0.6943.53
  • 今日AI和商界事件(2025-02-11)
  • 基于Jenkins+Maven+Java+HttpClient+TestNG+Git+Allure的持续集成测试框架搭建方案(自己写和Ai对比)
  • 数据库行转列技术详解
  • 分治范式下的快速排序全解:C++实现、时间复杂度优化与工程化实践
  • 深度对比析:DeepSeek服务优胜本地部署、网页版与蓝耘GPU智算云平台的较量以及删除本地部署的过程
  • 【项目总结】易到家家政服务平台 —— 派单调度(7)
  • Mac如何安装JMeter
  • 【数据结构】_树与二叉树
  • Flask魔法:打造你的Web应用路由王国
  • 结构形模式---适配器模式
  • zabbix 监控系统 配置钉钉告警