一、安装前准备
(一)关闭防火墙和 SELinux
关闭 iptables
PXC 环境使用的端口包括:mysql 实例端口 3306、pxc cluster 相互通讯端口 4567、用于 SST(State Snapshot Transfer)传送的端口 4444、用于 IST(Incremental State Transfer)传送的端口 4568。为避免端口访问问题,建议关闭 iptables。执行以下命令关闭 iptables:
chkconfig iptables offservice iptables stop
处理 SELinux
编辑/etc/sysconfig/selinux文件,将SELINUX的值设为disabled。修改完成后,重启系统即可使设置生效。如果不想重启系统,可以使用setenforce 0命令使设置立即生效。
(二)配置/etc/hosts文件
确保/etc/hosts文件中正确配置了所有节点的主机名和 IP 地址映射,这对于节点之间的通信非常重要。
二、安装 PXC 相关软件包
(一)检查是否已安装 Percona
在每个节点上执行以下命令,检查是否已经安装过 Percona:
rpm -qa |grep Percona
(二)安装 repository 包和 epel 源
切换到/usr/local目录:
cd /usr/local安装 epel - release - 6 - 8.noarch.rpm:
yum localinstall epel - release - 6 - 8.noarch.rpm
如果没有安装这个包,通过yum安装socat和libev时会提示找不到包(No package socat available.和No package libev available)。可以通过rpm -ivh安装依赖包,然后再用yum localinstall安装本地rpm包来解决依赖问题。
(三)安装 perl 组件
执行以下yum命令安装xtrabackup需要的perl组件:
yum install perl - DBD - MySQL perl - DBI perl - Time - HiRes
使用yum安装可以自动处理依赖关系,并且会为了满足依赖而更新相关包,所以建议使用yum来安装perl组件。
(四)安装 socat 和 libev
执行以下yum命令安装socat和libev:
yum install socat libev
在安装过程中,可能会安装一些依赖项,比如创建mysql组和用户(groupadd mysql,useradd -g mysql -M -s /sbin/nologin mysql)。
(五)安装 Percona XtraDB 集群包
在每个节点上依次执行以下rpm安装命令:
rpm -ivh Percona - XtraDB - Cluster - client - 57 - 5.7.19 - 29.22.3.el6.x86_64.rpmrpm -ivh Percona - XtraDB - Cluster - shared - 57 - 5.7.19 - 29.22.3.el6.x86_64.rpmrpm -ivh percona - xtrabackup - 24 - 2.4.8 - 1.el6.x86_64.rpmrpm -ivh Percona - XtraDB - Cluster - server - 57 - 5.7.19 - 29.22.3.el6.x86_64.rpmrpm -ivh Percona - XtraDB - Cluster - 57 - 5.7.19 - 29.22.3.el6.x86_64.rpm
或者使用yum安装:
yum install Percona - XtraDB - Cluster - 57
如果在执行yum install时遇到Another app is currently holding the yum lock; waiting for it to exit...的提示,可以稍等片刻再尝试安装。也可以通过ps -ef | grep yum命令找到占用yum锁的进程并kill掉。
安装完成后,在所有节点上取消mysql的自启动:
chkconfig --level 345 mysql off
三、初始化 MySQL
(一)清理并重新创建 MySQL 数据目录
执行以下命令:
rm -rf /var/lib/mysqlmkdir -p /var/lib/mysqlchown -R mysql.mysql /var/lib/mysql
(二)初始化 MySQL
执行以下命令:
/usr/sbin/mysqld --initialize - insecure --user = mysql
四、配置第一个节点
(一)设置 root 密码并授权
启动mysql服务:
service mysql start以root用户登录mysql:
mysql -uroot在mysql中设置root密码:
set password = password('123456');授予root用户远程访问权限:
grant all privileges on *.* to root@'%' identified by '123456';刷新权限:
flush privileges;
(二)修改/etc/my.cnf文件
停止mysql服务:
service mysql stop使用文本编辑器(如gedit)打开/etc/my.cnf文件进行编辑,添加或修改相关配置参数(后面会详细介绍my.cnf的配置内容)。
五、初始化 PXC 集群(在第一个节点上操作)
(一)启动第一个节点并初始化集群
使用以下命令启动第一个节点并初始化 PXC 集群:
/etc/init.d/mysql bootstrap - pxc或者service mysql bootstrap - pxc
(二)创建 SST 用户并授权
登录mysql:
mysql -uroot -p123456创建用于 SST 的数据库用户:
CREATE USER'sstuser'@'localhost' IDENTIFIED BY 'passw0rd';授予相关权限:
GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO'sstuser'@'localhost';刷新权限:
FLUSH PRIVILEGES;
六、查看集群状态
在mysql中执行以下命令查看集群状态:
mysql>show global status like 'wsrep%';
重点关注以下参数:
wsrep_cluster_size:显示集群中的节点数量。wsrep_incoming_addresses:列出集群中节点的地址信息。wsrep_local_state_comment:显示节点的本地状态,如Synced表示节点已同步。
也可以根据需要设置wsrep_max_ws_rows和wsrep_max_size等参数。
七、添加其他节点到集群
(一)修改其他节点的/etc/my.cnf文件
在要添加的其他节点上,修改/etc/my.cnf文件,配置wsrep_cluster_address等相关参数(参考第一个节点的my.cnf配置)。
(二)启动其他节点加入集群
配置好my.cnf后,启动节点,它会自动加入集群并开始同步数据。注意不要在同一时间加入多个节点,以免造成网络流量压力过大。默认情况下,Percona XtraDB 集群使用 Percona XtraBackup 来传输状态快照(SST)。需要设置wsrep_sst_method参数为xtrabackup - v2,并使用wsrep_sst_auth变量提供 SST 用户认证(使用在第一个节点创建的 SST 用户)。
例如,启动第二个节点:
/etc/init.d/mysql start
启动后,可以在该节点上查看用户和集群状态,通过show status like 'wsrep%';命令可以看到wsrep_cluster_size参数的变化,表明节点已成功加入集群。同样的方法启动第三个节点等其他节点。
八、测试 PXC 集群功能
(一)模拟节点宕机
在节点(如192.168.1.2节点node2)上执行以下命令模拟宕机:
service mysql stop
(二)查看集群状态
在任意其他节点上登录mysql并执行以下命令查看集群状态:
mysql> show global status like 'wsrep%';
可以发现wsrep_incoming_addresses中宕机节点的地址(如10.10.75.102:3306)不存在,并且wsrep_cluster_size显示的可用节点数量减少。
(三)在其他节点插入新数据
在剩余的正常节点(如192.168.1.1节点node1)上登录mysql并插入新数据。
(四)恢复节点并检查数据
恢复宕机节点(192.168.1.1节点node2)的mysql服务(service mysql start),然后再次查看集群状态:
mysql> show global status like 'wsrep%';
可以发现wsrep_incoming_addresses中该节点的地址重新出现,并且wsrep_cluster_size恢复正常,表示节点恢复后数据同步正常。
九、PXC 集群维护
(一)关闭集群
在所有节点上执行以下命令关闭集群:
/etc/init.d/mysql stop
(二)重启节点
第一个节点重启:
使用/etc/init.d/mysql restart - bootstrap命令重启第一个节点。其他节点重启:
使用/etc/init.d/mysql restart命令重启其他节点。
(三)集群关闭后重新启动
第一个启动的节点执行/etc/init.d/mysql bootstrap - pxc命令。其他节点执行/etc/init.d/mysql start命令。
(四)新节点加入
新节点只需安装好Percona - XtraDB - Cluster,并且在my.cnf添加 PXC 配置节(参考已有节点的配置)即可。
(五)其他注意事项
脑裂问题
如果集群节点数为 3,其中一个节点死掉,还有 2 个节点,若要设置忽略脑裂,可以在mysql中执行以下命令:
SET GLOBAL wsrep_provider_options="pc.ignore_sb=true;pc.ignore_quorum=true";写入操作建议
尽量使用单节点写入,否则更新同一行记录可能会出现问题。表结构变更建议
尽量使用pt - online - schema - change进行表结构变更。数据复制限制
mysql库中全是MyISAM引擎的表不能复制,因为 PXC 只支持Innodb引擎。主键要求
PXC 结构中的每个表必须有主键。写入集大小控制
wsrep_max_ws_rows和wsrep_max_ws_size参数控制写入集大小,wsrep_max_ws_rows没有默认值(默认无限制),wsrep_max_ws_size默认单位字节,建议不要超过 16KB(如设置wsrep_max_ws_rows = 131072,wsrep_max_ws_size = 16000),超过这个大小的事务会被抛弃。
十、PXC 的my.cnf配置示例
以下是my.cnf的配置内容:
!includedir /etc/my.cnf.d/
!includedir /etc/percona-xtradb-cluster.conf.d/
[mysqld]
# Path to Galera library
wsrep_provider=/usr/lib64/libgalera_smm.so
# Cluster connection URL contains the IPs of node#1, node#2 and node#3----所有节点的ip
#wsrep_cluster_address=gcomm://
wsrep_cluster_address=gcomm://192.168.1.1,192.168.1.2,192.168.1.3
# In order for Galera to work correctly binlog format should be ROW
binlog_format=ROW
# Node #1 address----本机ip
wsrep_node_address=192.168.1.1
# SST method----节点间同步的方式
wsrep_sst_method=xtrabackup-v2
# Cluster name
wsrep_cluster_name=pxc_cluster
# Authentication for SST method----来做节点间数据同步的账号密码
#sst模式需要的用户名和密码
wsrep_sst_auth="sstuser:passw0rd"
wsrep_provider_options="gcache.size=128M"
# 开启的复制线程数,建议cpu核数*2
wsrep_slave_threads=2
wsrep_max_ws_rows=131072
wsrep_max_ws_size=16000
# This changes how InnoDB autoincrement locks are managed and is a requirement for Galera
pxc_strict_mode=ENFORCING
innodb_autoinc_lock_mode=2
default_storage_engine=InnoDB
skip-external-locking
skip_name_resolve=1
user=mysql
datadir=/var/lib/mysql
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
log-error=/var/lib/mysql/error.log
max_connections=500
innodb_buffer_pool_size=128M
log-bin=mysql-bin
expire-logs-days=10
在配置my.cnf时,根据实际节点的 IP 地址等信息进行修改,确保集群正常运行。
十一、总结
大家如果需要使用PXC集群,可以去percona官方下载,现在MySQL已基本都升级到8.0版本,推荐大家使用MySQL8.0.37。
欢迎关注公众号《小周的数据库进阶之路》,更多精彩知识和干货尽在其中。