千家信息网

MHA之虚拟IP

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,在MySQL高可用之MHA部署这篇博文中,已经将MHA的基础架构部署完成,但是并没有解决一个虚拟IP的问题,因为当master宕机后,新的master顶上来,这时前端APP要连接的数据库IP已经发生了
千家信息网最后更新 2026年11月02日MHA之虚拟IP

在MySQL高可用之MHA部署这篇博文中,已经将MHA的基础架构部署完成,但是并没有解决一个虚拟IP的问题,因为当master宕机后,新的master顶上来,这时前端APP要连接的数据库IP已经发生了变化,为了解决这个问题,必然要引入虚拟IP,谈起虚拟IP,首先想到的应该是keepalived这个工具,但这个工具有个弊端,就是有一个脑裂的问题,所以更建议在生产中使用脚本的方式来控制这个VIP。

1、在manager节点写入此脚本

[root@manager scripts]# cat /scripts/master_ip_failover #!/usr/bin/env perluse 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 = '192.168.20.100';         #这里指定VIP地址my $key = '0';my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";         #这条指令是启动VIPmy $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";       #这条指令是停止VIPGetOptions( '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"; #`ssh $ssh_user\@cluster1 \" $ssh_start_vip \"`; exit 0; } else { &usage(); exit 1; }}# A simple system call that enable the VIP on the new mastersub start_vip() { `ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`;}# A simple system call that disable the VIP on the old_mastersub 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";}[root@manager ~]# ll /scripts/master_ip_failover             #需要保证脚本有可执行权限-rwxr-xr-x 1 root root 2006 2月  24 16:32 /scripts/master_ip_failover

2、修改manager配置文件

[root@manager ~]# cat /etc/masterha/app1.cnf           #配置文件指定脚本的位置[server default]manager_workdir=/var/log/masterha/app1manager_log=/var/log/masterha/app1/manager.loguser=managerpassword=123.comssh_user=rootrepl_user=mhareprepl_password=123.comping_interval=1master_ip_failover_script=/scripts/master_ip_failover     #增加改行,指定脚本的位置即可。[server1]hostname=192.168.20.2port=3306master_binlog_dir=/usr/local/mysql/datacandidate_master=1[server2]hostname=192.168.20.3port=3306master_binlog_dir=/usr/local/mysql/datacandidate_master=1[server3]hostname=192.168.20.4port=3306master_binlog_dir=/usr/local/mysql/datano_master=1

做到这里,就可以保证在切换master时,VIP地址也会随之切换到新的master主机上。

脚本 问题 位置 地址 指令 文件 保证 切换 配置 主机 产中 前端 基础 就是 工具 建议 弊端 必然 数据 数据库 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技工作委员会 互联网佳科技有限公司 西安纸贵互联网科技有限公司 奇酷互联网科技公司 未来的互联网科技 互联网金融科技委员会 创业天下互联网科技有限公司 重庆威客帮互联网科技 茂名市互联网科技产业园 河南猎农互联网科技有限公司 互联网5g黑科技有哪些 米聚互联网科技南京有限公司排面 中国互联网公司排名锤子科技 互联网科技大赛获奖感言 上海京穆互联网科技有限公司 沐思想互联网科技有限公司 兰石爱特工业互联网科技分公司 长沙易易互联网科技有限公司 互联网领先科技成果宣传视频 颐高云石互联网科技 厦门中拓互联网络科技有限公司 万易互联网科技 碳银互联网科技 互联网金融监管科技 居家互联网科技有限公司 哈尔滨秒房互联网科技有限公司 乌苏新华互联网科技做什么的 徐州市互联网科技有限公司 滨湖区互联网智能科技产品有哪些 银行科技岗属于互联网吗
0