单机模式 - 用于测试和单机试用。
集群模式 - 用于生产环境,确保高可用。
多集群模式 - 用于多数据中心场景。
http://ip1:port/openAPI 直连ip模式:
特点: ip+端口进行部署,客户端直接连接Nacos的ip
缺点: 只能连接单台 Nacos ,故障切换无法实现。
http://Vip:port/openAPI 挂载虚拟IP模式:
特点: 配合 KeepAlived,Nacos真实ip都挂载虚拟Ip下,客户端访问Vip发起请求。当主Nacos宕机后,备用Nacos接管,实现高可用。
缺点: 实现了高可用,但是无法实现复杂均衡。
http://www.nacostest.com:port/openAPI 挂载虚拟IP+域名模式:
特点: 为虚拟ip绑定一个域名,当Nacos集群迁移时,客户端配置无需修改。
缺点: 实现了高可用,但是无法实现复杂均衡。
Tips
3个或3个以上Nacos节点才能构成集群。
建议 (Nginx + Keepalived (*2)) + Nacos(*3 + Mysql), 结合虚拟IP来组建集群。
下载并解压 nacos 的jar包后, 直接讲解压后的 nacos 目录 copy 出三份。
导入初始化脚本
* 找到 conf/nacos-mysql.sql ,将其导入到数据库中。
* 或者从网上下载: https://github.com/alibaba/nacos/blob/master/distribution/conf/nacos-mysql.sql
配置数据库连接
找到 conf/application.properties ,添加如下内容:
```
# 表明用MySQL作为后端存储
spring.datasource.platform=mysql
# 有几个数据库实例
db.num=2
# 第1个实例的地址
db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
# 第2个实例的地址
db.url.1=jdbc:mysql://11.163.152.9:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos_devtest
db.password=nacos
```
配置集群配置文件
在nacos的解压目录 nacos/的conf目录下,有配置文件 cluster.conf,请每行配置成ip:port。(请配置3个或3个以上节点)
# ip:port
200.8.9.16:8848
200.8.9.17:8848
200.8.9.18:8848
启动集群
集群模式
使用内置数据源
sh startup.sh -p embedded
使用外置数据源
sh startup.sh
JVM 参数配置
默认配置为: JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
Tips: 集群模式中至少三台启动成功了,整个集群才能真正启动成功
2020-09-08 18:54:54,532 INFO Nacos is starting...
2020-09-08 18:54:54,778 INFO Nacos Log files: /home/jump/softWare/nacos/logs
2020-09-08 18:54:54,778 INFO Nacos Log files: /home/jump/softWare/nacos/conf
2020-09-08 18:54:54,778 INFO Nacos Log files: /home/jump/softWare/nacos/data
2020-09-08 18:54:54,779 INFO Nacos started successfully in cluster mode. use embedded storage
不建议使用,存在Nginx的单点问题
nginx + nacos + mysql(可选,若不配置则会使用内置数据库)
Nginx 配置
upstream nacos-server {
# 下面是三台nacos服务的地址。(且这三台必须互相能连通)
server 192.168.0.1:8849;
server 192.168.0.2:8850;
server 192.168.0.3:8851;
}
server {
listen 80;
server_name localhost;
location /nacos/ {
proxy_pass http://nacos-server/nacos/;
}
}
控制台访问
http://your-nginx-server-host:80/nacos 可看到Nacos的登录页,登录后即可正常使用Nacos。
不推荐使用,只能高可用,不能负载均衡
参考: https://blog.csdn.net/qq_36268452/article/details/104357165
安装配置keepalived
在三台Nacos服务器上分别安装keepalived
yum install -y keepalived
在三台服务器上分别修改/etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
state MASTER
interface enp0s8
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.161.6
}
}
一台服务器是MASTER,其他的服务器为BACKUP
interface 配置为我们刚刚查看的网卡的名称
virtualrouterid 必须一致,表示这三台服务器抢用一个虚拟ip。
修改priority 优先级,三台服务器要不一样,比如:100、101、102,优先级最高的优先使用虚拟ip。MASTER的优先级一定要高于BACKUP主机
advert_int 是几台服务器之间的同步检查时间,1秒
authentication 的设置必须一致,这样这几台服务器才能通信
修改virtual_ipaddress为三台服务器所在网段内未被占用的IP地址,比如:192.168.161.6
6.2.修改防火墙CentOS7必须开放防火墙配置,否则三台主机无法就虚拟ip的使用优先级通信,将都是MASTER,都配置虚拟ip。
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --protocol vrrp -j ACCEPT;
firewall-cmd --reload;
6.3.启动keepalived服务
sudo systemctl restart keepalived.service
详细教程
1,安装keepalived软件,本操作系统为centos。
yum clean all
yum install -y keepalived
2,keepalived简单操作
systemctl start keepalived.service #启动keepalived
systemctl stop keepalived.service #停止keepalived
systemctl status keepalived.service #查看keepalived状态
ifconfig #查看IP网卡等
ip addr show ens192 #查看某个网卡下的ip地址
3,修改/etc/keepalived/keepalived.conf配置文件,配置内容如下:
192.168.1.100服务器:
#监控服务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
#网卡
interface ens192
#必须一样
virtual_router_id 51
#优先级
priority 102
advert_int 1
#本机ip
unicast_src_ip 192.168.1.100
# 其他机器ip
unicast_peer {
192.168.1.101
192.168.1.102
}
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
#检测脚本,上面配置的
chk_nacos
}
virtual_ipaddress {
#虚拟ip 是同网关下未使用的ip
192.168.1.8
}
}
1
192.168.1.101服务器:
#监控服务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
#网卡
interface ens192
#必须一样
virtual_router_id 51
#优先级
priority 102
advert_int 1
#本机ip
unicast_src_ip 192.168.1.101
# 其他机器ip
unicast_peer {
192.168.1.100
192.168.1.102
}
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
#检测脚本,上面配置的
chk_nacos
}
virtual_ipaddress {
#虚拟ip 是同网关下未使用的ip
192.168.1.8
}
}
192.168.1.102服务器:
#监控服务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
#网卡
interface ens192
#必须一样
virtual_router_id 51
#优先级
priority 102
advert_int 1
#本机ip
unicast_src_ip 192.168.1.102
# 其他机器ip
unicast_peer {
192.168.1.100
192.168.1.101
}
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
#检测脚本,上面配置的
chk_nacos
}
virtual_ipaddress {
#虚拟ip 是同网关下未使用的ip
192.168.1.8
}
}
4,建立/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
5,这样便可以搭建一个高可用的nacos服务。直接访问http:192.168.1.8:8848/nacos即可。当提供服务的nacos挂掉了,就可以切到其他可用的nacos服务器。
6,日志可以在 /var/log/messages查看
参考 : https://www.gylinux.cn/3210.html
使用keepalived保证Nginx高可用,就是基于主-备架构,利用keepalived实现故障时自动切换到备机。一般使用一个keepalived服务+一个Nginx服务搭配作为一个(主节点),备机节点也一样。相当于keepalived服务监控着Nginx服务,然后利用keepalived自身的故障选举机制,实现间接实现Nginx的故障转移。
keepalived作用
检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障服务器。
keepalived会让两个nginx争抢一个VIP
keepalived配置文件可以设置角色:Master、backup,当nginx1是master时,那么nginx-1抢到VIP。
keepalived可以通过脚本监测当前Master所对应的Nginx服务是否可用,如果不可用,那么其他keepalived会争抢成为master。
keepalived工作原理
1.watchDog监控checkers和VRRR进程的状态;
2.checkers负责真实服务器的健康监测healthchecking;
3.VRRR Stack负责负载均衡器之间的失败切换;
4.IPVS wrapper 用来发送设定的规则到内核IPVS代码
5.Netlink Reflector 用来设定VRRP的VIP地址等。
Keepalived 高可用故障切换转移原理(重点)#
Keepalived 高可用服务对之间的故障切换转移,是通过 VRRP 协议(虚拟路由冗余协议)来实现的。
在 Keepalived 服务正常工作时,主 Master 节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备 Backup 节点自己还活着,当主 Master 节点发生故障时,就无法发送心跳消息了,备节点也就因此无法继续检测到来自Master 节点的心跳了,进而调用自身的接管程序,接管主 Master 节点的 IP 资源及服务。而当主 Master 节点恢复时,备 Backup 节点又会释放主节点故障时自身接管的 IP 资源及服务,恢复到原来备用角色。
然后让这些Nginx都配置好代理 Nacos 集群的请求即可。
upstream nacos-server {
# 下面是三台nacos服务的地址。(且这三台必须互相能连通)
server 192.168.0.1:8849;
server 192.168.0.2:8850;
server 192.168.0.3:8851;
}
server {
listen 80;
server_name localhost;
location /nacos/ {
proxy_pass http://nacos-server/nacos/;
}
}
建议 Nacos 服务节点分别部署到不同服务器上,这样才能故障隔离,确保高可用。
实际项目中,建议为Nacos绑定一个域名(域名解析 & 修改NGINX配置的 server_name),这样即使未来Nacos Server需要迁移,也无需修改Nacos Client端的配置;•本文为了演示方便,将所有实例部署在了一台机器中;实际项目中,请将Nacos部署在不同机器中,从而实现更好的容灾与隔离
客户端应用(微服务)怎么连接 Nacos 集群?
微服务访问
spring:
application:
name: demo-test
cloud:
nacos:
discovery:
# Nacos 集群vip地址
server-addr: your-nginx-server-host
config:
server-addr: your-nginx-server-host
prefix: ${
spring.application.name}
file-extension: yml
启动成功
2020-09-08 19:52:29.529 INFO 13595 — [ main] c.a.c.n.registry.NacosServiceRegistry : nacos registry, DEFAULT_GROUP demo-test 10.210.1.1:7001 register finished
Tips:
在客户端还支持配置 Nacos 集群名 - 可选
spring.cloud.nacos.discovery.cluster-name
* 默认值 DEFAULT