mysql搭建MHA高可用解析

1. MHA能做什么?

主库宕机处理过程
1. 监控节点 (通过配置文件获取所有节点信息)
   系统,网络,SSH连接性
   主从状态,重点是主库

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能连接,从库对比主库GTID 或者position号,立即将二进制日志保存至各个从节点并且应用(save_binary_logs )
(2) 当SSH不能连接, 对比从库之间的relaylog的差异(apply_diff_relay_logs) 
4. Failover
将备选主进行身份切换,对外提供服务
其余从库和新主库确认新的主从关系
5. 应用透明(VIP)
6. 故障切换通知(send_reprt)
7. 二次数据补偿(binlog_server)
8. 自愈自治(待开发...)
9. 故障提醒

1.1 MHA高可用本次配置的节点说明

1. mha要求数据库节点至少是1主2从的独立实例, 不支持单机多实例的场景
2. mha的管理节点, 最好是使用一台独立的机器, 本次把管理节点和其中一台从库放到的同一台机器上.
3. 本次配置使用的节点说明:
  192.168.0.106的3320端口mysql作为主库;
  192.168.0.105的3321端口mysql作为从库之一;
  192.168.0.103的3322端口mysql作为从库之一,管理节点也在这台机器上;
4. mha提供有两个端, 一个是管理端(103机器上), 一个是node端(node端必须在所有节点上安装).

2. MHA软件的构成

mha由管理软件和node软件两部分组成, 说明如下:

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

Node工具包主要包括以下几个工具:
这些工具通常由MHA Manager的脚本触发,无需人为操作
save_binary_logs            保存和复制master的二进制日志 
apply_diff_relay_logs       识别差异的中继日志事件并将其差异的事件应用于其他的
purge_relay_logs            清除中继日志(不会阻塞SQL线程)

 2.1 MHA的failover如何实现?

流程: 启动 - 故障 - 转移 - 业务恢复
1. mha通过masterha_manager脚本启动mha的功能.
2. 在manager启动之前, 会自从检查ssh互信(masterha_check_ssh)和主从状态(masterha_check_repl)
3. mha_manager通过masterha_master_monitor脚本来探测主库是否存活,探测频率受配置文件中的ping_interval的值来控制, 以秒为单位. 4. masterha_master_monitor探测主库3次无心跳则判定为主库宕机. 5. 进行选主的过程:   算法一:
  读取配置文件中是否有强制选主的参数,参数如下
  candidate_master=1  # 写在[servern]块中, 按照权重指定备选主. manager有默认检测数据差异的机制,如差异过大,即使配置次参数也不生效,而会通过其它算法选主
  check_repl_delay=0  # 写在[servern]块中, 强制选为主, 即不论数据差异有多大.
  算法二:
  自动判断所有从库的日志量, 将最接近主库数据的从库作为主库.如果所有从库的日志量都一样则按照算法三选主.
  算法三:
  按照配置文件先后顺序进行选主
6. 数据补偿:
  判断主库ssh的连通性.
  情况一: ssh能连时,调用save_binary_logs脚本,立即保存缺失部分的binlog到各个从节点来恢复.
  情况二: ssh不能连,调用apply_diff_relay_logs脚本,计算各从库relaylog的差异,只能把所有从库中数据最多的从库数据同步给所有从库.
6.1提供额外的数据补偿的能力
  该功能需要单独配置,默认是没有的,

7. 解除从库身份

8. 剩余从库和新主库构建主从

9. 应用透明配置(vip,装有manager软件的节点)
  该功能需要单独配置, 默认是没有的, 详见2.2中的配置说明
10.故障提醒(邮件提醒)
  该功能需要单独配置, 默认是没有的, 详见2.3中的配置说明
66.

 2.2 应用透明配置(vip, 装有manager软件的节点)

2.2.1修改master_ip_failover脚本, 该脚本度娘上多的是

  vim /usr/local/bin/master_ip_failover  # 脚本位置自定义即可;修改以下4行即可,虚拟机中是eth0,服务器不一定是
    my $vip = '192.168.0.100/24'; # 要把哪个地址设为vip地址,是对外提供服务的网段地址.24位子网掩码
    my $key = "1";
    my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";
    my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";

注意脚本内有中文需转换下,并给该脚本执行权限:
[root@db03 ~]# dos2unix /usr/local/bin/master_ip_failover
dos2unix: converting file /usr/local/bin/master_ip_failover to Unix format ...
[root@db03 ~]# chmod +x /usr/local/bin/master_ip_failover

 

2.2.2更改manager配置文件:

vi /etc/mha/app1.cnf
在server default块下添加:
master_ip_failover_script=/usr/local/bin/master_ip_failover

2.2.3主库上手工生成第一个vip地址(106那台机器上)

手工在主库上绑定vip,注意一定要和配置文件中的ethN一致,我的是eth0:1(1是key指定的值)
ifconfig eth0:1 192.168.0.100/24
如果报错eth0:1: ERROR while getting interface flags: No such device
则查看下机器的网卡信息,改成对应的就可以. 修改后master_ip_failover脚本中也需要修改.

2.2.4重启mha,并查看状态

masterha_stop --conf=/etc/mha/app1.cnf
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &
masterha_check_status --conf=/etc/mha/app1.cnf
命令的作用参考后面的安装mha部分.

 2.3 配置邮件提醒:

2.3.1 需要send_report脚本, 上官网找或度娘, 一大片.

vim /usr/local/bin/send_report

my $smtp='smtp.126.com'; my $mail_from='[email protected]'; my $mail_user='[email protected]'; my $mail_pass='xxxx'; #my $mail_to=['[email protected]','[email protected]']; my $mail_to='[email protected]';

添加执行权限, chmod +x send_report

2.3.2 修改配置文件

vi /etc/mha/app1.cnf
在server default块下添加:
report_script=/usr/local/bin/send_report

2.3.3 重启并查看状态

masterha_stop --conf=/etc/mha/app1.cnf
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &
masterha_check_status --conf=/etc/mha/app1.cnf
命令的作用参考后面的安装mha部分.

未完待续..........

猜你喜欢

转载自www.cnblogs.com/quzq/p/12951899.html