搭建集群nacos
题记
- 在连续两个月的加班工作强度下,项目开发进度完成60%
- 着手准备UAT环境,推送可测试模块
- 此时甲方IT要求,nacos要部署集群,问你需要多少台服务器
- 稍作思考,回复:三台即可,和业务服务器复用
- 白日任务缠身忙,夜间无人话凄凉
- 借这夜色,这月光"厂"景,开干...
大话Nacos
- 长夜漫漫,想必很多人无心睡眠,有朋促膝长谈,亦不乐乎!

- 从CAP定理角度来看nacos提供的两项服务:配置管理、服务发现
- Eric Brewer大叔说:在网络分区(P)不可避免的前提下,一致性(C)和可用性(A)只能二选一
- 网络分区,也就是分布式环境
- 开过大货车的都知道,不像私家车,货车每侧有较多的轮子

- 在货车平衡性测试中,未安装所有轮子的场景下,货车仍然可行驶:是可用性
- 在货物运输中,为了货物和他人安全,安装上所有车轮,上路才安全:是一致性
- Nacos的两项服务同样对应这两个场景
- 针对服务发现 ,需要可用性 ,业务服务α注册到节点C,还未同步到B、D、F节点,每个节点正常对外提供发现服务,不等待同步完成
- 1、节点A收到文件服务β注册请求,nacso不会暂停所有节点同步服务β
- 2、如果服务δ需要上传附件,请求节点B,则获取不到β文件服务地址
- 对于配置管理 ,需要一致性,修改的配置,只有在所有节点上都同步了,才允许推送到各个业务服务
- 针对服务发现 ,需要可用性 ,业务服务α注册到节点C,还未同步到B、D、F节点,每个节点正常对外提供发现服务,不等待同步完成
安装
架构图
- 一览架构可见是经典的负载模模型

部署图
- 按照官方指导,设计图纸落地

- 服务器信息
| 节点 | ip | port |
|---|---|---|
| nacos1 | 192.168.150.101 | 8848 |
| nacos2 | 192.168.150.102 | 8848 |
| nacos3 | 192.168.150.103 | 8848 |
安装包准备
- 再次选择的是2.5.1版本

解压
-
分别解压到三个服务器的指定路径
-
解压后目录
nacos/ ├── bin/ # 启动/停止脚本目录 ├── conf/ # 核心配置文件目录 ├── target/ # Nacos 服务端 JAR 包和依赖 ├── logs/ # 运行时日志目录 ├── data/ # 运行时数据( Derby 数据库、Raft 日志等) ├── plugins/ # 插件目录(3.0+版本引入) ├── LICENSE 和 NOTICE # 开源协议文件 └── README.md -
关注conf目录

初始化数据库
- mysql中创建nacos数据库
- 使用脚本mysql-schema.sql初始化数据表
配置
-
cluster.conf
-
所有节点的 cluster.conf 内容必须完全一致,如下
-
必须写 IP 或 hostname,不能用 127.0.0.1 或 localhost
-
端口号必须和 application.properties 里的 server.port 一致
ip:port
192.168.150.101:8848
192.168.150.102:8848
192.168.150.103:8848
-
-
application.properties.example
- 配置端口
- 配置数据库
- JRaft 和 Distro 协议采用默认值

集群启动
startup.sh -m cluster(集群模式)

nginx配置
- 避免单几点故障出现,需要手动切换其他节点地址
- 避免将节点地址暴露出来
-
HTTP代理(控制台/API)
http {
upstream nacos_cluster {
server 192.168.150.101:8848 weight=1 max_fails=2 fail_timeout=10s;
server 192.168.150.102:8848 weight=1 max_fails=2 fail_timeout=10s;
server 192.168.150.103:8848 weight=1 max_fails=2 fail_timeout=10s;# 会话保持策略,避免控制台登录状态乱跳 ip_hash; } server { listen 80; server_name nacos.example.com; location / { proxy_pass http://nacos_cluster; # 关键Header设置,否则Nacos控制台会出现登录异常 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # WebSocket支持(Nacos 2.x控制台需要) proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # 超时设置 proxy_connect_timeout 5s; proxy_send_timeout 60s; proxy_read_timeout 60s; } # 健康检查接口(可选,用于监控) location /nacos/health { access_log off; proxy_pass http://nacos_cluster; } }}
-
gRPC TCP代理(核心,Nacos 2.x必须)
stream {
upstream nacos_grpc {
server 192.168.150.101:9848 weight=1;
server 192.168.150.102:9848 weight=1;
server 192.168.150.103:9848 weight=1;# gRPC长连接,不需要ip_hash } server { listen 9848; # 监听9848端口,客户端连接此端口 proxy_pass nacos_grpc; # TCP代理超时设置 proxy_timeout 600s; proxy_connect_timeout 5s; }}
浏览器访问

