PXC集群
PXC集群
NOTE: By now there are a some good alternatives to MySQL-MMM. Maybe you want to check out Galera Cluster which is part of MariaDB Galera Cluster.
Galera Cluster是一个用于innodb的同步多主复制插件,它不同于传统的MySQL复制,同时也解决了很多多主写入时的冲突问题,用户不需要知道其在哪台服务器上写入以及在哪台服务器上读取。
一个应用程序可以在集群中的每个节点写入,事务(基于行的)在一个节点提交也会同步复制到其他节点,通过基于认证(certification-based)的复制来实现实时同步。
基于认证的复制使用组通信(Group Communication) 和事务排序技术( transaction ordering techniques)来实现数据库的同步复制。
一个Galera集群至少需要3个节点,同时推荐采用奇数个几点,原因为集群内需要大多数节点达到一致。
Galera Cluster插件是一个开源的,由Codership公司开发的标准MySQL数据库补丁,它有三个分支:
MySQL Galera Cluster by Codership
Percona XtraDB Cluster by Percona
MariaDB Galera Cluster (5.5 and 10.0) by MariaDB
Galera和主从复制的区别
主从复制实现
Slave IO thread,从库创建该线程来连接主库要求主库发送二进制文件,然后写入到从库的relay log中。
Slave SQL thread,从库创建该线程来读取Slave IO thread 写入的relay log,然后在从从库中执行他们。
MySQL复制是标准MySQL的一部分,原生是异步的,我们可以通过半同步来实现实时同步功能,MySQL复制也可以实现多主复制,不过期维护非常复杂并且容易出错,并不推荐。
Galera Cluster实现
PXC集群特点
Percona XtraDB集群是一个针对MySQL的数据库集群解决方案。它确保高可用性,防止宕机和数据丢失,并为不断增长的环境提供线性可伸缩性。
PXC集群优点
PXC集群缺点
PXC集群限制
PXC安装部署
环境说明
主机名 | IP地址 | PXC版本 |
mysqldb01 | 192.168.56.131 | PXC 5.7 |
mysqldb02 | 192.168.56.132 | PXC 5.7 |
mysqldb03 | 192.168.56.133 | PXC 5.7 |
注意:避免创建只有两个或偶数个节点的PXC集群,因为这有可能会导致脑裂。
安装 PXC 5.7
(1)、在配置PXC集群之前,必须在所有的MySQL主机上安装Percona-XtraDB-Cluster-57软件。
[root@mysqldb01 tmp]# wget https://repo.percona.com/yum/percona-release-latest.noarch.rpm [root@mysqldb01 tmp]# rpm -ihv percona-release-latest.noarch.rpm [root@mysqldb01 tmp]# rpm -ihv socat-1.7.2.4-1.el6.rf.x86_64.rpm [root@mysqldb01 tmp]# yum install -y Percona-XtraDB-Cluster-57 |
yum安装时会提示UDFs功能,根据需要可以在mysql启动后执行提供的语句:
Percona XtraDB Cluster is distributed with several useful UDFs from Percona Toolkit. Run the following commands to create these functions: mysql -e "CREATE FUNCTION fnv1a_64 RETURNS INTEGER SONAME 'libfnv1a_udf.so'" mysql -e "CREATE FUNCTION fnv_64 RETURNS INTEGER SONAME 'libfnv_udf.so'" mysql -e "CREATE FUNCTION murmur_hash RETURNS INTEGER SONAME 'libmurmur_udf.so'" See http://www.percona.com/doc/percona-server/5.7/management/udf_percona_toolkit.html for more details |
# service mysql start # grep 'temporary password' /var/log/mysqld.log # mysql -u root -p mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'welcome1'; # service mysql stop |
注:所有的MySQL服务器都需要执行以上步骤完成PXC5.7的软件安装与配置工作。
配置PXC集群
# vi /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so wsrep_cluster_name=pxc-cluster wsrep_cluster_address=gcomm://192.168.56.131,192.168.56.132,192.168.56.133 wsrep_node_name=pxc1 wsrep_node_address=192.168.56.131 wsrep_sst_method=xtrabackup-v2 wsrep_sst_auth=sstuser:passw0rd pxc_strict_mode=ENFORCING binlog_format=ROW default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 |
注意:其他的MySQL节点也修改wsrep.cnf文件,wsrep_node_name和wsrep_node_address变量值必须修改。
启动集群的第1个节点
在配置完所有PXC节点之后,通过引导第一个节点来初始化集群,初始节点应该包含您希望复制到其他节点的所有数据,如果其他的节点上有数据,则初始化后其他节点上以前存在的数据会被清空。
[root@mysqldb01 ~]# /etc/init.d/mysql bootstrap-pxc |
mysql@mysqldb01> show status like 'wsrep%'; |
在启动集群的第1个节点上创建一个用于SST的数据库用户,该用户在wsrep.cnf配置文件中需要使用。
mysql> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'passw0rd'; mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost'; mysql> FLUSH PRIVILEGES; |
向集群中添加其他节点
当集群中的第1个节点启动完毕后,可以将其他的节点加入PXC集群中,命令如下所示。
[root@mysqldb02 ~]# /etc/init.d/mysql start mysql@mysqldb02> show status like 'wsrep%'; |
查看集群状态
查看PXC集群的状态,可以在每个MySQL集群节点上运行如下命令:
show global status like 'wsrep%'; |
下面对wsrep_cluster_status字段进行说明:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署