写点什么

云原生小课堂|高性能、高可用、可扩展的 MySQL 集群如何组建?

作者:York
  • 2022 年 4 月 07 日
  • 本文字数:2609 字

    阅读完需:约 9 分钟

云原生小课堂|高性能、高可用、可扩展的MySQL集群如何组建?

mysql 高可用-PXC 集群(安装和特性)

PXC 是基于 Galera 的面向 OLTP 的多主同步复制插件,mysql 自带的主从集群方案(replication)异步复制无法保证主从复制的完整一致。

OLAP 强调数据分析和数据挖掘,比较适合 MyISAM,OLTP 强调事务一致性和增删改查,比较适合 InnoDB,而 Galara 只支持 InnoDB,PXC 主要用于解决 MySQL 集群中数据同步强一致性的问题,PXC 是 MySQL 集群方案中公认的优选方案之一。

集群的特点

多主架构:真正的多点读写的集群,没有主从节点之分,在任何节点读写数据,都是最新的

同步复制:事务在所有集群节点同时提交,任何一个节点失败都算作事务失败,这样不同节点之间数据同步,没有延迟,在数据库挂掉之后,数据不会丢失

强一致性:所有节点的数据保持一致,数据不仅在本地写入,还要同步到所有节点才成功(这种情况下当 pxc 节点过多时,每个节点都要跟其他节点进行数据同步,节点越多同步关系越复杂,同步效率越慢)

并发复制:从节点 APPLY 数据时,支持并行执行,更好的性能

故障切换:在出现数据库故障时,因支持多点写入,切换容易

热插拔:在服务期间,如果数据库挂了,只要监控程序发现的够快,不可服务时间就会非常少。在节点故障期间,节点本身对集群的影响非常小

自动节点克隆:在新增节点,或者停机维护时,增量数据或者基础数据不需要人工手动备份提供,集群会自动拉取在线节点数据,最终集群会变为一致

对应用透明:集群的维护,对应用程序是透明的

PXC 集群的缺点

1、只能对 InnoDB 写入的数据进行同步,就算在其他引擎写数据,也无法完成同步。

2、新节点加入需要全量拷贝数据,有时会导致数据同步的提供者无法提供读写,只有等待整个拷贝完成

3、集群的性能取决于集群中性能最差的节点的性能(全局校验过程)

4、所有表都要有主键

5、不支持 LOCK TABLE 等显式锁操作

6、PXC 集群节点越多,数据同步的速度就越慢

安装 pxc 集群

删除 MariaDB 程序包

yum -y remove mari*
复制代码


开放防火墙端口

firewall-cmd --zone=public --add-port=3306/tcp --permanentfirewall-cmd --zone=public --add-port=4444/tcp --permanentfirewall-cmd --zone=public --add-port=4567/tcp --permanentfirewall-cmd --zone=public --add-port=4568/tcp --permanent
复制代码


3306(mysql 服务端口):对外提供 mysql 的服务端口 4567(集群通讯端口):集群中 mysql 节点间通信的端口 4444 (SST(State Snaphot Transfer)端口):请求全量同步端口 4568(IST(Incremental State Transfer)端口):请求增量同步的端口

关闭 SELINUX

vi /etc/selinux/config# 把SELINUX属性值设置成disabledreboot
复制代码


在所有节点下载并安装 pxc

下载安装包

https://www.percona.com/downloads/Percona-XtraDB-Cluster-57/LATEST/



下载以上安装包后额外需要下载 qpress-11-1.el7.x86_64 包。

进入 RPM 文件目录,执行安装命令

yum localinstall *.rpm
复制代码


修改配置文件

vi /etc/my.cnf#里面有两个文件目录 my.cnf.d 和 percona-xtradb-cluster.conf.dcd /etc/percona-xtradb-cluster.conf.dvi mysqld.cnf #配置mysql常用信息#加入如下信息#数据库字符集character_set_server = utf8#允许远程访问的IP地址bind-address = 0.0.0.0#跳过DNS解析skip-name-resolve
复制代码


初始化所有节点的 mysql

