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 keepalived
global_defs {
script_user root #配置vrrp_script项检测脚本,就必须增加此项与下面一项,不然会报错
enable_script_security #
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_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时间大,单位是s
weight -20 #若是上面的脚本退出状态不为0权重减20
}
vrrp_instance VI_1 {
state MASTER #指定实例初始状态,主节点配置为master
interface ens160 #主机使用的网卡名称
virtual_router_id 51 #设置VRID标记,需要和备节点的id一致,多个集群不能重复(0..255)
priority 70 #优先级,主节点优先级需要比备节点高
advert_int 1 #检查的时间间隔,默认1s
authentication {
auth_type PASS #认证方式,支持PASS和AH,官方建议使用PASS
auth_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 ]; then
exit 1
else
exit 0
fi
给脚本增加执行权限
chmod +x /etc/keepalived/check_mysql.sh
B主机配置
安装keepalive服务
yum -y install keepalive
编辑keepalive配置文件
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
script_user root #配置vrrp_script项检测脚本,就必须增加此项与下面一项,不然会报错
enable_script_security #
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_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时间大,单位是s
weight -20 #若是上面的脚本退出状态不为0权重减20
}
vrrp_instance VI_1 {
state BACKUP #指定实例初始状态,主节点配置为master
interface ens160 #主机使用的网卡名称
virtual_router_id 51 #设置VRID标记,需要和备节点的id一致,多个集群不能重复(0..255)
priority 70 #优先级,主节点优先级需要比备节点高
advert_int 1 #检查的时间间隔,默认1s
authentication {
auth_type PASS #认证方式,支持PASS和AH,官方建议使用PASS
auth_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 ]; then
exit 1
else
exit 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漂移到主节点上才能恢复写功能