MySQL的高可用方案

我们在考虑MySQL数据库的高可用的架构时,主要要考虑如下几方面:

如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的故障而中断。

用作备份、只读副本等功能的非主节点的数据应该和主节点的数据实时或者最终保持一致。

当业务发生数据库切换时,切换前后的数据库内容应当一致,不会因为数据缺失或者数据不一致而影响业务。

参考链接

基于多节点可扩展性,部署难易程度,功能复杂度和方案成熟性相关考虑,尝试扩展glaera MySQL cluster方案,并在测试环境中搭建尝试。

预计架构如下:

搭建准备

环境选用与生产环境一致的CentOS 7.8,MySQL 5.7版本。

测试环境选用3台相同环境服务器尝试集群。

[root@mysql01 ~]# cat /etc/redhat-release

CentOS Linux release 7.8.2003 (Core)

[root@mysql01 ~]# mysql -V

mysql Ver 14.14 Distrib 5.7.30, for Linux (x86_64) using EditLine wrapper

软件包安装

从glaera官网下载服务器下载系统对应的软件包,由于MySQL需要安装相对应的插件才能启用相应功能,这里直接从官网下载集成了wsrep插件的安装包,并且下载galera软件包备用。

事实上,下载回来的软件包,在安装之前应该对其进行一致性检验,确保下载过程中不会因为网络等原因造成数据包损坏,也确保下载的文件是官方提供的未经第三方更改。

执行 rpm -Uvh mysql-wsrep-* 以安装所有的软件包,或者使用yum安装以解决依赖

另外,推荐安装xtrabackup用于数据同步引擎,因默认的同步使用rsync方案,有案例报告说在数据发生大规模更新或者新节点加入cluster时,使用rsync是灾难性的。

第一次启动配置

首先在编辑/etc/my.cnf完成数据的配置,运行systemctl start mysqld完成数据库的初始化,待首次初始化启动完成后,查看MySQL生成的临时密码,使用mysql_secure_installation完成数据库的安全安装,过程中需交互,重设root密码和设置关闭远程连接等操作。

初始化完成后,执行systemctl stop mysqld安全关闭MySQL,执行glaera MySQL cluster的配置。

glaera MySQL cluster配置

官方文档说明cluster的相关配置存放于/etc/mysql/conf.d/,但是根据测试发现,该路径配置已经较老,实际只需要在/etc/my.cnf内[mysqld]节下添加有关glaera mysql cluster相关配置内容即可。

测试中初步添加如下设置

wsrep_on=ON

wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so

wsrep_cluster_address=gcomm://172.16.13.81,172.16.13.82,172.16.13.83

binlog_format=row

default_storage_ENGINE=MyISAM

innodb_autoinc_lock_mode=2

bind-address=0.0.0.0

# wsrep_sst_method=xtrabackup

wsrep_slave_threads=1

innodb_flush_log_at_trx_commit=0

其中wsrep_cluster_address中包含集群内所有服务器IP数组或者已经启动的单个集群节点IP均可,仅用于当前配置的节点启动时连接的集群节点,连接后可以从任意节点进行数据同步。

更多配置参考:https://galeracluster.com/library/documentation/mysql-wsrep-options.html

配置完成后启动集群

确保配置完成后,使用sudo -u mysql /usr/sbin/mysqld --wsrep-new-cluster启动第一个节点,正常情况下该命令会占用控制台,此时可以另起一个控制台观察启动日志,输出类似于

2020-08-03T10:22:19.543817Z 0 [Note] WSREP: Service thread queue flushed.

2020-08-03T10:22:19.543882Z 0 [Note] WSREP: Assign initial position for certification: 0, protocol version: -1

2020-08-03T10:22:19.543904Z 0 [Note] WSREP: wsrep_sst_grab()

2020-08-03T10:22:19.543908Z 0 [Note] WSREP: Start replication

这样的内容,即表示当前节点的集群已经启动成功,此时可以分发配置到其余各节点,依次启动后续节点,如配置无误,将在启动后自动加入集群。当然,后续节点的配置文件中,需要指定wsrep_cluster_address包含前面已经成功启动的节点。启动后,后续可以在任意节点使用第一节点初始化的账户信息连接数据库,表明数据已经正常同步了。进入数据库后执行show status like 'wsrep_cluster_size';可以查看当前cluster的节点数,并可以使用show status like 'wsrep_%';查看glaera mysql cluster的所有状态信息。

当后续的节点加入cluster后,再cluster中至少有一个节点存活的状态下,其余的节点均可以正常使用systemctl start mysqld命令正常启动节点上的MySQL了。所以此时可以停掉第一个节点手动启动的进程,改用systemd的方式启动服务了。

异常情况下的MySQL启动

如果集群中主节点运行正常,我们只需要正常启动其他节点。所以做关键的一点是在集群全部宕机之后,我们要找到最后一个退出集群,并且数据是最完整的节点。通过启动这个节点,其他节点启动之后与这个节点同步数据才能保证数据库集群的数据不丢失。

找到最后一个停机的节点(seqno 数字最高的节点为下一次启动的主节点,应该首先启动):

# cat /mysql-data/mysql/grastate.dat

# GALERA saved state

version: 2.1

uuid:8736f68d-0af7-11e7-aba5-9a9e6a4d342c

seqno: 15

safe_to_bootstrap: 0

