PXC 集群安装详细教程

PXC 集群安装详细教程

一、安装前准备

(一)关闭防火墙和 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。

欢迎关注公众号《小周的数据库进阶之路》,更多精彩知识和干货尽在其中。

相关推荐

手机输入法自动弹出困扰?揭秘Android输入法智能优化与解决之道
美国超速罚单多少钱?
bt365登录

美国超速罚单多少钱?

📅 10-26 👁️ 3538
白浩谈虎牙主播停播:挑战与机遇并存
bt365登录

白浩谈虎牙主播停播:挑战与机遇并存

📅 09-23 👁️ 9764