• MYSQL高可用集群架构-MHA架构


    简介

    MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。

    该软件由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。

    在MHA自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据的不丢失,但这并不总是可行的。例如,如果主服务器硬件故障或无法通过ssh访问,MHA没法保存二进制日志,只进行故障转移而丢失了最新的数据。使用MySQL 5.5的半同步复制,可以大大降低数据丢失的风险。MHA可以与半同步复制结合起来。如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性。

    目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库,因为至少需要三台服务器,出于机器成本的考虑,淘宝也在该基础上进行了改造,目前淘宝TMHA已经支持一主一从。MHA 适合任何存储引擎, 只要能主从复制的存储引擎它都支持,不限于支持事物的 innodb 引擎。

    官方介绍:https://code.google.com/p/mysql-master-ha/

     下图展示如何通过MHA Manager管理多组主从复制

    可以将MHA工作原理总结为如下:

    (1)从宕机崩溃的master保存二进制日志事件(binlog events);
    (2)识别含有最新更新的slave;
    (3)应用差异的中继日志(relay log)到其他的slave;
    (4)应用从master保存的二进制日志事件(binlog events);
    (5)提升一个slave为新的master;
    (6)使其他的slave连接新的master进行复制;

    MHA软件由两部分组成,Manager工具包和Node工具包,具体的说明如下。

    Manager工具包主要包括以下几个工具:

    masterha_check_ssh              检查MHA的SSH配置状况
    masterha_check_repl             检查MySQL复制状况
    masterha_manger                 启动MHA
    masterha_check_status           检测当前MHA运行状态
    masterha_master_monitor         检测master是否宕机
    masterha_master_switch          控制故障转移(自动或者手动)
    masterha_conf_host              添加或删除配置的server信息

    Node工具包(这些工具通常由MHA Manager的脚本触发,无需人为操作)主要包括以下几个工具:

    save_binary_logs                保存和复制master的二进制日志
    apply_diff_relay_logs           识别差异的中继日志事件并将其差异的事件应用于其他的slave
    filter_mysqlbinlog              去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
    purge_relay_logs                清除中继日志(不会阻塞SQL线程)

    注意:

    为了尽可能的减少主库硬件损坏宕机造成的数据丢失,因此在配置MHA的同时建议配置成MySQL 5.5的半同步复制。关于半同步复制原理各位自己进行查阅。(不是必须)

    1.部署MHA

    接下来部署MHA,具体的搭建环境如下(所有操作系统均为CentOS7.4 64bit):

    IP地址

    主机名

    角色

    软件

    192.168.1.30

    linzi

    manager

    mha4mysql-manager、mha4mysql-node

    192.168.1.25

    KVM1

    master

    mha4mysql-node

    192.168.1.26

    KVM2

    Slave1,Candicate master

    mha4mysql-node

    192.168.1.27

    KVM3

    Slave2

    mha4mysql-node

    其中master对外提供写服务,备选Candicate master(实际为slave1)提供读服务,slave2也提供读服务,一旦master宕机,将会把备选master提升为新的master,slave指向新的master

    (1)在所有节点安装MHA node所需的perl模块(DBD:mysql),安装脚本如下: 

    先要安装epel源,

    Centos6安装源:rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

    Centos7安装源: rpm -ivh http://www.rpmfind.net/linux/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm

    以下设置为CentOS6操作:

    [epel]
    name=Extra Packages for Enterprise Linux 6 - $basearch
    baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch #将注释的#去掉
    #mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch#前面加上#

    yum clean all yum list

    使用yum安装全部依赖

    yum -y install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager --skip-broken

    (2)上传MHA相关包,在所有的节点安装mha-node:

  • 相关阅读:
    Linux sudo权限提升漏洞(CVE-2021-3156)复现
    CVE-2021-3129-Laravel Debug mode 远程代码执行漏洞
    maven项目在jenkins上以配置文件及Git分支作为参数执行构建
    jenkins 配置参数执行
    maven+java+tesng 遇到的坑
    IDEA的使用及初始化
    python发邮件之邮件内放入表格
    maven作用
    java自动化学习笔记
    在电脑端同时安装Python2,Python3
  • 原文地址:https://www.cnblogs.com/hbxZJ/p/11022470.html
Copyright © 2020-2023  润新知