实际工作中如果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,并修改内容,如下:
#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/bin/startup.sh
改成集群模式:
export MODE="cluster"
注意:三节点conf/cluster.conf和conf/application.properties配置一样即可!
启动nacos服务:
sh startup.sh
查看一下日志:
关闭服务:
sh shutdown.sh
分别访问一下:
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服务。直接访问http:10.10.11.78:8848/nacos即可。当提供服务的nacos挂掉了,就可以切到其他可用的nacos服务器。
验证:
找到其中一台nacos,kill掉服务。
访问当前那台nacos:
再次访问虚拟ip,查看是否受到影响:
仍然可以正常访问。
这样nacos的高可用集群就已经搭建好了,最好把数据库也做一下高可用:
Docker搭建MySQL主主模式+Keepalived实现高可用集群