MySQL PXC 集群运维指南

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL PXC 集群运维指南

一、PXC方案概述

Percona XtraDB Cluster (PXC) 是一个完全开源的 MySQL 数据库集群解决方案,它可确保高可用性,防止停机和数据丢失,并为不断增长的环境提供线性可扩展性。它将 Percona Server 和 Percona XtraBackup 与 Galera 库集成在一起,以实现同步多源复制。

集群由节点组成,其中每个节点包含在节点间同步的相同数据集。推荐的配置是至少有 3 个节点,也可以有 2 个节点,但不建议使用2个节点。每个节点都是一个常规的 MySQL Server 实例。可以将现有的 MySQL Server 实例转换为节点,并使用该节点作为基础运行集群。还可以从集群中分离任何节点并将其用作常规 MySQL 服务器实例。

当执行查询时,它会在节点上本地执行。所有数据都在本地可用,无需远程访问。
没有中央管理。可以在任何时间点解绑任何节点,集群将继续运行而不会丢失任何数据。
PXC是扩展读取工作负载的好解决方案,可横向扩展以实现负荷降低。可以对任何节点进行读取查询。
新近实施的PXC集群版本均为 8.0,Percona XtraDB Cluster 8.0与MySQL Server Community Edition 8.0和Percona Server for MySQL 8.0完全兼容。

如图是3节点的架构,可以看到每个节点都支持读写。

二、PXC基础知识

■ PXC集群使用四个端口
端口 描述
3306 MySQL服务端口
4444 请求全量同步(SST)端口
4567 数据库节点之间的通信端口
4568 请求增量同步(IST)端口
因此如系统启用了防火墙则需开放这些端口,或者关闭防火墙
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=4444/tcp --permanent
firewall-cmd --zone=public --add-port=4567/tcp --permanent
firewall-cmd --zone=public --add-port=4568/tcp --permanent
firewall-cmd --reload

■ 关于SST同步
Different from previous version
The variable wsrep_sst_auth has been removed. Percona XtraDB Cluster 8.0 automatically creates the system user mysql.pxc.internal.session. During SST, the user mysql.pxc.sst.user and the role mysql.pxc.sst.role are created on the donor node.

■ 节点状态定义
OPEN: 节点启动成功
PRIMARY: 节点成功加入集群
JOINER: 与其他节点同步数据
JOINED: 与其他节点同步数据成功
SYNCED: 与集群同步完成,可以对外提供服务
DONER: 接收其他节点的全量数据同步,处于不可用

【wsrep_local_state】当前节点状态,值为4表示正常
共有四个值:
joining:节点正在加入集群
doner: 节点处于为新加入节点提供全量数据时的状态
joined: 当前节点已成功加入集群
synced: 当前节点与集群中各节点是同步状态

【wsrep_cluster_status】集群组成的状态,应为"Primary", 否则说明出现脑裂现象
【wsrep_ready】应为为ON,表示当前节点可以正常提供服务;若为OFF, 则该节点可能发生脑裂或网络问题导致
【wsrep_local_state_uuid】集群中所有节点的该状态值应该是相同的,如果有不同值节点,说明其没有加入集群
【wsrep_cluster_state_uuid】与【wsrep_local_state_uuid】值一致
【wsrep_gcomm_uuid】各个节点的值不同

■ 最常使用的查看命令
show variables like 'wsrep%';
show status like 'wsrep%';

三、PXC节点的配置安装

最靠谱的参考文档,一定是官方文档
https://www.percona.com/doc/percona-xtradb-cluster/8.0/index.html
各类网文水平参差不齐,错误百出,仅供参考

四、PXC节点的上线与下线

■ 查看节点的服务状态
systemctl status mysql
systemctl status mysql@bootstrap
根据以上命令可以确认哪个节点是集群启动的首节点

■ PXC节点的安全下线
节点是怎么启动的,就使用对应的命令去关闭

启动【首节点】命令:
systemctl start mysql@bootstrap
对应关闭命令:
systemctl stop mysql@bootstrap

启动【其他节点】命令:
systemctl start mysql
对应关闭命令:
systemctl stop mysql

■ 如集群中还有正常运行的节点,其他节点只需按普通节点上线即可
systemctl start mysql

■ 如所有PXC节点都是安全下线的,则在启动集群时,需先启动最后下线的节点
systemctl start mysql@bootstrap