提示: 如果所有的节点都是seqno的值都为-1,而且我们知道哪一个节点的优先级高,那么我们可以手动指定此节点为引导节点,修改grastate.dat文件的safe_to_bootstrap =1,然后启动此节点。

至于VIP部分

关于对外访问的VIP部分,由于glaera mysql cluster的所有节点都可以作为主节点进行读写,在读写操作数据量不是特别大的场景,可以直接使用keepalived的方案对操作引流到某一台设备进行处理,当节点故障时进行IP漂移实现不停机的故障转移。如果读写场景本身较大,可以使用haproxy进行四层负载均衡,实现更大规模的数据承载,也可以结合keepalived和haproxy实施,彻底消除单点故障,实现MySQL的高可用。

gelera mysql_基于Galera的MySQL高可用集群相关推荐

  1. nfs mysql_heatbeat-gui实现基于nfs的mysql高可用集群

    一.简述HA高可用集群 高可用集群就是当集群中的一个节点发生各种软硬件及人为故障时,集群中的其他节点能够自动接管故障节点的资源并向外提供服务.以实现减少业务中断时间,为用户提供更可靠,更高效的服务. ...

  2. 基于keepalived搭建MySQL高可用集群

    MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Cluster 比较常用的是keepalived+双主,MHA和 ...

  3. 企业主流MySQL高可用集群

    选型 10款常见MySQL高可用方案选型解读 MYSQL(高可用方案) 目前最流行的是:主从复制.基于Galera的方案 企业主流MySQL高可用集群 了解 MySQL 集群之前,先看看单节点数据库的 ...

  4. linux集群管理平台,基于Linux平台的高可用集群管理系统的研究与实现

    摘要: 集群管理系统的高可用性是指其能够连续地对外提供服务,本文针对集群系统的高可用性,以开源的集群搭建和管理软件KUSU为基础,以集群管理节点的双机热备份技术理论为支撑,以实现集群系统的帮障检测与业 ...

  5. heartbeat+DRBD+mysql高可用集群实战

      heartbeat+DRBD+mysql高可用集群实战 四台主机 主机名                 IP地址             用途 dbm128                    ...

  6. mysql1.7(mysql优化,mysql-mmm软件介绍,mysql高可用集群。)

    一,mysql优化. 1. 1mysql服务工作过程 mysql服务由8个功能组件组成: 1,管理工具  把软件包安装后,提供的命令. #mv /etc/my.cnf   /etc/my.cnf.ba ...

  7. 企业中MySQL高可用集群架构三部曲之MM+keepalived

    各位老铁们,老张与大家又见面了.看到各位在博客里面给我的留言和访问量的情况,我很是欣慰,也谢谢大家对我的认可.我写这些博客,就是想把自己对于MySQL数据库的一些看法和自己平时的实战经验分享出来,我们 ...

  8. 双vip的MySQL高可用集群

    目录 一.mysql集群的搭建 IP地址规划: 使用ansible给从服务器安装mysql 1.使用master与所有从服务器建立SSH免密通道,然后添加到mysqld组到hosts文件里面 2.使用 ...

  9. MYSQL高可用集群架构——MHA架构

    MHA高可用集群 文章目录 一.MHA 简介: 二.部署 MHA: 第一步:三台主从服务器安装 mysql 第二步:修改 mysql 的主配置文件:/etc/my.cnf ,注意三台服务器的 serv ...

最新文章

  1. SOTA排行榜大变天!MIT研究十个CV测试集,平均错误率超3.4%
  2. AWS Storage Gateway 分类
  3. HDU2049 不容易系列之(4)——考新郎
  4. sqlite第三方类库FMDB的使用
  5. TKinter的常用组件
  6. 1.0 添加WEB API项目并按注释生成文档(多项目结构)
  7. GSM/GPRS模块 AT指令集C语言编程——基于有方M660+和MSP430单片机
  8. 基于 HanLP 的 ES 中文分词插件
  9. linux搭建压力测试,安装GTKStressTesting:对Linux系统进行压力测试变得更加容易
  10. python @修饰符_数据结构与算法之8——抽象数据类型与python类
  11. 【点阵液晶编程连载四】MenuGUI 菜单应用
  12. java 限流熔断_SpringCloud-Alibaba-Sentinel服务降级,热点限流,服务熔断
  13. Swif基本语法以及与OC比较三
  14. Navicat 注册机破解问题
  15. Dual Thrust 策略
  16. 微信公众号小程序与服务号和订阅号有什么区别
  17. 图像检索代码python_python-图像检索
  18. python常见函数抽样_Python中从列表中随机抽样函数的语法
  19. 高职高考数学可以用计算机吗,高职高考数学的考察范围有哪些,有没有什么解题技巧?...
  20. android 火车购票功能,基于Android的火车票售票系统的设计与实现.doc

热门文章

  1. TaskWarrior windows版制作
  2. 新闻网站项目django--注册页
  3. android ViewPager 不带滑动效果切换item
  4. Log4j写入数据库详解
  5. 最短JS判断是否为IE6(IE的写法)
  6. jQuery中增加新元素后没法响应原有的事件
  7. 近看图灵碗 (8. 我就是上帝) (上)
  8. 安装APK失败,错误代码:INSTALL_FAILED_INVALID_APK 解决方案
  9. 在等于操作中无法解决“SQL_Latin1_General_CP1_CI_AS”和“Latin1_General_CI_AS”之间的排序规则冲突
  10. 什么是Unwind segues,您如何使用它们?