集群布署架构
Nacos官方提供的集群模式搭建架构如下:
如上图,SLB通常可以使用nginx来实现,而DNS则可以使用Bind服务实现一个局域网环境的DNS解析,或者直接修改主机的hosts文件做域名解析。
另外,图种缺少了关于数据层的说明,其实在Nacos集群部署模式下,数据层通常也是高可用架构的。
所以通常来讲Nacos的集群部署架构应该如下图所示:
端口分配如下表:
端口 | 与主端口的偏移量 | 描述 |
---|---|---|
8848 | 0 | 主端口,客户端、控制台及OpenAPI所使用的HTTP端口 |
9848 | 1000 | 客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求 |
9849 | 1001 | 服务端gRPC请求服务端端口,用于服务间同步等 |
7848 | -1000 | Jraft请求服务端端口,用于处理服务端间的Raft相关请求 |
使用VIP/nginx请求时,需要配置成TCP转发,不能配置http2转发,否则连接会被nginx断开。9849和7848端口为服务端之间的通信端口,请勿暴露到外部网络环境和客户端侧。
集群布署实战
准备数据库环境
生产环境的MySQL至少使用主备架构。
根据conf/mysql-schema.sql
文件的ddl语句准备数据库及其表,如果从源码启动,使用distribution\conf\mysql-schema.sql
文件中的ddl语句。
配置Nacos
3个或3个以上Nacos节点才能构成集群。
在nacos的解压目录的conf目录下,有配置文件cluster.conf
,请每行配置成集群节点的IP地址和对应端口。
1 | 192.168.10.100:8848 |
之后修改conf目录下的application.properties
文件,开启默认鉴权插件(可选)。
1 | nacos.core.auth.enabled=true |
修改数据源配置:
1 | spring.sql.init.platform=mysql |
启动Nacos集群
分别启动各个节点的nacos服务:
1 | sh startup.sh |
若节点启动成功,将会看到如下日志:
1 | 2024-05-14 23:11:51,952 INFO Nacos started successfully in cluster mode. use external storage |
另外,登录nacos管理界面,在左侧菜单栏路径“集群管理”->“几点列表”将能看到所有集群节点信息。
停止Nacos集群
依次在各个Nacos集群节点停止服务即可:
1 | sh shutdown.sh |
验证集群环境
服务注册
1 | curl -X POST 'http://192.168.10.100:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080' |
注意:如果开启默认鉴权插件,需要在Header中带上用户名密码。
服务端日志:
1 | [14/May/2024:23:24:14 +0800] "POST /nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080 HTTP/1.1" 200 2 24 curl/7.88.1 - |
服务发现
1 | curl -X GET 'http://192.168.10.100:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName' |
注意:如果开启默认鉴权插件,需要在Header中带上用户名密码。
服务端日志:
1 | [14/May/2024:23:26:08 +0800] "GET /nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName HTTP/1.1" 200 623 10 curl/7.88.1 - |
发布配置
1 | curl -X POST "http://192.168.10.100:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=helloWorld" |
注意:如果开启默认鉴权插件,需要在Header中带上用户名密码。
服务端日志:
1 | [14/May/2024:23:27:37 +0800] "POST /nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=helloWorld HTTP/1.1" 200 14 66 curl/7.88.1 - |
获取配置
1 | curl -X GET "http://192.168.10.100:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test" |
注意:如果开启默认鉴权插件,需要在Header中带上用户名密码。
服务端日志:
1 | [14/May/2024:23:28:43 +0800] "GET /nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test HTTP/1.1" 200 20 7 curl/7.88.1 - |
【参考】
Nacos集群部署说明
Nacos 实现环境隔离(项目、日常、预发、安全生产、线上)的实践
Nacos生产环境集群部署
Nacos集群搭建部署(超详细)
搭建生产可用的Nacos集群
简易搭建局域网内部dns服务器
如何快速在内网搭建一个DNS服务器
MySQL高可用方案选型参考