欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > PXC实现MySQL高可用

PXC实现MySQL高可用

2025/2/14 0:16:06 来源:https://blog.csdn.net/a_2373179473/article/details/145557750  浏览:    关键词:PXC实现MySQL高可用

一、PXC 简介

1.1.优缺点

优点:

  • 同步复制,实时同步,保证数据一致性

  • 多主复制,任意节点可写操作

  • 并行复制,从服务器并行事件

  • 自动配置,节点不再异步复制

  • 故障切换,多点写入易进行故障切换

  • 自动节点克隆,新增节点自动拉取数据

缺点:

  • 复制局限,只支持innodb引擎

  • 写入效率局限,取决于最弱的一台节点

  • 所有表都要有主键

  • 不支持 LOCK TABLE 显示锁

  • 锁冲突,死锁问题较多

  • 节点越多,同步越慢,两两同步

1.2.PXC 常用端口

  • 3306:数据库对外服务的端口号

  • 4444:请求 SST(全量传输) 的端口

  • 4567:组成员之间进行沟通的一个端口号

  • 4568:用于传输 IST(增量传输)

二、配置

Percona XtraDB Cluster (简称 PXC)集群是基于 Galera 2.x library,事务型应用下的通用的多主同步复制插件,主要用于解决强一致性问题,使得各个节点之间的数据保持实时同步以及实现多节点同时读写。提高了数据库的可靠性,也可以实现读写分离,是 MySQL 关系型数据库中大家公认的集群优选方案之一。

2.1.环境准备

  • 准备好下面三台服务器,本文搭建 PXC 集群基于 Rocky8.x:

IP端口角色
192.168.67.1603306pxc1
192.168.67.1613306pxc2
192.168.67.1623306pxc3

2.2.hosts 解析

  • 配置 hosts 解析(每台都需配置)

cat >> /etc/hosts << EOF
192.168.67.160 pxc1
192.168.67.161 pxc2
192.168.67.162 pxc3
EOF

2.3.安装 PXC

  • 在线安装 PXC,参考官网(每台都需安装)

  • 不用下载 MySQL,PXC 会自带MySQL

Install Percona XtraDB Cluster on Red Hat Enterprise Linux and CentOS - Percona XtraDB Clustericon-default.png?t=O83Ahttps://docs.percona.com/percona-xtradb-cluster/8.0/yum.html#install-from-percona-software-repository

yum module disable mysql
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
percona-release setup pxc-80
yum install percona-xtradb-cluster

 

2.4.修改my.cnf配置文件

  • 修改配置文件(每台都需做)

  • server-id,节点名称,节点IP,每个主机根据自身修改

vim /etc/my.cnf
# Template my.cnf for PXC
# Edit to your requirements.
[client]
socket=/var/lib/mysql/mysql.sock
​
[mysqld]
server-id=160     # server-id可以是本机IP(唯一)
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
​
# Binary log expiration period is 604800 seconds, which equals 7 days
binlog_expire_logs_seconds=604800
​
######## wsrep ###############
# Path to Galera library
wsrep_provider=/usr/lib64/galera4/libgalera_smm.so
​
# Cluster connection URL contains IPs of nodes
#If no IP is found, this implies that a new cluster needs to be created,
#in order to do that you need to bootstrap this node
wsrep_cluster_address=gcomm://192.168.67.160,192.168.67.161,192.168.67.162   # PXC 集群所有IP
​
# In order for Galera to work correctly binlog format should be ROW
binlog_format=ROW
​
# Slave thread to use
wsrep_slave_threads=8
​
wsrep_log_conflicts
​
# This changes how InnoDB autoincrement locks are managed and is a requirement for Galera
innodb_autoinc_lock_mode=2
​
# Node IP address
wsrep_node_address=192.168.67.160  # 当前节点IP
# Cluster name
wsrep_cluster_name=pxc-cluster   # 集群名称
​
#If wsrep_node_name is not specified,  then system hostname will be used
wsrep_node_name=pxc-1   # 当前节点名称
​
#pxc_strict_mode allowed values: DISABLED,PERMISSIVE,ENFORCING,MASTER
pxc_strict_mode=ENFORCING
​
# SST method
wsrep_sst_method=xtrabackup-v2

 

2.5.统一证书

  • 复制 pxc1 的证书到 pxc2 和 pxc3 中(只需 pxc1 做)

scp /var/lib/mysql/*.pem pxc2:/var/lib/mysql/
scp /var/lib/mysql/*.pem pxc3:/var/lib/mysql/
  • 修改 pxc2 和 pxc3 证书的权限(只需 pxc2 和 pxc3 做)

chown -R mysql.mysql /var/lib/mysql/

2.6.启动服务

  • 第一个节点需要以引导模式启动(只需 pxc1 做)

systemctl start mysql@bootstrap.service
  • 第二和第三个节点上正常启动数据库服务(pxc2 和 pxc3 做)

systemctl start mysql

2.7.修改MySQL密码

  • (每台都需做)
mysql_passwd=$(awk '/password/ {print $NF}' /var/log/mysqld.log)
mysql -uroot -p${mysql_passwd}
mysql> alter user root@localhost identified by 'Mysql@123';

2.8.验证状态

mysql> select * from performance_schema.pxc_cluster_view;

show status where Variable_name in ('wsrep_cluster_size','wsrep_cluster_status','wsrep_connected','wsrep_ready') ;

2.9.验证复制

  • 在 pxc2 上创建一个新数据库

CREATE DATABASE percona;
  • 在 pxc3 切换到新创建的数据库(注意:建表必须有主键)

USE percona;
CREATE TABLE example (node_id INT PRIMARY KEY, node_name VARCHAR(30));
  • 在 pxc1 上插入数据

INSERT INTO percona.example VALUES (1, 'percona1');
  • 在 pxc2 上查询表

SELECT * FROM percona.example;

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com