1. 集群部署架构图

Nacos_Cluster_architecture

端口与主端口的偏移量描述
88480主端口,客户端、控制台及OpenAPI所使用的HTTP端口
98481000客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求
98491001服务端gRPC请求服务端端口,用于服务间同步等
7848-1000raft请求服务端端口,用于处理服务端间的Raft相关请求

官方集群部署介绍:https://nacos.io/docs/latest/manual/admin/deployment/deployment-cluster/
官方推荐用户把Nacos集群中所有服务节点放到一个vip下面,然后挂到一个域名下面。
三种部署方式:

  • http://ip1:port/openAPI直连ip模式,机器挂则需要修改ip才可以使用。
  • http://SLB:port/openAPI 挂载SLB模式(内网SLB,不可暴露到公网,以免带来安全风险),直连SLB即可,下面挂server真实ip,可读性不好。
  • http://nacos.com:port/openAPI 域名 + SLB模式(内网SLB,不可暴露到公网,以免带来安全风险),可读性好,而且换ip方便,推荐模式
    使用VIP/Nginx请求时,需要配置成TCP转发,不能配置http2转发,否则连接会被nginx断开。 9849和7848端口为服务端之间的通信端口,请勿暴露到外部网络环境和客户端测。

在使用VIP时,需要开放Nacos服务的主端口(默认8848)以及gRPC端口(默认9848)、同时如果对Nacos的主端口有所修改的话,需要对vip中的端口映射作出配置。

2. 环境规划

系统环境Nacos版本MySQL版本节点IP地址VIP/SLB
Ubuntu 20.04.62.4.08.0.3510.84.3.126
Ubuntu 20.04.62.4.0 10.84.3.127
Ubuntu 20.04.62.4.0 10.84.3.128

3. 环境准备

3.1 下载制品

官方推荐使用稳定版本为2.4.0
下载地址:https://download.nacos.io/nacos-server/nacos-server-2.4.0.1.zip

           https://github.com/alibaba/nacos/releases/download/2.4.0.1/nacos-server-2.4.0.1.tar.gz

Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置 Maven环境,请确保是在以下版本环境中安装使用:

  1. 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
  2. 64 bit JDK 1.8+;下载 & 配置

3.2 安装JDK11

下载地址:https://www.oracle.com/cn/java/technologies/downloads/#java11

3.2.1. 解压至/usr/local/bin/

tar zxvf jdk-11.0.24_linux-x64_bin.tar.gz -C /usr/local/bin/ && mv /usr/local/bin/jdk-11.0.24 /usr/local/bin/jdk11

3.2.2. 添加环境变量

cat > /etc/profile.d/jdk11.sh << EOF
export JAVA_HOME=/usr/local/bin/jdk11/
export PATH=/usr/local/bin/jdk11/bin/:$PATH
EOF

source /etc/profile.d/jdk11.sh

3.2.3. 验证环境变量是否生效

root@starlink007:/apps/nacos# java -version
java version "11.0.24" 2024-07-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.24+7-LTS-271)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.24+7-LTS-271, mixed mode)

root@starlink007:/apps/nacos# echo $JAVA_HOME
/usr/local/bin/jdk11/

4. 选择数据源

  • 如果使用内置数据源无需进行任何配置
  • 使用外置数据源生产使用建议至少主备模式,或者采用高可用数据库。

5. 初始化 MySQL 数据库

在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持MySQL数据源能力,具体的操作步骤:

  • 版本要求:5.6.5+
  • 初始化mysql数据库,数据库初始化文件:/apps/nacos/conf/mysql-schema.sql
  • 创建数据库nacos和用户nacos,并授权
  • 修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。

5.1 创建nacos库

docker-compose exec -it mysql-db mysql -uroot -pSec@2024... -h 10.84.3.126 -e "create database nacos;"

5.2 创建nacos用户

