1. Nacos 的集群模式
-
单机模式 – 用于测试和单机试用。
-
集群模式 – 用于生产环境,确保高可用。
-
多集群模式 – 用于多数据中心场景。
1.1 针对集群部署模式,Nacos文档中也提供了三种集群部署方案
-
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集群迁移时,客户端配置无需修改。
-
缺点: 实现了高可用,但是无法实现复杂均衡。
-
2. Nginx + Keepalived + Nacos + Mysql(HA) 搭建生产环境可用的Nacos集群
2.1 前提步骤 – 组建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
-
2.2 [单点 Nginx + Nacos 模式] – 不建议使用,存在Nginx的单点问题
- nacos的集群访问通过一个前置的负载均衡器进行转发,很容易就能想到使用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。
2.3 [Keepalived + 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查看
2.4 [推荐方案]- Nginx + Keepalived + Nacos + Mysql(HA)
-
参考 : 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/; } }
- Tips:
-
建议 Nacos 服务节点分别部署到不同服务器上,这样才能故障隔离,确保高可用。
-
实际项目中,建议为Nacos绑定一个域名(域名解析 & 修改NGINX配置的 server_name),这样即使未来Nacos Server需要迁移,也无需修改Nacos Client端的配置;•本文为了演示方便,将所有实例部署在了一台机器中;实际项目中,请将Nacos部署在不同机器中,从而实现更好的容灾与隔离
- 例如: 配置域名 test.nacos.com 绑定 VIP , 然后在客户端只需要给 server-addr 配置域名 test.nacos.com 即可。
-
3. 客户端应用(微服务)怎么连接 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
-
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/15262.html