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 &

     

原文地址:https://www.cnblogs.com/zmc60/p/15167026.html