mysql8.0使用PXC实现高可用

1. 核心特性

  • 多主复制(Multi-Master Replication)

    • 所有节点都是可读写的,数据可以在任意节点上写入,并实时同步到其他节点。

    • 避免了传统主从复制中单点写入的限制。

  • 同步复制(Synchronous Replication)

    • 数据在写入时会被同步到所有节点,确保数据一致性。

    • 适合对数据一致性要求高的场景。

  • 高可用性(High Availability)

    • 如果某个节点故障,其他节点可以继续提供服务,无需手动切换。

    • 自动故障检测和恢复。

  • 数据一致性(Data Consistency)

    • 使用 Galera 的认证机制,确保所有节点的数据一致。

    • 支持真正的 ACID 事务。

  • 线性扩展(Linear Scalability)

    • 可以通过增加节点来扩展读写能力。

    • 适合高并发、大数据量的场景。

  • 兼容 MySQL

    • 完全兼容 MySQL 协议和工具,可以无缝替换 MySQL。

    • 支持 MySQL 的应用程序和驱动程序。


2. 架构和工作原理

  • PXC 基于 Galera Cluster 技术,采用 Write-Set Replication (WSREP) 协议实现数据同步。

  • 当一个节点接收到写操作时,它会将写操作广播到其他节点。

  • 其他节点验证并应用这些写操作,确保所有节点的数据一致。

  • 事务只有在大多数节点确认后才会提交。


3. 适用场景

  • 高可用性需求:如金融、电商等对数据库可用性要求高的场景。

  • 多写需求:需要多个节点同时写入数据的场景。

  • 数据一致性要求高:如分布式系统中需要强一致性的场景。

  • MySQL 替代方案:需要更高性能和可靠性的 MySQL 替代方案。


4. 优缺点

优点
  • 高可用性和数据一致性。

  • 多主架构,支持多点写入。

  • 兼容 MySQL,易于迁移。

  • 自动故障恢复,减少运维成本。

缺点
  • 同步复制可能导致写性能下降,尤其是在网络延迟较高的情况下。

  • 集群规模较大时,节点间的通信开销会增加。

  • 需要较高的硬件和网络配置。


5. 与 MHA、MGR 的对比

  • PXC vs MHA(Master High Availability)

    • MHA 是主从架构,PXC 是多主架构。

    • MHA 需要手动或半自动故障切换,PXC 是自动故障切换。

  • PXC vs MGR(MySQL Group Replication)

    • MGR 是 MySQL 官方提供的集群方案,PXC 是基于 Galera 的第三方方案。

    • MGR 支持单主和多主模式,PXC 是多主模式。

    • PXC 的成熟度和社区支持较好,MGR 是 MySQL 官方推荐方案。


6. 安装与部署

配置主机清单:在3台机器上编辑 /etc/hosts文件

删除 MariaDB 程序包:

yum -y remove mari*

下载 PXC 安装包

安装配置教程可以参考这个官方文档哦

安装 PXC 里面集成了 Percona Server 数据库,所以不需要安装数据库。

yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
percona-release enable-only pxc-80 release
percona-release enable tools release
yum install percona-xtradb-cluster

初始化数据库

应为使用的是8.0版本,部分配置需要在初始化数据库前进行配置,如忽略表名大小写等

root@CentOS7-1 \~\]# vim /etc/my.cnf ... \[mysqld

server-id=11 #每台mysql的id不能相同

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 #二进制日志过期时间为604800秒,等于7天

注意:pxc2和pxc3只需要server-id设置为12和13即可。

然后我们启动 mysql,修改密码。(三台机器都要)

systemctl start mysqld

tmp_pass=(awk '/temporary password/ {print NF}' /var/log/mysqld.log)

mysql -uroot -p${tmp_pass}

mysql> alter user root@localhost identified by '123456';

Query OK, 0 rows affected (0.01 sec)

授权用户

mysql -uroot -p123456

mysql> CREATE USER 'admin'@'%' IDENTIFIED WITH mysql_native_password BY 'Abc_123456';

Query OK, 0 rows affected (0.00 sec)

mysql> GRANT all privileges ON *.* TO 'admin'@'%';

Query OK, 0 rows affected (0.00 sec)

创建集群

所有节点停止mysqld服务:

systemctl stop mysqld

配置文件

root@pxc1 \~\]# vim /etc/my.cnf ... ######## 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.121.111,192.168.121.112,192.168.121.113 # 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.150.111 # 当前节点的IP # Cluster name wsrep_cluster_name=pxc-cluster # PXC集群的名称 #If wsrep_node_name is not specified, then system hostname will be used wsrep_node_name=pxc1 # 当前节点的名称 #pxc_strict_mode allowed values: DISABLED,PERMISSIVE,ENFORCING,MASTER pxc_strict_mode=ENFORCING # SST method wsrep_sst_method=xtrabackup-v2 # 同步方法

默认情况下,系统变量pxc_encrypt_cluster_traffic设置为ON,意味着所有集群流量都使用证书进行保护,所以要求所有节点使用相同的密钥和证书文件,systemctl start mysql启动初始话过程中生成默认密钥和证书文件,并将其放在datadir数据目录下,这就造成故障节点和其他节点密钥和证书文件不一致,因此需要将故障节点的*.pem全部删除,并将某一个正常节点数据目录下的 *.pem文件全部复制到故障节点。

  1. scp /var/lib/mysql/*.pem pxc2:/var/lib/mysql/

  2. scp /var/lib/mysql/*.pem pxc3:/var/lib/mysql/

启动集群:

第一个节点需要以引导模式启动

systemctl start [email protected]

第二和第三个节点上正常启动数据库服务

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

  2. systemctl start mysql

查看集群信息

mysql> show status like 'wsrep%';

可通过视图performance_schema.pxc_cluster_view、dstat工具监控同步状态。

mysql> select * from performance_schema.pxc_cluster_view;

查看PXC集群状态信息

mysql> show status like 'wsrep_cluster%';

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

节点下线

PXC 集群允许动态下线节点,但需要注意的是节点的启动命令和关闭命令必须一致。以引导模式启动的第一个节点必须以引导模式来进行关闭:

systemctl stop [email protected]

其他节点则可以按照正常方式关闭:

systemctl stop mysql

相关推荐
肆仙.1 天前
单表、多表查询练习
android·adb
小李小李快乐不已1 天前
3.1.3 MYSQL连接池
数据库·mysql·adb
冲浪中台1 天前
MySQL 的 JSON 路径格式
mysql·adb·json
Free飝Fly1 天前
Android R adb remount 调用流程
android·adb·remount
测试笔记(自看)2 天前
Flask接口开发--引入mysql
mysql·adb·flask
xccoding2 天前
【FW】ADB指令分类速查清单
数据库·windows·adb
lq_ioi_pl3 天前
数据库约束、常见语句等
android·adb
luo_guibin3 天前
mysql5.7无法启动报错处理无日志
mysql·adb
SQ_yyds3 天前
数据库第二周作业
android·数据库·adb
Free飝Fly3 天前
Android adb自身调试log开关
android·adb·log