Loading... # 1. 集群部署架构图 [](https://oss.shackles.cn/Nacos/Nacos_Cluster_architecture.png) Nacos_Cluster_architecture | 端口 | 与主端口的偏移量 | 描述 | | ------ | ------------------ | ------------------------------------------------------------ | | 8848 | 0 | 主端口,客户端、控制台及OpenAPI所使用的HTTP端口 | | 9848 | 1000 | 客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求 | | 9849 | 1001 | 服务端gRPC请求服务端端口,用于服务间同步等 | | 7848 | -1000 | raft请求服务端端口,用于处理服务端间的Raft相关请求 | 官方集群部署介绍:[https://nacos.io/docs/latest/manual/admin/deployment/deployment-cluster/](https://nacos.io/docs/latest/manual/admin/deployment/deployment-cluster/) 官方推荐用户把Nacos集群中所有服务节点放到一个vip下面,然后挂到一个域名下面。 三种部署方式: * [http://ip1:port/openAPI](http://ip1:port/openAPI)直连ip模式,机器挂则需要修改ip才可以使用。 * [http://SLB:port/openAPI](http://slb:port/openAPI) 挂载SLB模式(内网SLB,不可暴露到公网,以免带来安全风险),直连SLB即可,下面挂server真实ip,可读性不好。 * [http://nacos.com:port/openAPI](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://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+;[下载](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) & [配置](https://docs.oracle.com/cd/E19182-01/820-7851/inst_cli_jdk_javahome_t/)。 ## 3.2 安装JDK11 下载地址:[https://www.oracle.com/cn/java/technologies/downloads/#java11](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](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 验证集群节点状态 [](https://oss.shackles.cn/Nacos/Nacos_Cluster_runing.png) 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" ``` 最后修改:2025 年 04 月 02 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