MHA(Master High Availability) 作者
数据库HA架构 一主带三从,高可用架构采用开源MHA+半同步复制semi replication MHA管理多组集群
生产数据库HA架构 目前为一主带三从,高可用架构采用开源MHA+半同步复制semi replication,参数为: sync_binlog = 1 innodb_flush_log_at_trx_commit = 1 innodb_support_xa = 1 (事务的两阶段提交) 和MMM架构主要区别是:数据补齐功能。当原主库连接不上,监控管理机会试图scp主库的binlog,把没有同步复制完成的那一部分差异数据补齐。
恢复步骤: 1、识别最新的Slave, 并试图从死掉的Master 上scp那一部分差异的 binlog执行完, 并提升为新的Master; 4、最后再scp死掉的Master上那一部分差异的binlog,并执行完。至此数据全部恢复一致。 2、等待最老的Slave把中继日志relay-log执行完; 3、从最新的Slave上scp那一部分差异的中继日志relay-log,并执行完;
如何识别最新的Slave?
MHA架构注意事项: 1、防止网络抖动误切换,造成数据不一致,其实现原理为:投票机制,当监控管理机无法ping通和无法连接MySQL主库,会试图从监控备机上去ping和连接MySQL主库,只有双方都连接失败,才认定MySQL主库宕机。假如有一方可以连接MySQL主库,都不会切换。 参数:secondary_check_script=/usr/local/bin/masterha_secondary_check \ -s 192.168.111.76 -s 192.168.111.79 --user=root --master_host=QCZJ-dbm \ --master_ip=192.168.111.77 --master_port=3306 由于masterha_secondary_check脚本写死了端口,所以要手工修改ssh端口: $ssh_user = "root" unless ($ssh_user); $ssh_port = 62222 unless ($ssh_port); $master_port = 3306 unless ($master_port);
MHA架构注意事项: 2、VIP没有采用keepalived,就是怕网络抖动问题。 修改的以下两个脚本,自带VIP: master_ip_failover_script=/usr/local/bin/master_ip_failover master_ip_online_change_script=/usr/local/bin/master_ip_online_change ------------------------------------------------------------------------------------------------------------------------------- # Hardcode stuff now until the next MHA release passes SSH info in here MHA::ManagerUtil::exec_ssh_cmd( $new_master_ip, '62222', "ip addr add 192.168.111.83/32 dev em2;arping -q -c 2 -U -I em2 192.168.111.83", undef );
MHA架构注意事项: 3、新浪DBA刘江之前问了我一个问题,mha依赖ssh,ssh有时会出现连接慢或者不通的情况,你们怎么解决 ? 答:设置一下ssh连接超时时间(ssh timeout):
MHA架构注意事项: 4、死掉的原Master如何与提升为新的Master建立同步复制关系? 答:# grep -i 'change' manager.log Sat Sep 5 12:50:34 2015 - [info] All other slaves should start replication from here. Statement should be: CHANGE MASTER TO MASTER_HOST='QCZJ-dbm or 192.168.111.77', MASTER_PORT=3308, MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=326, MASTER_USER='repl', MASTER_PASSWORD='xxx'; Sat Sep 5 12:50:35 2015 - [info] Executed CHANGE MASTER. 5、MHA结合半同步复制semi replication注意些什么? 答:我们是金融公司,数据不丢失是第一位的。开启半同步复制势必会影响性能,所以我们针对这种情况,将DB服务器通过VLAN划分为一个独立网段,与应用是隔离的,保障有一个良好的网络环境。 此外,由于MHA是基于ssh公私钥认证,有些公司禁止ssh互通,怕被黑客入侵,然后可以跳到其他DB服务器里,所以将DB与应用隔离,是必要的。
MHA架构安装: 1、官网安装文档 https://code.google.com/p/mysql-master-ha/wiki/Installation RHEL/CentOS 6安装步骤: # MHA安装包(MHA管理节点、MASTER、SLAVE均安装) yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager 如果你没有找到rpm包,要安装一下epel源 rpm -ivh epel-release-6-8.noarch.rpm #在管理节点,安装MHA管理和客户端安装包 tar zxvf mha4mysql-node-0.56.tar.gz cd mha4mysql-node perl Makefile.PL make make install
MHA架构安装: ------------------------------------ tar zxvf mha4mysql-manager-0.56.tar.gz cd mha4mysql-manager perl Makefile.PL make make install #在master和slave节点,安装MHA客户端安装包 tar zxvf mha4mysql-node-0.56.tar.gz cd mha4mysql-node # 公私钥认证,打通SSH无密码(管理节点、master和slave均执行如下) ssh-keygen ssh-copy-id '-p 22 root@192.168.17.128' ssh-copy-id '-p 22 root@192.168.17.129' ssh-copy-id '-p 22 root@192.168.17.130' ssh-copy-id '-p 22 root@192.168.17.131'
MHA架构安装: ------------------------------------ MHA 重点参数详解 1、如果你的环境是链式复制架构,比如A-B-C,那么设置candidate_mast=1 如果不是,设置candidate_mast=0 2、在默认情况下,当一个slave同步延迟超过100M relay log, MHA在做故障切换时不会选择这个slave做为新的master,因为恢复需要经过很长时间。 当设置了check_repl_delay = 0, MHA将忽略被选择的slave上的同步延迟。 这个选项在设置了candidate_master = 1特声明的期望这台机器成为master的情况下特别有用。 3、在默认情况下,不会在slave存在故障的情况下(SQL Thread已经停止出错)的情况下进行Master的故障切换。 当设置了ignore_fail = 1时,MHA会在所有的机器有问题的时间也会进行故障切换。