docker-compose exec -it mysql-db mysql -uroot -pSec@2024... -h 10.84.3.126 -e "CREATE USER'nacos'@'%' IDENTIFIED WITH mysql_native_password by 'Sec@2024...';"

5.3 授权nacos用户

docker-compose exec -it mysql-db mysql -uroot -pSec@2024... -h 10.84.3.126 -e "GRANT ALL PRIVILEGES ON *.* TO 'nacos'@'%' WITH GRANT OPTION;"

5.4 刷新权限以使更改生效

docker-compose exec -it mysql-db mysql -uroot -pSec@2024... -h 10.84.3.126 -e "FLUSH PRIVILEGES;"

5.5 导入nacos初始化库文件

mysql -unacos -pSec@2024... -h10.84.3.126 nacos < /apps/nacos/conf/mysql-schema.sql

6. 配置集群

6.1 下载并解压至/apps目录

curl -L https://github.com/alibaba/nacos/releases/download/2.4.0.1/nacos-server-2.4.0.1.tar.gz | tar -xz -C /apps/

6.2 可修改默认访问的Console路径(可选)

#修改配置,可选
[root@nacos01 ~]#vi /apps/nacos/conf/application.properties
#修改默认的访问URL路径
#server.servlet.contextPath=/nacos
server.servlet.contextPath=/

6.3 配置集群配置文件

在nacos的解压目录nacos/的conf目录下,有配置文件cluster.conf的模版,修改模版填入Nacos Cluster 成员IP和端口(所有节点都需要修改)

mv /apps/nacos/conf/cluster.conf.example /apps/nacos/conf/cluster.conf

grep -v "^#\|^$" /apps/nacos/conf/cluster.conf
10.84.3.126:8848
10.84.3.127:8848
10.84.3.128:8848


scp /apps/nacos/conf/cluster.conf 10.84.3.127:/apps/nacos/conf/
scp /apps/nacos/conf/cluster.conf 10.84.3.128:/apps/nacos/conf/

6.4 启用登录验证

官方介绍:https://nacos.io/docs/latest/manual/admin/auth/#3-%E6%9C%8D%E5%8A%A1%E7%AB%AF%E5%A6%82%E4%BD%95%E5%BC%80%E5%90%AF%E9%89%B4%E6%9D%83
默认无需登录就可管理nacos,基于安全,可以启用登录验证功能
开启鉴权之前,需要配置自定义的用于生成JWT令牌的密钥,在application.properties中的配置信息,自定义密钥时,推荐将配置项设置为Base64编码的字符串,且原始密钥长度不得低于32字符,否则无法启动:
注意:

  1. 密钥需要保持节点间一致,长时间不一致可能导致403 invalid token错误。
  2. 修改token.secret.key时,请确保token是有效的,如果修改成无效值,会导致后续无法登录,请求访问异常。

6.4.1 生成 Token 密钥

openssl rand -base64 33
#配置文件中要用
DXAuQ9ij5DMYB+/+nLlW/K5WFMK//7thkTi/6wkwanzA

6.5 修改配置文件新增MySQL数据源配置和登录验证配置

修改文件/apps/nacos/conf/application.properties,增加支持MySQL数据源配置,添加MySQL数据源的url、用户名和密码。

