前期准备
有A、B和C三个主机,A、B和C如果开启firewalld防火墙,需要开启mysql端口:3306 以及 PXC通信端口:4444、4567和4568。
firewall-cmd --permanent --add-port={{port}}/tcp
firewall-cmd --reload
从链接中找到Percona XtraDB Cluster并选择下载全部包:Software Downloads - Percona
从链接中下载qpress,centos7选择el7,centos8则选择el8。qpress-11-1.el7.x86_64.rpm
通过rz或者文件传输将下载的所有文件上传至centos服务器,解压PXC下载包并且本地进行安装(所有rpm文件在同一文件夹)。
tar -xvf Percona-XtraDB-Cluster-8.0.21-r248-el7-x86_64-bundle.tar
yum localinstall *.rpm
自定义挂载目录,SSD硬盘的路径为/ssd,则创建mysql存储路径并赋予mysql用户权限。
sudo mkdir -p /ssd/lib/mysql && sudo mkdir -p /ssd/logs
sudo chown -R mysql:mysql /ssd/lib/mysql && sudo chown -R mysql:mysql /ssd/logs
PXC三节点部署
在主机A上:
- 修改/etc/my.cnf文件,修改如下:
# Template my.cnf for PXC # Edit to your requirements. [client] socket=/ssd/lib/mysql/mysql.sock [mysqld] server-id=1 datadir=/ssd/lib/mysql socket=/ssd/lib/mysql/mysql.sock mysqlx_socket=/ssd/lib/mysql/mysqlx.sock pid-file=/ssd/lib/mysql/mysql.pid port = 3306 user = mysql default_storage_engine = InnoDB bind_address = 0.0.0.0 skip_name_resolve = 1 max_allowed_packet = 128M character_set_server = utf8mb4 collation-server = utf8mb4_general_ci init_connect='SET NAMES utf8mb4' max_connections = 10000 max_connect_errors = 100000 interactive_timeout = 2000 wait_timeout = 2000 net_read_timeout = 60 lock_wait_timeout = 300 ########log settings######## log_error = /ssd/logs/mysqld.log slow_query_log = 1 long_query_time = 3 slow_query_log_file = slow.log log_queries_not_using_indexes = 1 ########binlog settings######## # log-bin format, if change it, something wrong when starting sencondary pxc node log-bin = mysql-bin sync_binlog = 1 binlog_cache_size = 32M max_binlog_cache_size = 512M max_binlog_size = 1G binlog_format = ROW binlog_expire_logs_seconds=604800 ######## wsrep ############### #wsrep_provider=/usr/lib64/galera4/libgalera_smm.so #wsrep_cluster_address = gcomm://{{A.IP}},{{B.IP}},{{C.IP}} #wsrep_cluster_name = mysql-PXC8.0 #wsrep_sst_method = xtrabackup-v2 #wsrep_node_address = {{A.IP}} #wsrep_node_name = pxc-mysql01 #wsrep_slave_threads = 16 #pxc_strict_mode = ENFORCING #innodb_autoinc_lock_mode = 2 #pxc_strict_mode=ENFORCING
- 启动mysql,通过mysql日志查看第一次启动产生的临时密码,在修改密码后退出。
systemctl start mysql cat /var/log/mysqld.log | grep 'password' mysql -u root -p #登录mysql ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; # 修改密码 CREATE USER 'root'@'%' IDENTIFIED BY '123456'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'; # 创建远程root用户(如需要) systemctl stop mysql
- 将my.cnf中的wsrep内容全部解除注释,并启动PXC集群的第一个节点。
systemctl start mysql@bootstrap.service
- 可通过如下命令实时监控PXC集群的状态。
cat /ssd/logs/mysqld.log systemctl status mysql@bootstrap.service
- 拷贝第一个mysql生成的全部认证文件到本地,位于mysql存储路径下。
sz /ssd/lib/mysql/*.pem
主机B和C:
- 同主机A,修改/etc/my.cnf文件,必须确保不同pxc节点的server-id,wsrep_node_address和wsrep_node_name不同。
- 同主机A,启动mysql,启动后停止mysql即可。
- 将第一个mysql的认证文件拷贝至本机的mysql存储路径,并更改文件权限(PXC8.0的集群认证机制)。
cd /ssd/lib/mysql && rz -bye sudo chown -R mysql:mysql *.pem
- 将my.cnf中的wsrep内容全部解除注释后,通过mysql启动后续PXC节点。
systemctl start mysql
验证:在任一PXC节点登录mysql,查看wsrep节点信息。
show status like 'wsrep_cluster%';
从图中可以看到,集群中节点的个数为3,当前PXC集群的uuid已展示,其状态为Primary可用。
PXC节点故障恢复:
- 如果PXC集群中仍有任意存活的节点,无论是哪台机器的PXC节点停止了,都通过如下mysql启动命令来恢复。
systemctl start mysql
- 如果PXC集群中的节点全部停止了,查看每一台主机的/ssd/lib/mysql/grastate.dat,寻找其中的safe_to_bootstrap为1的主机(即最后一个启动的节点);如果不存在,则通过最大的seqno来选择,将最大的seqno的主机的grastate.dat中的safe_to_bootstrap修改为1。将符合条件的作为PXC的第一个节点启动,其余主机后续删除grastate.dat文件并通过mysql启动命令进行启动。
systemctl start mysql@bootstrap.service