zoukankan      html  css  js  c++  java
  • 【赵强老师】MySQL高可用架构:MHA

    MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能。MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的master 节点,在此期间,MHA 会通过于其它从节点获取额外信息来避免一致性方面的问题。MHA 还提供了 master 节点的在线切换功能,即按需切换 master/slave 节点。
    MHA 是由日本人 yoshinorim(原就职于DeNA现就职于FaceBook)开发的比较成熟的 MySQL 高可用方案。MHA 能够在30秒内实现故障切换,并能在故障切换中,最大可能的保证数据一致性。目前淘宝也正在开发相似产品 TMHA, 目前已支持一主一从。

    一、MHA的组成

    (一)MHA中的角色

    MHA 服务有两种角色, MHA Manager(管理节点)和 MHA Node(数据节点):

    • MHA Manager:通常单独部署在一台独立机器上管理多个 master/slave 集群(组),每个master/slave 集群称作一个application,用来管理统筹整个集群。
    • MHA Node:运行在每台 MySQL 服务器上(master/slave/manager),它通过监控具备解析和清理 logs 功能的脚本来加快故障转移。主要是接收管理节点所发出指令的代理,代理需要运行在每一个 mysql 节点上。简单讲node就是用来收集从节点服务器上所生成的bin-log。对比打算提升为新的主节点之上的从节点的是否拥有并完成操作,如果没有发给新主节点在本地应用后提升为主节点。

    (二)MHA提供的工具

    MHA会提供诸多工具程序,其常见的如下所示:

    • Manager节点

    • Node节点(这些工具通常由MHA Manager的脚本触发,无需人为操作)

    二、MHA的工作原理

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

    三、部署MHA

    (一)准备实验环境

    • 三台主机:mysql111、mysql112、mysql113
    • 操作系统:CentOS
    • 配置主机名(/etc/hosts)
    • 配置免密码登录
    • 每台主机安装MySQL

    (二)搭建主从环境

    • 每台MySQL开启binlog,设置server-id
    vi /etc/my.cnf
    log-bin=mysql-binlog
    server-id=1           (注意:每台MySQL设置不同的server-id)
    
    show variables like '%log_bin%';
    
    • 在所有机器上,创建主从复制的账号
    create user 'repl'@'192.168.79.%' identified by 'Welcome_1';
    grant replication slave on *.* to 'repl'@'192.168.79.%';
    flush privileges;
    
    • 在所有机器上,创建管理账号
    create user 'myadmin'@'192.168.79.%' identified by 'Welcome_1';
    grant all privileges on *.* to 'myadmin'@'192.168.79.%';
    flush privileges;
    
    • 在主库和从库上,启用GTID
    set @@GLOBAL.ENFORCE_GTID_CONSISTENCY = ON;
    set @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
    set @@GLOBAL.GTID_MODE = ON_PERMISSIVE;
    set @@GLOBAL.GTID_MODE = ON;
    

     参数说明:

    GTID是MySQL 5.6的新特性,其全称是Global Transaction Identifier,可简化MySQL的主从切换以及Failover。GTID用于在binlog中唯一标识一个事务。当事务提交时,MySQL Server在写binlog的时候,会先写一个特殊的Binlog Event,类型为GTID_Event,指定下一个事务的GTID,然后再写事务的Binlog。主从同步时GTID_Event和事务的Binlog都会传递到从库,从库在执行的时候也是用同样的GTID写binlog,这样主从同步以后,就可通过GTID确定从库同步到的位置了。也就是说,无论是级联情况,还是一主多从情况,都可以通过GTID自动找点儿,而无需像之前那样通过File_name和File_position找点儿了。

    • 在从库上分别配置主从复制命令并开启主从同步
    change master to master_host='mysql111',master_user='repl',
    master_password='Welcome_1',master_auto_position=1;
    
    start slave;
    
    • 在从库上查看主从复制的状态
    show slave statusG;
    

    • 测试主从复制

    (三)安装MHA

    • 所有节点安装node软件依赖包和node软件
    yum -y install perl-DBD-MySQL 
    rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
    
    • 在mysql111上安装安装manager软件依赖包
    yum install -y perl-Config-Tiny 
    yum install -y epel-release 
    yum install -y perl-Log-Dispatch 
    yum install -y perl-Parallel-ForkManager 
    yum install -y perl-Time-HiRes
    
    • 在mysql111上安装安装manager软件
    rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
    

    (四)创建Manager的配置文件

    #创建配置文件目录、日志目录
    mkdir -p /etc/mha
    mkdir -p /var/log/mha/log
    
    #编辑mha配置文件 vi /etc/mha/mha.cnf
    [server default]
    manager_log=/var/log/mha/log/manager
    manager_workdir=/var/log/mha/log
    master_binlog_dir=/var/lib/mysql
    user=myadmin
    password=Welcome_1
    ping_interval=2
    repl_user=repl
    repl_password=Welcome_1
    ssh_user=root
    [server1]
    hostname=mysql111
    port=3306
    [server2]
    hostname=mysql112
    port=3306
    [server3]
    hostname=mysql113
    port=3306
    

    (五)检查状态,并开启MHA

    • 检查互信
    masterha_check_ssh --conf=/etc/mha/mha.cnf
    

    • 检查主从复制状态
    masterha_check_repl --conf=/etc/mha/mha.cnf
    

    • 开启MHA-manager
    nohup masterha_manager --conf=/etc/mha/mha.cnf > /var/log/mha/log/manager.log < /dev/null 2>&1 &
    
    • 查看MHA状态
    masterha_check_status --conf=/etc/mha/mha.cnf
    

    • 测试HA高可用的自动切换
    在mysql111上,执行shutdown操作
    mysqladmin -uroot -pWelcome_1 shutdown
    
    MHA会自动进行主从切换。切换完成后,MHA进程会自动停止运行。
    
    在mysql112和mysql113上观察,执行下面的语句:
    show slave statusG;
    
     

  • 相关阅读:
    bzoj 3339 莫队
    E. XOR and Favorite Number
    HDU 2222 AC自动机
    SPOJ 694 不同子串个数
    Codeforces Round #428 (Div. 2)
    HDU 6103
    《贪婪的动态规划》
    《浅谈图论模型的建立与应用》
    bzoj 2194 快速傅里叶之二
    java中高级面试题整理及参考答案
  • 原文地址:https://www.cnblogs.com/collen7788/p/13365812.html
Copyright © 2011-2022 走看看