zoukankan      html  css  js  c++  java
  • 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:

  • 相关阅读:
    Get distinct count of rows in the DataSet
    单引号双引号的html转义符
    PETS Public English Test System
    Code 39 basics (39条形码原理)
    Index was outside the bounds of the array ,LocalReport.Render
    Thread was being aborted Errors
    Reportviewer Error: ASP.NET session has expired
    ReportDataSource 值不在预期的范围内
    .NET/FCL 2.0在Serialization方面的增强
    Perl像C一样强大,像awk、sed等脚本描述语言一样方便。
  • 原文地址:https://www.cnblogs.com/hbxZJ/p/11022470.html
Copyright © 2011-2022 走看看