mysql 5.7 MHA集群故障切换

服务器信息:

manager: 192.168.28.184
master:
172.16.2.185
node:
172.16.2.186 172.16.0.171 192.168.12.20

主从搭建命令
stop slave;
change master to master_host='172.16.2.185',master_user='repuser',
master_password='repuser123',master_log_file='wm_binlog.000002',master_log_pos=154;

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

Manager节点:

masterha_check_ssh:MHA 依赖的 ssh 环境监测工具;

masterha_check_repl:MYSQL 复制环境检测工具;

masterga_manager:MHA 服务主程序;

masterha_check_status:MHA 运行状态探测工具;

masterha_master_monitor:MYSQL master 节点可用性监测工具;

masterha_master_swith:master:节点切换工具;

masterha_conf_host:添加或删除配置的节点;

masterha_stop:关闭 MHA 服务的工具。

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

save_binary_logs:保存和复制 master 的二进制日志;

apply_diff_relay_logs:识别差异的中继日志事件并应用于其他 slave;

purge_relay_logs:清除中继日志(不会阻塞 SQL 线程);

自定义扩展:

secondary_check_script:通过多条网络路由检测master的可用性;

master_ip_failover_script:更新application使用的masterip;

report_script:发送报告;

init_conf_load_script:加载初始配置参数;

master_ip_online_change_script;更新master节点ip地址。

2.3工作原理

MHA工作原理总结为以下几条:

(1) 从宕机崩溃的 master 保存二进制日志事件(binlog events);

(2) 识别含有最新更新的 slave ;

(3) 应用差异的中继日志(relay log) 到其他 slave ;

(4) 应用从 master 保存的二进制日志事件(binlog events);

(5) 提升一个 slave 为新 master ;

(6) 使用其他的 slave 连接新的 master 进行复制。

其最大特点是 可以修复多个Slave之间的差异日志,最终使所有Slave保持数据一致


VIP切换脚本
vim master_ip_failover
#!/usr/bin/env perl

use strict;

use warnings FATAL => 'all';

use Getopt::Long;

my (

    $command,          $ssh_user,        $orig_master_host, $orig_master_ip,

    $orig_master_port, $new_master_host, $new_master_ip,    $new_master_port

);

my $vip = '172.16.2.187/24';

my $key = '1';

my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";

my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";

$ssh_user = "root";

GetOptions(

    'command=s'          => \$command,

    'ssh_user=s'        => \$ssh_user,

    'orig_master_host=s' => \$orig_master_host,

    'orig_master_ip=s'  => \$orig_master_ip,

    'orig_master_port=i' => \$orig_master_port,

    'new_master_host=s'  => \$new_master_host,

    'new_master_ip=s'    => \$new_master_ip,

    'new_master_port=i'  => \$new_master_port,

);

exit &main();

sub main {

    print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n";

    if ( $command eq "stop" || $command eq "stopssh" ) {

        my $exit_code = 1;

        eval {

            print "Disabling the VIP on old master: $orig_master_host \n";

            &stop_vip();

            $exit_code = 0;

        };

        if ($@) {

            warn "Got Error: $@\n";

            exit $exit_code;

        }

        exit $exit_code;

    }

    elsif ( $command eq "start" ) {

        my $exit_code = 10;

        eval {

            print "Enabling the VIP - $vip on the new master - $new_master_host \n";

            &start_vip();

            $exit_code = 0;

        };

        if ($@) {

            warn $@;

            exit $exit_code;

        }

        exit $exit_code;

    }

    elsif ( $command eq "status" ) {

        print "Checking the Status of the script.. OK \n";

        exit 0;

    }

    else {

        &usage();

        exit 1;

    }

}

sub start_vip() {

    `ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`;

}

sub stop_vip() {

    return 0  unless  ($ssh_user);

    `ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`;

}

sub usage {

    print

    "Usage: master_ip_failover --command=start|stop|stopssh|status --orig_master_host=host --orig_master_ip=ip --orig_master_port=port --new_master_host=host --new_master_ip=ip --new_master_port=port\n";

}

MHA集群配置文件

vim app1.cnf

[server default]

manager_log=/etc/masterha/manager.log

manager_workdir=/etc/masterha

master_binlog_dir=/mysql/logs/3306/binlog

master_ip_failover_script=/etc/masterha/scripts/master_ip_failover

password=123456

ping_interval=1

repl_password=repuser123

repl_user=repuser

ssh_user=root

user=root

[server1]

hostname=172.16.2.186

port=3306

[server2]

hostname=172.16.0.171

port=3306

[server3]

hostname=192.168.12.20

port=3306


相关命令:

-- 检查ssh连通性
masterha_check_ssh --conf=/etc/masterha/app1.cnf

-- 检查集群配置健康状态
masterha_check_repl --conf=/etc/masterha/app1.cnf

-- 检查MHA集群状态
masterha_check_status --conf=/etc/masterha/app1.cnf

-- 启动MHA集群 
masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover &

--ignore_last_failover
默认情况下,如果MHA检查到主库发生宕机,且两次宕机时间间隔不足8小时,则不会发生切换,该参数可以避免上述情况



日志分析
tail -f /etc/masterha/manager.log

MHA故障切换-日志01
MHA故障切换-日志02


MHA故障切换-日志03


MHA故障切换-日志04


MHA故障切换-日志05

特别注意:

1. MHA启动之后自动处理好集群主从读写关系

2.manager节点也需要 node包

3.故障切换后 masterha_manager进程会自动down掉,需重新启动(可脚本实现检测并自动启动) 

vim check_manager_status.sh

#!/bin/bash

while :

do

MGECHECK=`ps -ef|grep masterha_manager |egrep -v grep| wc -l`

if [ $MGECHECK -eq 0 ];then

nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover > /dev/null  2>&1

else

echo "MHA manager start"

fi

sleep 5

done

写入开机启动: echo /usr/local/bin/check_manager_status.sh >> /etc/rc.d/rc.local


搭建参考: https://www.cnblogs.com/sky-cheng/p/10972424.html
感谢作者.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352

推荐阅读更多精彩内容