root@starlink007:~# grep -v "^#\|^$" /apps/nacos/conf/application.properties
server.servlet.contextPath=/
server.error.include-message=ALWAYS
server.port=8848
#MySQL数据源配置
spring.sql.init.platform=mysql
db.num=1
db.url.0=jdbc:mysql://10.84.3.126:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user.0=nacos
db.password.0=Sec@2024...
db.pool.config.connectionTimeout=30000
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2
nacos.config.push.maxRetryTime=50
server.tomcat.mbeanregistry.enabled=true
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.rotate=true
server.tomcat.accesslog.file-date-format=.yyyy-MM-dd-HH
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i
server.tomcat.basedir=file:.
nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-ui/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
nacos.core.auth.system.type=nacos
#登录验证配置
nacos.core.auth.enabled=true
nacos.core.auth.caching.enabled=true
nacos.core.auth.enable.userAgentAuthWhite=false
nacos.core.auth.server.identity.key=superAdmin
nacos.core.auth.server.identity.value=Sec@2024...
nacos.core.auth.plugin.nacos.token.cache.enable=false
nacos.core.auth.plugin.nacos.token.expire.seconds=18000
nacos.core.auth.plugin.nacos.token.secret.key=DXAuQ9ij5DMYB+/+nLlW/K5WFMK//7thkTi/6wkwanzA
nacos.istio.mcp.server.enabled=false

三台机器的配置文件一样,所以直接copy文件即可

#将配置同步到其它的节点
scp /apps/nacos/conf/application.properties 10.84.3.127:/apps/nacos/conf/application.properties
scp /apps/nacos/conf/application.properties 10.84.3.128:/apps/nacos/conf/application.properties

7. 启动和关闭服务

7.1 使用内置数据源启动方式(三台节点都执行)

cd /apps/nacos/bin/ && bash startup.sh -p embedded

7.2 使用外置数据源启动方式(三台节点都执行)

cd /apps/nacos/bin/ && bash startup.sh && tail -f /apps/nacos/logs/start.out

7.3 验证是否启动成功(三台节点都验证)

/usr/local/bin/jdk11//bin/java   -server  -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/apps/nacos/logs/java_heapdump.hprof -XX:-UseLargePages -Dnacos.member.list= -Xlog:gc*:file=/apps/nacos/logs/nacos_gc.log:time,tags:filecount=10,filesize=100m -Dloader.path=/apps/nacos/plugins,/apps/nacos/plugins/health,/apps/nacos/plugins/cmdb,/apps/nacos/plugins/selector -Dnacos.home=/apps/nacos -jar /apps/nacos/target/nacos-server.jar  --spring.config.additional-location=file:/apps/nacos/conf/ --logging.config=/apps/nacos/conf/nacos-logback.xml --server.max-http-header-size=524288
nacos is starting with cluster
nacos is starting. you can check the /apps/nacos/logs/start.out
/usr/local/bin/jdk11//bin/java   -server  -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/apps/nacos/logs/java_heapdump.hprof -XX:-UseLargePages -Dnacos.member.list= -Xlog:gc*:file=/apps/nacos/logs/nacos_gc.log:time,tags:filecount=10,filesize=100m -Dloader.path=/apps/nacos/plugins,/apps/nacos/plugins/health,/apps/nacos/plugins/cmdb,/apps/nacos/plugins/selector -Dnacos.home=/apps/nacos -jar /apps/nacos/target/nacos-server.jar  --spring.config.additional-location=file:/apps/nacos/conf/ --logging.config=/apps/nacos/conf/nacos-logback.xml --server.max-http-header-size=524288

         ,--.
       ,--.'|
   ,--,:  : |                                           Nacos 2.4.0
,`--.'`|  ' :                       ,---.               Running in cluster mode, All function modules
|   :  :  | |                      '   ,'\   .--.--.    Port: 8848
:   |   \ | :  ,--.--.     ,---.  /   /   | /  /    '   Pid: 2886584
|   : '  '; | /       \   /     \.   ; ,. :|  :  /`./   Console: http://10.84.3.128:8848//index.html
'   ' ;.    ;.--.  .-. | /    / ''   | |: :|  :  ;_
|   | | \   | \__\/: . ..    ' / '   | .; : \  \    `.      https://nacos.io
'   : |  ; .' ," .--.; |'   ; :__|   :    |  `----.   \
|   | '`--'  /  /  ,.  |'   | '.'|\   \  /  /  /`--'  /
'   : |     ;  :   .'   \   :    : `----'  '--'.     /
;   |.'     |  ,     .-./\   \  /            `--'---'
'---'        `--`---'     `----'

