搭建 pxc 集群
percona xtradb cluster (简称 pxc)集群是基于 galera 2.x library,事务型应用下的通用的多主同步复制插件,主要用于解决强一致性问题,使得各个节点之间的数据保持实时同步以及实现多节点同时读写。提高了数据库的可靠性,也可以实现读写分离,是 mysql 关系型数据库中大家公认的集群优选方案之一。
准备好下面三台服务器,本文搭建pxc集群基于rocky8.0环境:
ip | 端口 | 角色 |
---|---|---|
192.168.1.51 | 3306 | pxc |
192.168.1.52 | 3306 | pxc2 |
192.168.1.53 | 3306 | pxc3 |
配置hosts解析
[root@localhost ~]# vim /etc/hosts + 192.168.1.51 pxc1 192.168.1.52 pxc2 192.168.1.53 pxc3 或: # cat >> /etc/hosts << eof 192.168.1.51 pxc1 192.168.1.52 pxc2 192.168.1.53 pxc3 eof
用 mysql 软件模块的命令(三台都需要)
[root@localhost ~]# yum module disable mysql
下载 pxc 安装包
[root@localhost ~]# yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
启用pxc80版本
[root@localhost ~]# percona-release setup pxc-80
安装pxc集群
[root@localhost ~]# yum install percona-xtradb-cluster
之后还是对 percona server 数据库的初始化:
初始化数据库
应为使用的是8.0版本,部分配置需要在初始化数据库前进行配置,如忽略表名大小写等
[root@pxc1 ~]# vim /etc/my.cnf ... [mysqld] server-id=51 #每台mysql的id不能相同 # binary log expiration period is 604800 seconds, which equals 7 days binlog_expire_logs_seconds=604800 #二进制日志过期时间为604800秒,等于7天 wsrep_cluster_address=gcomm://192.168.1.51,192.168.1.52,192.168.1.53 #都需要 wsrep_node_address=192.168.1.51 #将#去掉,改成对应ip wsrep_node_name=pxc1 #集群名字 注意:pxc2和pxc3只需要server-id设置为52和53,集群名字改为pxc2和3即可。
第一个节点需要以引导模式启动:
[root@pxc1 ~]# systemctl start mysql@bootstrap.service
查看临时密码
[root@localhost ~]# grep -i password /var/log/mysqld.log 2025-02-13t13:20:31.423023z 6 [note] [my-010454] [server] a temporary password is generated for root@localhost: ksn&iycog4dq
修改密码
[root@localhost ~]# mysql -uroot -p'ksn&iycog4dq' mysql> alter user root@localhost identified by 'mysql@123';
免密登录
[root@localhost ~]# vim /etc/my.cnf user=root password=mysql@123
查询集群信息
mysql> show status like 'wsrep%';
查看证书
#(第一个节点) mysql> show variables like 'pxc_encrypt_cluster_traffic'; +-----------------------------+-------+ | variable_name | value | +-----------------------------+-------+ | pxc_encrypt_cluster_traffic | on | +-----------------------------+-------+ 1 row in set (0.05 sec) [root@localhost ~]# cd /var/lib/mysql [root@localhost mysql]# ll *.pem -rw------- 1 mysql mysql 1680 feb 13 21:54 ca-key.pem -rw-r--r-- 1 mysql mysql 1120 feb 13 21:54 ca.pem -rw-r--r-- 1 mysql mysql 1120 feb 13 21:54 client-cert.pem -rw------- 1 mysql mysql 1680 feb 13 21:54 client-key.pem -rw------- 1 mysql mysql 1676 feb 13 21:54 private_key.pem -rw-r--r-- 1 mysql mysql 452 feb 13 21:54 public_key.pem -rw-r--r-- 1 mysql mysql 1120 feb 13 21:54 server-cert.pem -rw------- 1 mysql mysql 1680 feb 13 21:54 server-key.pem
修改证书
将第一个节点的证书复制到第2个和第3个节点上面
#第2,3节点先删除证书 [root@localhost ~]# cd /var/lib/mysql [root@localhost mysql]# rm -f *.pem #在第1节点进行拷贝 [root@localhost ~]# scp /var/lib/mysql/*.pem pxc2:/var/lib/mysql the authenticity of host 'pxc2 (192.168.1.52)' can't be established. ecdsa key fingerprint is sha256:5hjl01eqj2nry7dtjvtglq+ghvziz54afei4awcuc3e. are you sure you want to continue connecting (yes/no/[fingerprint])? yes #需要输入 warning: permanently added 'pxc2,192.168.1.52' (ecdsa) to the list of known hos root@pxc2's password: #需要输入pxc2,192.168.1.52的开机密码(root) ca-key.pem 100% 1680 942.8kb/s 00:00 ca.pem 100% 1120 807.8kb/s 00:00 client-cert.pem 100% 1120 1.5mb/s 00:00 client-key.pem 100% 1676 1.1mb/s 00:00 private_key.pem 100% 1680 1.8mb/s 00:00 public_key.pem 100% 452 908.5kb/s 00:00 server-cert.pem 100% 1120 2.1mb/s 00:00 server-key.pem 100% 1680 1.7mb/s 00:00 [root@localhost ~]# scp /var/lib/mysql/*.pem pxc3:/var/lib/mysql #再在第2,3节点上修改证书权限 [root@localhost mysql]# chown mysql.mysql *.pem
接着在第二和第三个节点上正常启动数据库服务,命令如下:
[root@pxc2 ~]# systemctl start mysql [root@pxc3 ~]# systemctl start mysql
查询集群信息
mysql> show status like 'wsrep%'; 或: mysql> show status where variable_name in ('wsrep_cluster_size','wsrep_cluster_status','wsrep_connected','wsrep_ready'); +----------------------+---------+ | variable_name | value | +----------------------+---------+ | wsrep_cluster_size | 3 | | wsrep_cluster_status | primary | | wsrep_connected | on | | wsrep_ready | on | +----------------------+---------+ 4 rows in set (0.03 sec)
同步状态监控
mysql> select * from performance_schema.pxc_cluster_view; +-----------+--------------------------------------+--------+-------------+---------+ | host_name | uuid | status | local_index | segment | +-----------+--------------------------------------+--------+-------------+---------+ | pxc1 | 4fdd3348-ea0d-11ef-8eec-ce7af56f28c3 | synced | 0 | 0 | | pxc2 | cf90d45e-ea15-11ef-9521-72c20777f912 | synced | 1 | 0 | | pxc3 | d608c0e9-ea15-11ef-a5fa-42a90e6cebce | synced | 2 | 0 | +-----------+--------------------------------------+--------+-------------+---------+ 3 rows in set (0.00 sec)
节点2,3无需修改密码
加入集群用的就是节点1的密码
查看 pxc 集群状态信息,在任意一个节点执行以下命令:
[root@pxc1 ~]# mysql -uroot -p'mysql@123' -e "show status like 'wsrep_cluster%';" mysql: [warning] using a password on the command line interface can be insecure. +----------------------------+--------------------------------------+ | variable_name | value | +----------------------------+--------------------------------------+ | wsrep_cluster_weight | 3 | | wsrep_cluster_capabilities | | | wsrep_cluster_conf_id | 3 | | wsrep_cluster_size | 3 | | wsrep_cluster_state_uuid | 47f68dce-940c-11ee-85d5-c29e7cbcc6e4 | | wsrep_cluster_status | primary | +----------------------------+--------------------------------------+
节点下线
pxc 集群允许动态下线节点,但需要注意的是节点的启动命令和关闭命令必须一致,如以引导模式启动的第一个节点必须
以引导模式来进行关闭:
[root@localhost ~]# systemctl stop mysql@bootstrap.service
其他节点则可以按照正常方式关闭:
[root@localhost ~]# systemctl stop mysql
到此这篇关于mysql8.0使用pxc实现高可用的示例(rocky8.0环境)的文章就介绍到这了,更多相关mysql8.0 pxc高可用内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论