nacos集群配置高可用数据库
1.架构
nacos集群配置高可用数据库的架构其实和nacos集群的架构差不多,只是在数据库方面做了主从跟keepalive实现数据库的高可用,当mysql的master节点挂掉时,keepalive的vip自动漂移到slave节点,并通过脚本使slave节点提升为master节点,因为主机数量不足的问题,本实验使用三台主机
2.主机配置如下图所示
主机 | IP | 端口 | 服务 |
A | 10.1.60.112 | 3306、8848 | nacos、mysql、keepalive |
B | 10.1.60.114 | 3306、8848 | nacos、mysql、keepalive |
C | 10.1.60.115 | 8848 | nacos |
3.在A、B主机上安装mysql
参考:yum安装mysql 5.7_Apex Predator的博客-CSDN博客
4. 以A主机为master搭建mysql主从
参考:mysql一主两从读写分离搭建_Apex Predator的博客-CSDN博客
5.在mysql主从两台主机上配置keepalive
A主机配置
安装keepalive服务
yum -y install keepalive
编辑keepalive配置文件
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {script_user root #配置vrrp_script项检测脚本,就必须增加此项与下面一项,不然会报错enable_script_security #notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id mysql01 #主节点id需要与备节点id不一致#vrrp_skip_check_adv_addr#vrrp_strict#vrrp_garp_interval 0#vrrp_gna_interval 0
}vrrp_script check_mysql {script "/etc/keepalived/check_mysql.sh" #心跳执行的脚本,检查mysql是否存活,且检查master节点状态interval 5 #脚本执行的间隔时间,需要比advert_int时间大,单位是sweight -20 #若是上面的脚本退出状态不为0权重减20
}vrrp_instance VI_1 {state MASTER #指定实例初始状态,主节点配置为masterinterface ens160 #主机使用的网卡名称virtual_router_id 51 #设置VRID标记,需要和备节点的id一致,多个集群不能重复(0..255)priority 70 #优先级,主节点优先级需要比备节点高advert_int 1 #检查的时间间隔,默认1sauthentication {auth_type PASS #认证方式,支持PASS和AH,官方建议使用PASSauth_pass 1111 #认证密码,备节点跟主节点一致}virtual_ipaddress {10.1.60.116 #虚拟ip地址,必须配置为没有使用的地址}track_script {check_mysql}
}
编辑数据库监控脚本
vi /etc/keepalived/check_mysql.sh
#!/bin/bash
A=`netstat -tlpn|grep :3306|wc -l` #查询mysql是否存活
if [ A == 0 ]; thenexit 1
elseexit 0
fi
给脚本增加执行权限
chmod +x /etc/keepalived/check_mysql.sh
B主机配置
安装keepalive服务
yum -y install keepalive
编辑keepalive配置文件
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {script_user root #配置vrrp_script项检测脚本,就必须增加此项与下面一项,不然会报错enable_script_security #notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id mysql02 #主节点id需要与备节点id不一致#vrrp_skip_check_adv_addr#vrrp_strict#vrrp_garp_interval 0#vrrp_gna_interval 0
}vrrp_script check_mysql {script "/etc/keepalived/check_mysql.sh" #心跳执行的脚本,检查mysql是否存活,且检查master节点状态interval 5 #脚本执行的间隔时间,需要比advert_int时间大,单位是sweight -20 #若是上面的脚本退出状态不为0权重减20
}vrrp_instance VI_1 {state BACKUP #指定实例初始状态,主节点配置为masterinterface ens160 #主机使用的网卡名称virtual_router_id 51 #设置VRID标记,需要和备节点的id一致,多个集群不能重复(0..255)priority 70 #优先级,主节点优先级需要比备节点高advert_int 1 #检查的时间间隔,默认1sauthentication {auth_type PASS #认证方式,支持PASS和AH,官方建议使用PASSauth_pass 1111 #认证密码,备节点跟主节点一致}virtual_ipaddress {10.1.60.116 #虚拟ip地址,必须配置为没有使用的地址}track_script {check_mysql}
}
编辑数据库监控脚本
vi /etc/keepalived/check_mysql.sh
#!/bin/bash
A=`netstat -tlpn|grep :3306|wc -l` #查询mysql是否存活
if [ A == 0 ]; thenexit 1
elseexit 0
fi
给脚本增加执行权限
chmod +x /etc/keepalived/check_mysql.sh
6.搭建nacos集群
参考:nacos集群搭建_Apex Predator的博客-CSDN博客
配置application.properties文件时将ip地址改为keepalive的vip地址即可
7.实现效果
当keepalive通过脚本检测主库挂掉时,将A主机权重减掉20,把vip漂移到从节点上,但是从节点只可读,不可写,只能等主库恢复后,vip漂移到主节点上才能恢复写功能