2024-08-14 15:17:13,793 INFO The server IP list of Nacos is [10.84.3.126:8848, 10.84.3.127:8848, 10.84.3.128:8848]

2024-08-14 15:17:14,794 INFO Nacos is starting...

2024-08-14 15:17:15,796 INFO Nacos is starting...

2024-08-14 15:17:16,797 INFO Nacos is starting...

2024-08-14 15:17:17,797 INFO Nacos is starting...

2024-08-14 15:17:18,798 INFO Nacos is starting...

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.alipay.sofa.jraft.util.internal.UnsafeUtil (jar:file:/apps/nacos/target/nacos-server.jar!/BOOT-INF/lib/jraft-core-1.3.14.jar!/) to field java.nio.Buffer.address
WARNING: Please consider reporting this to the maintainers of com.alipay.sofa.jraft.util.internal.UnsafeUtil
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
2024-08-14 15:17:19,798 INFO Nacos is starting...

2024-08-14 15:17:20,799 INFO Nacos is starting...

2024-08-14 15:17:21,799 INFO Nacos is starting...

2024-08-14 15:17:22,625 INFO Nacos started successfully in cluster mode. use external storage

7.4 访问Console

三台节点都有Console,登录其一即可

http://10.84.3.126:8848
http://10.84.3.127:8848
http://10.84.3.128:8848

7.5 设置管理员密码

自2.4.0版本开始,Nacos构建时不再提供管理员用户nacos的默认密码,需要在首次开启鉴权后,通过API或Nacos控制台进行管理员用户nacos的密码初始化步骤,具体操作如下:
当Nacos集群开启鉴权后访问Nacos控制台时,会校验是否已经初始化过管理员用户nacos的密码,若发现未初始化密码时,则会跳转至初始化密码的页面进行初始化。在该页面密码文本框内输入自定义密码,然后点击提交即可;
注意:若密码文本框内未输入自定义密码或输入空白密码,Nacos将会生成随机密码,请保存好生成的随机密码。
初始化成功后会弹窗提示初始化成功,并展示指定的密码或随机生成的密码,请保存好此密码。
密码保存在nacos库中的users表中

mysql -unacos -pSec@2024... -h 10.84.3.126 nacos -e 'select * from users'
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------+--------------------------------------------------------------+---------+
| username | password                                                     | enabled |
+----------+--------------------------------------------------------------+---------+
| nacos    | $2a$10$xWJOpuDywPiWD5nsWh/r1ejojUfDYcs/Qi/UFzw5fxPh3hIfnOxr2 |       1 |
+----------+--------------------------------------------------------------+---------+

7.6 密码强度注意事项

重要:初始化管理员用户nacos时,创建或用户密码更新操作期间不强制执行特定密码长度。Nacos集群管理员有责任对自行构建的密码强度进行控制。为了避免与密码强度相关的安全风险,强烈建议初始化时使用强度较高的密码。
注意:因为是集群方式,只需要在其中任意节点的Console 界面初始化密码即可

7.7 验证集群节点状态

Nacos_Cluster_runing

8. 服务注册&发现和配置管理

8.1 服务注册

curl --data-raw 'username=nacos&password=Sec%402024...' -X POST 'http://127.0.0.1:8848/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'

8.2 服务发现

curl --data-raw 'username=nacos&password=Sec%402024...' -X GET 'http://127.0.0.1:8848/v1/ns/instance/list?serviceName=nacos.naming.serviceName'

8.3 发布配置

curl --data-raw 'username=nacos&password=Sec%402024...' -X POST "http://127.0.0.1:8848/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld"

8.4 获取配置

curl --data-raw 'username=nacos&password=Sec%402024...' -X GET "http://127.0.0.1:8848/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"
最后修改:2024 年 08 月 16 日
如果觉得我的文章对你有用,请随意赞赏