nacos集群模式+keepalived搭建高可用服务

时间:2022-04-18 01:05:39


实际工作中如果nacos这样的核心服务停掉了或者整个服务器宕机了,那整个系统也就gg了,所以像这样的核心服务我们必须要搞个3个或者3个以上的nacos集群部署,实现高可用;

部署高可用版本之前,首先你要会部署单机版的nacos,要有一定的前置知识,
我这里用的nacos版本2.0.4; jdk版本8 ;mysql用的5.7,
系统使用linux的Centos7.6版本

1.Nacos 集群搭建

配置/conf/cluster.conf

解压nacos压缩包,将./conf/cluster.conf.example复制一份,修改名称为cluster.conf,并修改内容,如下:

nacos集群模式+keepalived搭建高可用服务

#it is ip
#example
10.10.11.79:8848
10.10.11.80:8848
10.10.11.81:8848

建议nacos集群不要少于3个,集群配置文件格式为ip:port,端口要保持一致;

修改application.properties文件,端口号持久化配置:

server.port=8848
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://10.10.11.81:3307/test?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=root!@#

nacos集群模式+keepalived搭建高可用服务

修改nacos/bin/startup.sh

改成集群模式:

export MODE="cluster"

nacos集群模式+keepalived搭建高可用服务


注意:三节点conf/cluster.conf和conf/application.properties配置一样即可!

启动nacos服务:

sh startup.sh

查看一下日志:

nacos集群模式+keepalived搭建高可用服务

关闭服务:

sh shutdown.sh

分别访问一下:

http://10.10.11.79:8848/nacos

nacos集群模式+keepalived搭建高可用服务


http://10.10.11.80:8848/nacosnacos集群模式+keepalived搭建高可用服务

http://10.10.11.81:8848/nacos


想用nginx做负载的话也可以,这里不介绍。

2.安装keepalived

安装

yum clean all
yum install -y keepalived

keepalived常用命令:

systemctl start keepalived.service   #启动keepalived
  systemctl stop  keepalived.service   #停止keepalived   
  systemctl status keepalived.service  #查看keepalived状态

修改/etc/keepalived/keepalived.conf配置文件,配置内容如下:

10.10.11.79:

#监控服务nacos
    vrrp_script chk_nacos {
         script "/etc/keepalived/chk_nacos.sh"
         #每2s检查一次
         interval 2
         #每次检查-20
         weight -20
    }
    
    vrrp_instance VI_1 {
        #只有一个MASTER 其他为BACKUP
        state MASTER
		#网卡  当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡
        interface ens192
        #必须一样
        virtual_router_id 51
        #优先级
        priority 102
        advert_int 1
        #本机ip
        unicast_src_ip 10.10.11.79
        # 其他机器ip
        unicast_peer {                
            10.10.11.80        
            10.10.11.81
        }
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        track_script {
               #检测脚本,上面配置的
               chk_nacos
        }
        virtual_ipaddress {
            #虚拟ip  是同网关下未使用的ip
            10.10.11.78
        }
    }

10.10.11.80:

#监控服务nacos
    vrrp_script chk_nacos {
         script "/etc/keepalived/chk_nacos.sh"
         #每2s检查一次
         interval 2
         #每次检查-20
         weight -20
    }
    
    vrrp_instance VI_1 {
        #只有一个MASTER 其他为BACKUP
        state BACKUP
        #网卡  当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡
        interface ens192
        #必须一样
        virtual_router_id 51
        #优先级
        priority 102
        advert_int 1
        #本机ip
        unicast_src_ip 10.10.11.80
        # 其他机器ip
        unicast_peer {                
            10.10.11.79     
            10.10.11.81
        }
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        track_script {
               #检测脚本,上面配置的
               chk_nacos
        }
        virtual_ipaddress {
            #虚拟ip  是同网关下未使用的ip
            10.10.11.78
        }
    }

10.10.11.81:

#监控服务nacos
    vrrp_script chk_nacos {
         script "/etc/keepalived/chk_nacos.sh"
         #每2s检查一次
         interval 2
         #每次检查-20
         weight -20
    }
    
    vrrp_instance VI_1 {
        #只有一个MASTER 其他为BACKUP
        state BACKUP
        #网卡  当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡
        interface ens192
        #必须一样
        virtual_router_id 51
        #优先级
        priority 102
        advert_int 1
        #本机ip
        unicast_src_ip 10.10.11.81
        # 其他机器ip
        unicast_peer {                
            10.10.11.79
            10.10.11.80
        }
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        track_script {
               #检测脚本,上面配置的
               chk_nacos
        }
        virtual_ipaddress {
            #虚拟ip  是同网关下未使用的ip
            10.10.11.78
        }
    }

健康检测脚本:

建立/etc/keepalived/chk_nacos.sh脚本,三个服务器都一样。作用就是检测nacos服务是否运行,不运行就让keepalived让出master,优先级降低。让其他节点提供服务。

#!/bin/bash
COUNT=$(ps -ef | grep nacos |grep -v "chk_nacos" | grep -v "grep" | wc -l )
echo "nacos服务数量为:$COUNT"
#判断nacos 是否都挂掉了
if [ $COUNT -lt 1 ]; then    
   echo “nacos服务失败,让出master”
   exit 1
else
   echo "检测成功"
   exit 0
fi

三个节点启动keepalived服务:

systemctl start keepalived.service

访问一下虚拟ip:

10.10.11.78:8848/nacos

nacos集群模式+keepalived搭建高可用服务

这样便可以搭建一个高可用的nacos服务。直接访问http:10.10.11.78:8848/nacos即可。当提供服务的nacos挂掉了,就可以切到其他可用的nacos服务器。

验证:

找到其中一台nacos,kill掉服务。

nacos集群模式+keepalived搭建高可用服务


访问当前那台nacos:

nacos集群模式+keepalived搭建高可用服务


再次访问虚拟ip,查看是否受到影响:

nacos集群模式+keepalived搭建高可用服务


仍然可以正常访问。

这样nacos的高可用集群就已经搭建好了,最好把数据库也做一下高可用:
Docker搭建MySQL主主模式+Keepalived实现高可用集群