第98讲:MHA高可用集群VIP地址配置与漂移实践

2024-02-18 11:52

本文主要是介绍第98讲:MHA高可用集群VIP地址配置与漂移实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 1.为甚要给MHA高可用集群配置VIP地址
    • 2.配置MHA高可用集群VIP漂移地址
      • 2.1.准备MHA VIP地址的脚本
      • 2.2.配置MHA指定VIP地址的脚本
      • 2.3.手动在主库上配置VIP地址
      • 2.4.重启MHA
      • 2.5.模拟主库故障观察VIP是否会自动切换

1.为甚要给MHA高可用集群配置VIP地址

当主库发生故障,从库切换成主库后,程序是无感知的,程序并不知道谁成为了主库,程序还是会连接曾经的主库,就会导致平台访问异常,因此我们需要准备一个VIP漂移地址,当主库故障后,VIP就漂移到新的主库上,保证平台的高可用。

可以通过Keepalived实现高可用,当然MHA也有配置VIP的方法,并且非常简单。

MHA配置VIPD的方法,是通过一个脚本,自动判断谁是主库,然后在主库的网卡上添加一个VIP地址,当主库故障后自动将这个VIP地址删除,然后在新的主库中添加这个VIP地址。

2.配置MHA高可用集群VIP漂移地址

2.1.准备MHA VIP地址的脚本

[root@mysql-3 ~]# vim /data/mha/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.15/23';			#指定漂移IP地址
my $key = '1';						   #虚拟网卡号
my $ssh_start_vip = "/sbin/ifconfig ens192:$key $vip";    #ens192是我自己的网卡名称需要根据自己的情况而设置
my $ssh_stop_vip = "/sbin/ifconfig ens192:$key down";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";
}

2.2.配置MHA指定VIP地址的脚本

需要在MHA的配置文件中指定VIP地址漂移的脚本。

[root@mysql-3 ~]# vim /data/mha/app1.cnf 
[server default]
·····
master_ip_failover_script=/data/mha/scripts/master_ip_failover#给脚本一个执行权限
[root@mysql-3 ~]# chmod +x /usr/local/bin/master_ip_failover 

2.3.手动在主库上配置VIP地址

第一次配置VIP地址,需要现在主库对应的网卡上配置好VIP地址,否则当故障出现时,VIP地址不能漂移到新的主库,并且还会报错,因为脚本要先删掉主库中的VIP,然后在新的主库上添加,如果一开始就不存在,肯定会报错。

[root@mysql-2 ~]# ifconfig ens192:1 192.168.20.15/23[root@mysql-2 ~]# ip a
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:50:56:b7:eb:68 brd ff:ff:ff:ff:ff:ffinet 192.168.20.12/23 brd 192.168.21.255 scope global ens192valid_lft forever preferred_lft foreverinet 192.168.20.15/23 brd 192.168.21.255 scope global secondary ens192:1valid_lft forever preferred_lft forever

2.4.重启MHA

[root@mysql-3 ~]# masterha_stop --conf=/data/mha/app1.cnf 
Stopped app1 successfully.
[root@mysql-3 ~]# nohup masterha_manager --conf=/data/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover  < /dev/null> /data/mha/logs/manager.log 2>&1 &

2.5.模拟主库故障观察VIP是否会自动切换

1)模拟主库故障

1.主库是mysql-2
[root@mysql-3 ~]# masterha_check_status --conf=/data/mha/app1.cnf
app1 (pid:13746) is running(0:PING_OK), master:192.168.20.122.模拟主库故障
[root@mysql-2 ~]# systemctl stop mysqld

2)观察VIP是否漂移

目前mysql-3成为了主库,VIP也漂移到了mysql-3的服务器中。

[root@mysql-3 ~]# ip a
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:50:56:b7:c3:1d brd ff:ff:ff:ff:ff:ffinet 192.168.20.13/23 brd 192.168.21.255 scope global ens192valid_lft forever preferred_lft foreverinet 192.168.20.15/23 brd 192.168.21.255 scope global secondary ens192:1valid_lft forever preferred_lft foreverinet6 fe80::250:56ff:feb7:c31d/64 scope link valid_lft forever preferred_lft forever

通过漂移IP连接主库。

[root@mysql-2 ~]# mysql -uroot -p123456 -h 192.168.20.15
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

这篇关于第98讲:MHA高可用集群VIP地址配置与漂移实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/721073

相关文章

Linux 安装、配置Tomcat 的HTTPS

