> 文章列表 > nacos集群配置高可用数据库

nacos集群配置高可用数据库

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漂移到主节点上才能恢复写功能