前期理解
pxc就是将多个mysql数据库整合为一个集群,每台服务器上的mysql数据库会实时同步,而且节点与节点之间,他们相互的关系是对等的。PXC 最关注的是数据的一致性,对待事物的行为时,要么在所有节点上执行,要么都不执行,它的实现机制决定了它对待一致性的行为非常严格,这也能非常完美的保证 MySQL 集群的数据一致性。
前期规划
角色 | ip | 操作系统 | 内核 | 软件包 |
MySQL服务器 | 192.168.80.161 | CentOS Stream 9 | 5.14.0- 381.el9.x86_64 | |
MySQL服务器 | 192.168.80.162 | CentOS Stream 9 | 5.14.0- 381.el9.x86_64 | |
MySQL服务器 | 192.168.80.163 | CentOS Stream 9 | 5.14.0- 381.el9.x86_64 |
实现目标
三台MySQL服务器全部配置PXC,实现数据库的同步
安装依赖
yum -y install openssl
安装pxc
查看glibc版本,以便下载对应的包
rpm -qi glibc
官网下载地址
修改hosts文件和主机名称
192.168.80.161 my-161
192.168.80.162 my-162
192.168.80.163 my-163
修改各自的主机名称
hostnamectl set-hostname --static my-161
hostnamectl set-hostname --static my-162
hostnamectl set-hostname --static my-163
安装pxc之前的话,首先安装两个包
qpress-11-1.el8.x86_64.rpm
percona-xtrabackup-24-2.4.18-1.el8.x86_64.rpm
如有需要,可以留言联系。
安装qpress(三台相同)
yum -y localinstall qpress-11-1.el8.x86_64.rpm
安装percoa-xtrabackup(三台相同)
yum -y localinstall percona-xtrabackup-24-2.4.18-1.el8.x86_64.rpm
安装Percona-XtraDB-Cluster(pxc的安装包)
mkdir Percona-XtraDB-Cluster
tar xf Percona-XtraDB-Cluster-8.0.35-r84d9464-el9-x86_64-bundle -C Percona-XtraDB-Cluster/
cd Percona-XtraDB-Cluster/
yum localinstall *.rpm
安装完成之后检查环境信息
mysql --version
查看状态
systemctl status mysql
PXC配置
/etc/my.cnf为主配置文件
早期的版本还有其他配置文件在/etc/percona-xtradb-cluster.conf.d目录,包括mysqld.cnf,mysqld_safe.cnf,wsrep.cnf等。
安装后默认的配置文件内容
[root@my-161 ~]# grep -Ev "^#|^$" /etc/my.cnf
[client]
socket=/var/lib/mysql/mysql.sock
[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
binlog_expire_logs_seconds=604800
wsrep_provider=/usr/lib64/galera4/libgalera_smm.so
wsrep_cluster_address=gcomm://
binlog_format=ROW
wsrep_slave_threads=8
wsrep_log_conflicts
innodb_autoinc_lock_mode=2
wsrep_cluster_name=pxc-cluster
wsrep_node_name=pxc-cluster-node-1
pxc_strict_mode=ENFORCING
wsrep_sst_method=xtrabackup-v2
配置server-id
三台服务器配置sever-id 后面的数字必须为唯一的ID 不能为复数
161主机配置
162主机配置
163主机配置
集群中所有节点的ip(三台都须配置)
wsrep_cluster_address=gcomm://
修改节点名称
添加以下内容
wsrep_provider_options="socket.ssl_key=server-key.pem;socket.ssl_cert=server-cert.pem;socket.ssl_ca=ca.pem"
lower_case_table_names=1
max_allowed_packet=200M
character-set-server=utf8
[sst]
encrypt=4
ssl-key=server-key.pem
ssl-ca=ca.pem
ssl-cert=server-cert.pem
修改完成的配置文件(161主机为例)
[root@my-161 ~]# grep -Ev "^#|^$" /etc/my.cnf
[client]
socket=/var/lib/mysql/mysql.sock
[mysqld]
#
server-id=161
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
binlog_expire_logs_seconds=604800
wsrep_provider=/usr/lib64/galera4/libgalera_smm.so
#
wsrep_cluster_address=gcomm://192.168.80.161,192.168.80.162,192.168.80.163
binlog_format=ROW
wsrep_slave_threads=8
wsrep_log_conflicts
innodb_autoinc_lock_mode=2
wsrep_cluster_name=pxc-cluster
#
wsrep_node_name=my-161
pxc_strict_mode=ENFORCING
wsrep_sst_method=xtrabackup-v2
#
wsrep_provider_options="socket.ssl_key=server-key.pem;socket.ssl_cert=server-cert.pem;socket.ssl_ca=ca.pem"
lower_case_table_names=1
max_allowed_packet=200M
character-set-server=utf8
[sst]
encrypt=4
ssl-key=server-key.pem
ssl-ca=ca.pem
ssl-cert=server-cert.pem
三台服务器创建 /mysql/pxc
mkdir -pv /mysql/pxc
三台服务器的相关的路径正确赋权
mkdir -p /mysql/pxc;chown -R mysql.mysql /mysql/pxc
首节点初次启动集群
首节点可以是任意节点,此处采用my-161作为首节点,执行如下命令启动
[root@my-161 ~]# systemctl start mysql@bootstrap.service
查看密码
grep 'temporary password' /mysql/pxc/mysqld.log
[root@my-161 ~]# grep 'temporary password' /mysql/pxc/mysqld.log
2024-02-29T04:00:11.385479Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: clt_ri41ki?D
mysql -u root -p ‘clt_ri41ki?D’
输入密码的时候,可能初始化的密码有特殊字符,需要将密码使用单引号包起来
可以登录
修改密码
ALTER USER 'root'@'localhost'IDENTIFIED BY'zi2W%ezO10';
刷新
关闭首节点
systemctl stop mysql@bootstrap.service
再次启动首节点
systemctl start mysql@bootstrap.service
查看是否可以登录
mysql -uroot -p'zi2W%ezO10'
复制主节点的加密文件
SSL加密的自动配置需要密钥和证书文件。MySQL会生成一个默认密钥和证书文件,并将它们放置在数据目录中。
重要的是,群集在所有节点上使用相同的SSL证书。
原来各个节点的pem文件必须一致才可以!
把主机点的加密文件复制到本地
scp my-161:/mysql/pxc/data/*.pem /mysql/pxc/data
包括了如下文件
ca-key.pem
ca.pem
client-cert.pem
client-key.pem
private_key.pem
public_key.pem
server-cert.pem
server-key.pem
在另外两台主机上启动mysql
systemctl start mysql
可能时间较长,请耐心等待
启动成功之后,两台从节点的主机使用主节点的用户和密码登录
mysql -uroot -p'zi2W%ezO10'
162主机登录
163主机登录
启动成功之后在主节点创建库
create database www;
进入库
use www;
创建表
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(255),
age INT
);
插入两条数据
INSERT INTO users (id, name, age) VALUES (1, '张三', 20);
INSERT INTO users (id, name, age) VALUES (2, '李四', 25);
162主机查看
163主机查看
基本配置完成
关闭Percona Server开机自启动
systemctl disable mysql
之所以要禁用开机自启,是因为在PXC集群中,当一个节点宕机重启后,它会随机与一个PXC节点进行数据同步。如果该节点宕机时间过长,那么需要同步的数据量就会比较大。当发生大量数据同步时,PXC集群会限制其他的写入操作,直到数据全部同步成功。所以长时间宕机之后,正确的做法是不要马上启动节点,而是先从其他节点拷贝数据文件到该节点中,然后再进行启动。这样需要同步的数据就会少很多,不会引起长时间的限速。
参考文档