注意: 本地搭建集群环境地址不能写127.0.0.1,切记 切记 切记
一、前言
在前面学习在基于SpringCloud
构建的微服务项目中,Eureka
担任注册中心,实现服务的注册与发现,这样的组合在第一代SpringCloud
微服务中使用还是很多的,后来国内某Bat
公司基于SpringCloud
的拓展,延伸了自身的一些微服务组件,由此兴起了第二代微服务Spring Cloud Alibaba
,其中某些组件还是相率相当高的,就比如nacos
,nacos
集注册中心与配置中心于一体,极大的摆脱了在第一代微服务中使用Spring Cloud Config
需结合Spring Cloud Bus
消息总线才能动态刷新配置文件的问题,而且配置文件需存储在Git
版本控制库,这点太繁琐,而Nacos
自带控制台界面,可动态的操作配置,登录到后台界面,管理起来非常方便。
二、Eureka与Nacos集群区别
总所周知,Eureka
的核心是去中心化,就是当Eureka Server
服务需要做集群时,Eureka Server
之间相互注册,有几台就相互注册几台,可用八个字: "你中有我,我中有你"
来理解,那么中心化就是说多台集群节点中有一个老大,去中心化就没有老大,人人都是老大,人人平等,多台节点间平级。nacos
多台节点做集群时,需要有一个master
节点,因此是存在选举的过程。
三、案例
假设我们的项目环境部署如下,客户端先通过访问Nginx
,然后Nginx
经过nacos
,然后再到下面的具体子服务再到缓存最后到DB
,Nginx
这里假设只有一台,那么思考下3
台nacos
节点如何做集群?
四、Nacos集群部署搭建
提示:
Nacos
的集群部署是在nacos-server
提供的cluster.conf
配置文件中配置集群节点的IP+Port
地址,多个节点写入多个IP+Port
地址即可,本身cluster.conf
就是提供需要集群部署的场景,可以说是非常的简单,这里需要强调一点,集群节点的IP
地址一定要是内网的IP
。
1. 修改cluster.conf名称
在前面的章节中提到过关于Windwos
如何安装和启动Nacos
,以及nacos
版本的选择,nacos-server
安装包的下载等细节教程,这里不再多啰嗦,不清楚的请翻前面的几篇文章: SpringCloud Alibaba微服务架构(一)- 基于Nacos实现服务注册与发现。
这里我们先找到nacos-server
安装包的位置,找到目录下的cluster.config.example
文件,并且修改名称为cluster.conf
:
2. 编辑集群节点配置
打开cluster.conf
文件,默认内容如下:
#it is ip
#example
10.10.109.214
11.16.128.34
11.16.128.36
这里假设3台nacos分别为: 127.0.0.1:8848
、127.0.0.1:8849
、127.0.0.1:8850
,将上述默认的配置替换为下面配置:
127.0.0.1:8848
127.0.0.1:8849
127.0.0.1:8850
然后将nacos-server
复制3份,分别修改其中application.properties
文件的端口号为8848
、8849
、8850
:
五、修改本地Hosts文件
找到目录: C:\Windows\System32\drivers\etc
下面的hosts
文件,加入:
127.0.0.1 nacos.thinkingcao.com
六、配置Nginx
找到Nginx
的安装目录,配置nginx.config
文件,配置通过访问域名:nacos.thinkingcao.com
自动轮询到3台nacos
节点
修改配置nginx.config
配置如下:
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
upstream thinkingcaonacos{
server 127.0.0.1:8848;
server 127.0.0.1:8849;
server 127.0.0.1:8850;
}
server {
listen 80;
server_name nacos.thinkingcao.com;
location /nacos/ {
proxy_pass http://thinkingcaonacos/nacos/;
}
}
}
双击启动nginx.exe
,访问http://nacos.thinkingcao.com/
出现如下界面说明nginx
配置OK,启动成功。
七、集群模式启动nacos
注意: 在Windwos
环境下,默认是以单例启动的,如果nacos
做了集群节点配置,不能够使用默认的启动方式双击startup.cmd
,这种方式默认是单例启动的,不是以集群节点方式启动,所以启动nacos-8848
、nacos-8849
、nacos-8850
这三台节点是,以以下命令启动:
startup.cmd -m cluster
1. 从控制台启动可以看出,是以集群模式启动nacos-8848
2. 从控制台启动可以看出,是以集群模式启动nacos-8849
3. 从控制台启动可以看出,是以集群模式启动nacos-8850
4. 访问Nginx: http://nacos.thinkingcao.com/nacos/ 发现全部集群节点为空
集群节点为空的原因: 在cluster.conf
文件中,我们不能够写127.0.0.1
,应该写实际的网络IP
地址,所以在cmd
命令行输入ipconfig
查看IP
地址后,将127.0.0.1
替换为网络IP
地址;
如下:
5. 再次访问Nginx域名: http://nacos.thinkingcao.com/nacos/
总结1: 发现存在一个LEADER
和两个FOLLOWER
节点,也就意味着当其中一台挂掉了之后,会重新有一个选举的过程,选出适合的LEADER
节点;
总结2: 集群环境下,在SpringCloud
微服务项目中,服务注册无需变动,只需注册单个nacos即可,当一个服务注册到某台节点上去了之后,会自动同步到其他节点,其底层通过Raft算法去实现保持数据的一致性问题。
总结3:
- nacos在windows版本下运行默认是单机模式,集群运行需要指定执行命令:startup.cmd -m cluster
- nacos在linux版本下运行默认是集群模式,如果想以单机启动,需要指定执行命令: startup.cmd –m standalone
注意: 无需用逗号隔开多个注册地址,只需注册一个即可;
八、Spring Cloud Alibaba教程
下一篇: Spring Cloud Alibaba教程(九):使用Nacos注册中心实现Linux环境集群
九、参考文档
Nacos 文档: https://nacos.io/zh-cn/docs/what-is-nacos.html