nacos集群配置高可用数据库

1.架构

nacos集群配置高可用数据库的架构其实和nacos集群的架构差不多,只是在数据库方面做了主从跟keepalive实现数据库的高可用,当mysql的master节点挂掉时,keepalive的vip自动漂移到slave节点,并通过脚本使slave节点提升为master节点,因为主机数量不足的问题,本实验使用三台主机

nacos集群配置高可用数据库_第1张图片

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 {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   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 {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   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漂移到主节点上才能恢复写功能

你可能感兴趣的:(nacos,数据库,java,开发语言)