#启动mysqlsystemctl start mysqld#查看MySQL初始密码cat /var/log/mysqld.log | grep "A temporary password"#修改MySQL密码mysql_secure_installation#创建远程管理员账户mysql -u root -pCREATE USER 'admin'@'%' IDENTIFIED BY 'Abc_123456';GRANT all privileges ON *.* TO 'admin'@'%';FLUSH PRIVILEGES;exit
复制代码


停止所有节点的 mysql 并构建数据库集群

systemctl stop mysqld#修改配置信息vi wsrep.cnf #配置了pxc集群信息#需要增加节点的配置信息,三个节点都要操作,server-id,wsrep_node_name,wsrep_node_address这三个参数是不能重复的值server-id=1 #PXC集群中MySQL实例的唯一ID,不能重复,必须是数字wsrep_provider=/usr/lib64/galera3/libgalera_smm.sowsrep_cluster_name=pxc-cluster #PXC集群的名称 自定义wsrep_cluster_address=gcomm://1.1.1.1,1.1.1.2,1.1.1.3 #这写PXC所有集群的ip地址,逗号分割wsrep_node_name=pxc1 #当前节点的名称 自定义wsrep_node_address=1.1.1.1 #当前节点的IPwsrep_sst_method=xtrabackup-v2 #同步方法(mysqldump、rsync、xtrabackup)wsrep_sst_auth= admin:Abc_123456 #同步使用的帐户pxc_strict_mode=ENFORCING #开启同步严厉模式,不允许数据同步不一致binlog_format=ROW #基于ROW复制(安全可靠)default_storage_engine=InnoDB  #默认引擎,只支持这个innodb_autoinc_lock_mode=2 #主键自增长不锁表
#启动第一个节点systemctl start mysql@bootstrap.service #这是第一个节点的操作指令#systemctl stop mysql@bootstrap.service#systemctl restart mysql@bootstrap.service#启动其他节点service mysql start #其他节点会根据配置信息自动添加到第一个节点,合成一个集群#这是其他节点的操作指令service mysql stop service mysql restart
复制代码


验证

在任何一个节点的 mysql 执行以下 sql 可以查看集群状态:

show status like 'wsrep_cluster%'
复制代码


ADS 试用咨询

众所周知,PXC 是 MySQL 实现高可用架构的优选方案,而 MySQL 是基于 Kubernetes 数据服务管理的最佳实践,灵雀云数据服务平台 Alauda Data Service(简称:ADS)采用 MySQL 等主流数据组件,完整覆盖全生命周期管理,作为 Alauda 全栈云的重要一环,与灵雀云云原生全栈私有云平台 ACP 完美集成,提供集部署、使用、运维一体的稳定可靠的中间件 PaaS 服务,快速实现一键部署、便捷管理、自动化运维,让开发运维人员可以更关注于业务本身。如您想深入体验 ADS,点击此处即可报名


关于【云原生小课堂】


【云原生小课堂】是由灵雀云、Kube-OVN 社区、云原生技术社区联合开设的公益性技术分享类专题,将以丰富详实的精品内容和灵活多样的呈现形式,持续为您分享云原生前沿技术,带您了解更多云原生实践干货。

在数字化转型的背景下,云原生已经成为企业创新发展的核心驱动力。作为国内最早将 Kubernetes 产品化的厂商之一,灵雀云从出生便携带“云原生基因”,致力于通过革命性的技术帮助企业完成数字化转型,我们期待着云原生给这个世界带来更多改变。

关注我们,学习更多云原生知识,一起让改变发生。

发布于: 刚刚阅读数: 2
用户头像

York

关注

云原生的美男子YORK 2021.01.07 加入

云原生技术社区为云原生技术实践联盟(CNBPA)旗下技术社区,专注泛云原生全栈云前沿技术和落地实践的布道。分享容器、Kubernetes、DevOps、Service Mesh、Serverless、数据库、中间件等技术干货。

评论

发布
暂无评论
云原生小课堂|高性能、高可用、可扩展的MySQL集群如何组建?_云原生_York_InfoQ写作平台