1. 集群部署架构图
端口 | 与主端口的偏移量 | 描述 |
---|---|---|
8848 | 0 | 主端口,客户端、控制台及OpenAPI所使用的HTTP端口 |
9848 | 1000 | 客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求 |
9849 | 1001 | 服务端gRPC请求服务端端口,用于服务间同步等 |
7848 | -1000 | raft请求服务端端口,用于处理服务端间的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.6 | 2.4.0 | 8.0.35 | 10.84.3.126 | |
Ubuntu 20.04.6 | 2.4.0 | 10.84.3.127 | ||
Ubuntu 20.04.6 | 2.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环境,请确保是在以下版本环境中安装使用:
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字符,否则无法启动:
注意:
- 密钥需要保持节点间一致,长时间不一致可能导致403 invalid token错误。
- 修改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 验证集群节点状态
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"
仅登录用户可评论,点击 登录