■ 某节点能否作为首节点启动,可以通过查看 grastate.dat 文件得知
cat /mysql/pxc/data/grastate.dat
safe_to_bootstrap: 0
说明:safe_to_bootstrap 的值为 0 时不能作为首节点启动,为1时可以作为首节点启动
PXC集群中最后一个下线的节点会将 safe_to_bootstrap 的值改为1,下次启动集群时就需将该节点作为首节点启动
最后一个下线的节点数据是最新的,将其作为首节点启动,然后让其他节点与该节点进行数据同步,这样才能保证集群中的数据是最新的,否则可能导致集群中数据是某个时间点之前的旧数据
safe_to_bootstrap 为 1时,必须使用 systemctl start mysql@bootstrap 的方式启动

■ 如PXC节点都是意外退出的,且不是在同一时间退出的
PXC集群中一半以上的节点因意外宕机而无法访问时,PXC集群就会停止运行
但如果这些PXC节点是以安全下线的方式退出,则不会引发集群自动停止运行的问题,只会缩小集群的规模
只有意外下线一半以上节点时集群才会自动停止,意外下线的情况包括:
宕机、挂起、关机、重启、断电、断网等,就是没有使用相应停止命令安全下线都属意外下线
只要PXC集群中的节点不是同时意外退出的,那么当集群还剩一个节点时,该节点就会自动将grastate.dat文件中的 safe_to_bootstrap 值改为1,所以在重启集群时,也是先启动最后一个退出的节点

■ 如PXC节点都是同时意外退出的,则需要修改grastate.dat文件
当集群所有节点正常运行时,safe_to_bootstrap 值都为 0
当集群中所有节点都是在同一时间因意外情况而退出,此时所有节点的 safe_to_bootstrap 都为 0 ,因为没有一个节点来得及去修改 safe_to_bootstrap 的值。当所有节点的 safe_to_bootstrap 均为 0 时,PXC集群是无法启动的。
在这种情况下我们就只能手动选择一个节点,将 safe_to_bootstrap 修改为 1 ,然后将该节点作为首节点进行启动:
vim grastate.dat
safe_to_bootstrap: 1
systemctl start mysql@bootstrap
接着再依次正常启动其他节点:
systemctl start mysql

五、其他

关于ProxySQL与keepalive的配置与运维,此处暂不赘述。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
3月前
|
人工智能 运维 关系型数据库
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
618 1
|
4月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
5月前
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
11月前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
116 3
|
11月前
|
消息中间件 分布式计算 关系型数据库
大数据-140 - ClickHouse 集群 表引擎详解5 - MergeTree CollapsingMergeTree 与其他数据源 HDFS MySQL
大数据-140 - ClickHouse 集群 表引擎详解5 - MergeTree CollapsingMergeTree 与其他数据源 HDFS MySQL
166 0
|
6月前
|
运维 Kubernetes Cloud Native
云栖实录 | 智能运维:云原生大规模集群GitOps实践
云栖实录 | 智能运维:云原生大规模集群GitOps实践
210 1
|
7月前
|
监控 关系型数据库 MySQL
云数据库:从零到一,构建高可用MySQL集群
在互联网时代,数据成为企业核心资产,传统单机数据库难以满足高并发、高可用需求。云数据库通过弹性扩展、分布式架构等优势解决了这些问题,但也面临数据安全和性能优化挑战。本文介绍了如何从零开始构建高可用MySQL集群,涵盖选择云服务提供商、创建实例、配置高可用架构、数据备份恢复及性能优化等内容,并通过电商平台案例展示了具体应用。
|
8月前
|
运维 Cloud Native 开发工具
智能运维:云原生大规模集群GitOps实践
智能运维:云原生大规模集群GitOps实践,由阿里云运维专家钟炯恩分享。内容涵盖云原生运维挑战、管理实践、GitOps实践及智能运维体系。通过OAM模型和GitOps优化方案,解决大规模集群的发布效率与稳定性问题,推动智能运维工程演进。适用于云原生环境下的高效运维管理。
221 8
|
11月前
|
运维 关系型数据库 MySQL
运维|MySQL 数据库被黑,心力交瘁
前一阵有一个测试用的 MySQL 数据库被黑了,删库勒索的那种,这里记录一下事情经过,给自己也敲个警钟。
144 2
|
11月前
|
SQL 运维 关系型数据库
MySQL 运维 SQL 备忘
MySQL 运维 SQL 备忘录
121 1

推荐镜像

更多