Linux 安装 、配置Tomcat的HTTPS 安装Tomcat 这里选择的是 tomcat 10.X ,需要Java 11及更高版本 Binary Distributions ->Core->选择 tar.gz包 下载、上传到内网服务器 /opt 目录tar -xzf 解压将解压的根目录改名为 tomat-10 并移动到 /opt 下, 形成个人习惯的路径 /opt/tomcat-10

uniapp接入微信小程序原生代码配置方案(优化版)

uniapp项目需要把微信小程序原生语法的功能代码嵌套过来,无需把原生代码转换为uniapp,可以配置拷贝的方式集成过来 1、拷贝代码包到src目录 2、vue.config.js中配置原生代码包直接拷贝到编译目录中 3、pages.json中配置分包目录,原生入口组件的路径 4、manifest.json中配置分包,使用原生组件 5、需要把原生代码包里的页面修改成组件的方

C++必修:模版的入门到实践

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C++学习 贝蒂的主页:Betty’s blog 1. 泛型编程 首先让我们来思考一个问题,如何实现一个交换函数? void swap(int& x, int& y){int tmp = x;x = y;y = tmp;} 相信大家很快就能写出上面这段代码,但是如果要求这个交换函数支持字符型

IDEA配置Tomcat远程调试

因为不想把本地的Tomcat配置改乱或者多人开发项目想测试,本文主要是记录一下,IDEA使用Tomcat远程调试的配置过程,免得一段时间不去配置到时候忘记(毕竟这次是因为忘了,所以才打算记录的…) 首先在catalina.sh添加以下内容 JAVA_OPTS="-Dcom.sun.management.jmxremote=-Dcom.sun.management.jmxremote.port

Eureka高可用注册中心registered-replicas没有分布式注册中心

自己在学习过程中发现,如果Eureka挂掉了,其他的Client就跑不起来了,那既然是商业项目,还是要处理好这个问题,所以决定用《Spring Cloud微服务实战》(PDF版在全栈技术交流群中自行获取)中说的“高可用注册中心”。 一开始我yml的配置是这样的 server:port: 8761eureka:instance:hostname: 127.0.0.1client:fetch-r

通过高德api查询所有店铺地址信息

通过高德api查询所有店铺地址电话信息 需求:通过高德api查询所有店铺地址信息需求分析具体实现1、申请高德appkey2、下载types city 字典值3、具体代码调用 需求:通过高德api查询所有店铺地址信息 需求分析 查询现有高德api发现现有接口关键字搜索API服务地址: https://developer.amap.com/api/webservice/gui

亮相WOT全球技术创新大会,揭秘火山引擎边缘容器技术在泛CDN场景的应用与实践

2024年6月21日-22日,51CTO“WOT全球技术创新大会2024”在北京举办。火山引擎边缘计算架构师李志明受邀参与,以“边缘容器技术在泛CDN场景的应用和实践”为主题,与多位行业资深专家,共同探讨泛CDN行业技术架构以及云原生与边缘计算的发展和展望。 火山引擎边缘计算架构师李志明表示:为更好地解决传统泛CDN类业务运行中的问题,火山引擎边缘容器团队参考行业做法,结合实践经验,打造火山

时间服务器中,适用于国内的 NTP 服务器地址,可用于时间同步或 Android 加速 GPS 定位

NTP 是什么?   NTP 是网络时间协议(Network Time Protocol),它用来同步网络设备【如计算机、手机】的时间的协议。 NTP 实现什么目的?   目的很简单,就是为了提供准确时间。因为我们的手表、设备等,经常会时间跑着跑着就有误差,或快或慢的少几秒,时间长了甚至误差过分钟。 NTP 服务器列表 最常见、熟知的就是 www.pool.ntp.org/zo

Steam邮件推送内容有哪些?配置教程详解!

Steam邮件推送功能是否安全?如何个性化邮件推送内容? Steam作为全球最大的数字游戏分发平台之一,不仅提供了海量的游戏资源,还通过邮件推送为用户提供最新的游戏信息、促销活动和个性化推荐。AokSend将详细介绍Steam邮件推送的主要内容。 Steam邮件推送:促销优惠 每当平台举办大型促销活动,如夏季促销、冬季促销、黑色星期五等,用户都会收到邮件通知。这些邮件详细列出了打折游戏、

9 个 GraphQL 安全最佳实践

GraphQL 已被最大的平台采用 - Facebook、Twitter、Github、Pinterest、Walmart - 这些大公司不能在安全性上妥协。但是,尽管 GraphQL 可以成为您的 API 的非常安全的选项,但它并不是开箱即用的。事实恰恰相反:即使是最新手的黑客,所有大门都是敞开的。此外,GraphQL 有自己的一套注意事项,因此如果您来自 REST,您可能会错过一些重要步骤!