zoukankan      html  css  js  c++  java
  • 2.Mysql之高可用架构MHA(02)

    1.前言

      上一小节主要介绍了MHA的大概的工作原理,但是具体细节上还没有补充,这张就给它补充一下

    2.MHA架构

      首先我们要知道的是MHA的目的是在于维持Mysql replication中master的高可用性,其最大的特点是可以修复多个slave之间的差异日志,最终使所有Slave保持数据一致,然后从中选择一个充当新的Master,并将其它Slave指向它。

      比如说:当master出现故障时,可以通过对比slave之间I/O thread 读取主库binlog的position号,选取最接近的slave做为备选主库(备胎)。其它的从库可以通过与备选主库对比生成差异的中继日志。在备选主库上应用从原来master保存的binlog,同时将备选主库提升为master。最后在其它slave上应用相应的差异中继日志并开始从新的master开始复制。

    3.架构工作原理(重点)

      当主节点宕机后会发生如下过程:

      1.根据配置文件获取所有节点的信息

      2.选主阶段(重点):   

       (1) 如果判断从库(position或者GTID),数据有差异,最接近于Master的slave,成为备选主  

       (2) 如果判断从库(position或者GTID),数据一致,按照配置文件顺序,选主.     

       (3) 如果设定有权重(candidate_master=1),按照权重强制指定备选主.   

          1. 默认情况下如果一个slave落后master 100M的relay logs的话,即使有权重,也会失效.  

          2. 如果check_repl_delay=0的话,即使落后很多日志,也强制选择其为备选主

      3.数据补偿阶段   

          1.当SSH能连接, 调用save_binary_logs脚本(备选库对比主库GTID 或者position号),立即保存差异部分的binlog到备选节点上并应用

          2.当SSH不能连接, 调用apply_diff_relay_logs脚本,计算从库的relaylog的差异,生成差异的中继日志到给个slave节点上去应用

      4.Failover阶段    

          1.将备选主进行身份切换,对外提供服务

          2.其余从库和新主库确认新的主从关系

      5. 应用透明(VIP) 

        前提:需要我们要准备一个master_ip_failover脚本,这个脚本来源于mha4mysql-manager-0.56.tar.gz 软件包,cd samples/scripts/ 这个目录下,我们需要将它复制到/usr/local/bin目录下,这个等会会和配置文件是一一对应的

        看看这个脚本(修改后的部分)    

    my $vip = '172.17.94.100/20';     ###这个ip地址一定是可以访问的,在虚拟机中可以在相应的网段中找出一个没有使用的即可,但是如果是ECS服务器则不能使用VIP,就不能搭建透明代理
    my $key = '0';
    my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";
    my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";

      6. 故障切换通知(send_reprt) 

      7. 二次数据补偿(binlog_server)  

      8. 自愈自治(待开发...)

    4.配置binlog-server备份服务器

      作用:主机宕机,也许会造成主库binlog复制不及时而导致数据丢失的情况出现,因此配置binlog-server进行时时同步备份,是一种不要的安全手段

     1.修改配置文件: 

     vi /etc/mha/app1.cnf
    
          和上面配置一样,但是需要在末尾添加上如下几行
    
          [binlog1]
    
          no_master=1
    
          hostname=主库上面的ip地址
    
          master_binlog_dir=/data/3307/binlog/        ###binlog存放位置优先级比全局的高

     2.拉取主库上面的binlog日志到一个数据库中存放

    • mkidr  -p /data/mysql/binlog      ###创建存放目录
    • mysqlbinlog -R --host=主库的ip地址     -P端口号     --user=mha --password=123  --raw --stop-never mysql-bin.000001 &    ##拉取主库的binlog日志

     3.其中MHA后台进程

       nohup masterha_manager --conf=/etc/mha/mha1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/mha1/manager.log 2>&1 &

         

  • 相关阅读:
    Longest Common Substring($LCS$)
    for in 和 for of的区别详解
    reduce的使用
    终于搞懂了vue 的 render 函数(一) -_-|||
    【Vue高级知识】细谈Vue 中三要素(响应式+模板+render函数)
    MVVM 和 VUE三要素:响应式、模板引擎、渲染
    node.js中的url.parse方法使用说明
    Chrome的cookie放在哪里了,Cookie/Session机制详解
    什么是PWA
    几张图让你看懂WebAssembly
  • 原文地址:https://www.cnblogs.com/zmc60/p/15167026.html
Copyright © 2011-2022 走看看