当前位置: 首页 > news >正文

Nacos 环境搭建:从单机开发到集群生产部署

一、引言

我们在前面了解了Nacos的基本概念,本文将从开发者的实际视角出发,以通俗易懂的语言和详细的步骤,搭建 Nacos 环境。无论是简单的单机部署,还是复杂的集群部署,都将一一为你揭开神秘面纱。

二、单机部署

对于开发者而言,在本地环境进行开发和测试时,Nacos 的单机部署是最便捷高效的选择。它就像一位贴心的助手,在开发初期为我们提供快速搭建服务发现与配置管理环境的支持,让我们能够专注于业务逻辑的实现,而无需为复杂的集群配置烦恼。接下来,让我们一步步揭开 Nacos 单机部署的神秘面纱。

2.1 环境准备

在开始部署前,我们需要先满足一些基本的环境要求,这些准备工作就如同搭建高楼的基石,至关重要。

(1)JDK 要求:Nacos 运行依赖 Java 环境,至少需要 JDK 1.8+ 。为了获得更好的性能和稳定性,推荐使用 JDK 11+ ,如果是在生产环境,强烈建议采用 JDK 17+ 。安装好 JDK 后,务必配置好 JAVA_HOME 环境变量,这一步是让系统能够正确找到 Java 运行路径的关键 。比如在 Linux 系统中,我们可以通过编辑~/.bashrc文件,添加export JAVA_HOME=/path/to/jdk(这里的/path/to/jdk替换为实际的 JDK 安装路径),然后执行source ~/.bashrc使配置生效。​

(2)端口检查:Nacos 启动时会占用几个关键端口,8848 用于 Nacos 控制台的访问,9848 用于 gRPC 客户端通信,9849 用于服务端通信。在启动 Nacos 之前,一定要确保这些端口未被其他程序占用。可以使用netstat -ano | findstr :端口号(Windows 系统)或者lsof -i :端口号(Linux 和 macOS 系统)命令来检查端口占用情况,如果发现端口被占用,可以通过结束占用进程或者修改 Nacos 配置文件中的端口号来解决 。

(3)存储选择

  • 开发测试:在开发和测试阶段,为了简化配置,Nacos 提供了默认的嵌入式数据库 Derby,我们无需进行额外的数据库配置,Nacos 会自动使用 Derby 来存储数据,方便快捷,就像自带了一个小型的数据仓库。​
  • 生产环境:然而,在生产环境中,Derby 的局限性就会显现出来,因此必须配置 MySQL 5.7+/8.0 。首先要提前创建好数据库,比如创建一个名为nacos_config的数据库,然后执行 Nacos 安装目录下conf/mysql-schema.sql文件,这个文件就像是数据库的 “初始化蓝图”,会帮助我们创建好 Nacos 所需的表结构和初始数据 。

2.2 快速启动

环境准备就绪后,就可以启动 Nacos 了,这里为大家提供两种常见的启动方式,大家可以根据自己的喜好和实际情况选择。

方式一:原生部署(适合本地调试)

  • 从 Nacos 官方 GitHub 仓库(https://github.com/alibaba/nacos/releases )下载最新的稳定版本安装包,目前最新版本为 2.5.1 ,下载完成后解压到指定目录,比如D:\nacos(Windows 系统)或者/usr/local/nacos(Linux 系统)。
  • 进入解压后的nacos\bin目录(Windows)或/usr/local/nacos/bin(Linux),如果是在 Windows 系统下,用记事本打开startup.cmd文件,找到set MODE="cluster"这一行,将其修改为set MODE="standalone",表示以单机模式启动;如果是 Linux 系统,使用vi startup.sh命令打开启动脚本,同样将MODE="cluster"改为MODE="standalone" 。
  • 保存修改后,在bin目录下双击startup.cmd(Windows)或者执行sh startup.sh(Linux)命令,Nacos 就开始启动啦!启动过程中,会在命令行窗口输出各种启动信息,如果一切顺利,我们就能看到 Nacos 成功启动的提示 。

方式二:Docker 轻量化部署(推荐)​

如果你对 Docker 比较熟悉,那么使用 Docker 部署 Nacos 会更加简洁高效,它就像一个 “魔法盒子”,将 Nacos 及其依赖的环境打包在一起,方便快速部署。​

  1. 确保已经安装了 Docker 环境,如果没有安装,可以参考 Docker 官方文档(https://docs.docker.com/get-docker/ )进行安装 。​
  2. 拉取 Nacos 的 Docker 镜像,在命令行中执行docker pull nacos/nacos-server:2.5.1(这里的版本号可以根据实际情况替换),Docker 会自动从镜像仓库下载 Nacos 镜像 。​
  3. 创建挂载目录,用于将容器内的配置文件和日志文件挂载到宿主机上,方便后续查看和修改。比如在 Windows 系统下,可以执行mkdir -p D:\nacos\data\logs D:\nacos\data\conf,在 Linux 系统下执行mkdir -p /data/nacos/{logs,conf} 。​
  4. 启动 Nacos 容器,执行以下命令:
docker run -d \
-p 8848:8848 \
--name nacos \
-v /data/nacos/logs:/home/nacos/logs \
-v /data/nacos/conf:/home/nacos/conf \
-e MODE=standalone \
nacos/nacos-server:2.5.1

这条命令的含义是:以守护进程模式(-d)运行容器,将容器的 8848 端口映射到宿主机的 8848 端口(-p 8848:8848),容器名称为nacos(--name nacos),将宿主机的/data/nacos/logs目录挂载到容器内的/home/nacos/logs目录(-v /data/nacos/logs:/home/nacos/logs),将宿主机的/data/nacos/conf目录挂载到容器内的/home/nacos/conf目录(-v /data/nacos/conf:/home/nacos/conf),并设置启动模式为单机模式(-e MODE=standalone) 。

2.3 启动验证与控制台登录

Nacos 启动后,我们需要验证它是否正常运行,并登录到控制台进行后续操作。

  • 日志检查:通过查看日志可以了解 Nacos 的启动过程和是否存在异常。进入 Nacos 安装目录下的logs目录,执行tail -f start.out命令(Windows 系统可以使用 Notepad++ 等工具打开start.out文件查看实时日志),如果看到Nacos started successfully字样,恭喜你,Nacos 已经成功启动啦!如果日志中出现错误信息,就需要仔细排查问题,比如端口冲突、JDK 版本不兼容等 。
  • 控制台访问:打开浏览器,输入http://localhost:8848/nacos,即可进入 Nacos 控制台登录页面。默认的账号密码都是nacos,不过在生产环境中,一定要及时修改这个默认密码,以确保系统安全,就像给我们的 “秘密基地” 换上一把坚固的锁 。登录后,我们就能看到 Nacos 简洁直观的控制台界面,在这里可以进行服务注册、配置管理等各种操作 。

2.4 开发优化

在单机部署的基础上,为了让 Nacos 在开发过程中更加稳定和安全,我们还可以进行一些优化配置。

  • 开启鉴权(测试环境可选):虽然在测试环境中鉴权可能不是必需的,但为了提前适应生产环境的安全要求,我们可以选择开启鉴权。在conf/application.properties文件中添加以下配置:
nacos.core.auth.enabled=true
nacos.core.auth.server.identity.key=nacos
nacos.core.auth.server.identity.value=nacos

这样就开启了简单的身份验证,访问 Nacos 控制台时需要提供用户名和密码 。​

  • 调整 JVM 参数(避免内存溢出):Nacos 在运行过程中需要占用一定的内存资源,如果默认的 JVM 参数设置不合理,可能会导致内存溢出等问题。我们可以修改bin/startup.sh(Linux)或startup.cmd(Windows)文件,设置合适的 JVM 参数,比如JVM_XMS=1g JVM_XMX=1g JVM_XMN=512m,这表示初始堆大小、最大堆大小和新生代大小分别为 1GB 和 512MB 。合理调整这些参数,可以让 Nacos 在运行时更加稳定,避免因内存不足而出现异常 。​
  • 配置文件规范:在使用 Nacos 进行配置管理时,为了提高配置的可读性和可维护性,建议遵循一定的数据 ID 命名规范。数据 ID 可以使用服务名-profile.扩展名的格式,比如user-service-dev.yaml表示user-service服务在开发环境下的 YAML 格式配置文件 。这样的命名方式清晰明了,方便我们在众多配置文件中快速找到所需的配置 。

三、集群部署

在生产环境中,为了确保 Nacos 的高可用性和稳定性,集群部署是必不可少的选择。Nacos 集群基于 Raft 协议实现了分布式一致性,能够在部分节点故障的情况下依然保持服务的正常运行,为微服务架构提供了坚实可靠的服务发现与配置管理基础 。接下来,让我们详细了解一下 Nacos 集群部署的关键步骤和要点。

3.1 核心步骤:从数据库到节点配置

步骤 1:初始化共享 MySQL 数据库​

在集群部署中,Nacos 需要使用一个共享的数据库来存储配置信息、服务注册信息等,这里我们选择 MySQL 作为外部数据源。​

(1) 创建数据库:使用 MySQL 客户端工具,登录到 MySQL 服务器,执行以下 SQL 语句创建名为nacos的数据库,并设置字符集为utf8mb4,以支持更多的字符编码 :

CREATE DATABASE nacos CHARACTER SET utf8mb4;

(2) 初始化表结构:进入 Nacos 安装目录下的conf目录,找到mysql-schema.sql文件,这个文件包含了 Nacos 所需的所有表结构和初始数据 。在 MySQL 客户端中,执行该文件中的 SQL 语句,初始化数据库表结构 :

source /path/to/nacos/conf/mysql-schema.sql;

(3) 授权专用用户:为了保证数据库的安全,不建议在生产环境中使用root用户连接 Nacos 数据库。我们可以创建一个专用的 Nacos 用户,并为其授予对nacos数据库的所有权限 :

CREATE USER 'nacos_user'@'%' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON nacos.* TO 'nacos_user'@'%';
FLUSH PRIVILEGES;

这里的nacos_user是用户名,your_password是密码,%表示该用户可以从任何主机连接到 MySQL 服务器 。通过这种方式,我们可以有效地控制数据库的访问权限,提高系统的安全性 。

步骤 2:节点配置文件修改​

在每个 Nacos 节点上,都需要修改配置文件,以配置集群节点信息和数据库连接信息。​

(1) 修改application.properties:进入 Nacos 节点的conf目录,找到application.properties文件,修改以下配置项,配置 MySQL 数据库连接信息 :

spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://192.168.1.103:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
db.user.0=nacos_user
db.password.0=your_password

这里的192.168.1.103是 MySQL 服务器的 IP 地址,3306是 MySQL 的端口号,nacos_user和your_password分别是前面创建的数据库用户和密码 。

(2) 配置集群节点:在conf目录下,找到cluster.conf文件(如果没有,可以复制cluster.conf.example文件并重命名为cluster.conf),添加集群中所有节点的 IP 地址和端口号,每个节点占一行 :

192.168.1.100:8848
192.168.1.101:8848
192.168.1.102:8848

这个文件就像是集群节点之间的 “通讯录”,每个节点通过读取这个文件,就可以知道集群中其他节点的位置,从而实现节点之间的通信和数据同步 。​

步骤 3:Docker 集群部署(生产推荐)​

使用 Docker 进行 Nacos 集群部署,不仅可以简化部署过程,还能提高环境的一致性和可移植性。下面是使用 Docker Compose 进行 Nacos 集群部署的示例 :​

(1) 创建docker-compose.yml文件:在一个新的目录下,创建docker-compose.yml文件,内容如下 :

version: '3'
services:nacos1:image: nacos/nacos-server:2.5.1container_name: nacos1ports:- 8848:8848- 9848:9848environment:- MODE=cluster- NACOS_SERVERS=192.168.1.100:8848 192.168.1.101:8848 192.168.1.102:8848- SPRING_DATASOURCE_PLATFORM=mysql- MYSQL_SERVICE_HOST=192.168.1.103- MYSQL_SERVICE_PORT=3306- MYSQL_SERVICE_USER=nacos_user- MYSQL_SERVICE_PASSWORD=your_password- MYSQL_SERVICE_DB_NAME=nacosvolumes:- /data/nacos1/logs:/home/nacos/logs- /data/nacos1/conf:/home/nacos/confnacos2:image: nacos/nacos-server:2.5.1container_name: nacos2ports:- 8849:8848- 9849:9848environment:- MODE=cluster- NACOS_SERVERS=192.168.1.100:8848 192.168.1.101:8848 192.168.1.102:8848- SPRING_DATASOURCE_PLATFORM=mysql- MYSQL_SERVICE_HOST=192.168.1.103- MYSQL_SERVICE_PORT=3306- MYSQL_SERVICE_USER=nacos_user- MYSQL_SERVICE_PASSWORD=your_password- MYSQL_SERVICE_DB_NAME=nacosvolumes:- /data/nacos2/logs:/home/nacos/logs- /data/nacos2/conf:/home/nacos/confnacos3:image: nacos/nacos-server:2.5.1container_name: nacos3ports:- 8850:8848- 9850:9848environment:- MODE=cluster- NACOS_SERVERS=192.168.1.100:8848 192.168.1.101:8848 192.168.1.102:8848- SPRING_DATASOURCE_PLATFORM=mysql- MYSQL_SERVICE_HOST=192.168.1.103- MYSQL_SERVICE_PORT=3306- MYSQL_SERVICE_USER=nacos_user- MYSQL_SERVICE_PASSWORD=your_password- MYSQL_SERVICE_DB_NAME=nacosvolumes:- /data/nacos3/logs:/home/nacos/logs- /data/nacos3/conf:/home/nacos/conf

这个docker-compose.yml文件定义了 3 个 Nacos 容器,每个容器都映射了不同的端口,以避免端口冲突 。通过environment配置项,设置了 Nacos 的运行模式为集群模式,并指定了集群节点列表和数据库连接信息 。同时,通过volumes配置项,将容器内的日志目录和配置目录挂载到宿主机上,方便后续查看和管理 。

(2) 启动集群:在docker-compose.yml文件所在的目录下,执行以下命令启动 Nacos 集群 :

docker-compose up -d

3.2 高可用验证

集群部署完成后,需要对其进行高可用性验证,确保集群能够正常工作,并且在节点故障时能够自动进行故障转移。​

  • 节点状态检查:打开浏览器,登录到任一 Nacos 节点的控制台(例如http://192.168.1.100:8848/nacos),在控制台中点击 “集群管理”,查看节点列表,确保所有节点的状态都显示为 “UP” 。如果有节点状态为 “DOWN”,则需要检查该节点的日志,排查故障原因 。比如可能是节点之间的网络连接问题,或者是节点配置错误等 。​
  • 数据同步验证:在任一节点的控制台中,创建一个新的配置项,例如创建一个名为test-config的配置,内容为{"key": "value"} 。然后登录到其他节点的控制台,查看是否能够实时同步到这个配置项 。如果数据没有同步,可能是数据库连接问题,或者是节点之间的 gRPC 通信出现故障 。

四、总结

通过本文的详细讲解,相信你已经全面掌握了 Nacos 从单机到集群的部署方法,无论是在本地开发环境中快速搭建 Nacos 进行功能验证,还是在生产环境中构建高可用的 Nacos 集群,都能轻松应对 。下面让我们来总结一下 Nacos 部署的最佳实践要点 。

在本地开发与测试阶段,单机模式是我们的首选 。它部署简单快捷,能够快速满足我们在开发过程中对服务发现和配置管理的需求 。在单机部署时,优先推荐使用 Docker 方式启动 Nacos 。这种方式不仅能极大地简化部署流程,还能确保开发环境的一致性,就像将 Nacos 及其依赖环境封装在一个 “集装箱” 中,方便快捷地为我们提供服务 。同时,不要忘记进行一些基本的优化配置,如开启鉴权功能提高安全性,合理调整 JVM 参数避免内存溢出,遵循规范命名数据 ID 提升配置管理的可读性和可维护性 。

Tips: 为了大家快速高效的学习,已经将文章提交到了git仓库,涵盖后端大部分技术,以及后端学习路线,仓库内容会持续更新,建议 Star 收藏 以便随时查看https://gitee.com/bxlj/java-article。

http://www.dtcms.com/a/531729.html

相关文章:

  • OpenWrt | 实现限制只有指定设备才能访问 luci 和 使用 SSH 等方式管理设备的方法
  • 数据库圣经-----最终章JDBC
  • 小贷做网站客户推广渠道有哪些
  • SAP SD交货单明细查询接口分享
  • Java Spring原理 --- Bean的作用域,Bean的生命周期,Spring自动配置
  • TCP三次握手与四次挥手通俗理解
  • 电商网站如何设计内容能源产品网站建设多少钱
  • 门户网站的发布特点网站子栏目设计
  • 赣州企业网站建设公司苏州网站定制公司哪家好
  • 网页设计与网站建设的课后习题答案外贸 企业网站 建设
  • 呼伦贝尔网站建设平台海口网站运营托管费用
  • 网站外包费用怎么做分录个人做广播网站需要注意什么
  • 教育网站设计欣赏建一个公司网站要多少钱
  • 广州快速建站公司推荐做关于植物的网站
  • 厦门网站建设哪家专业黔东南小程序开发公司
  • 网站开发公司安心加盟苏州排名搜索优化
  • 响应式网站公司怎么做网站
  • 老师问我做网站用到什么创新技术江苏网站建设空间
  • wordpress 菜单没了网站关键词排名seo
  • 立网站系网站开发用什么工具好
  • html 网站开发软件网站永久免费建站
  • 万网网站开发世界500强企业中国有哪些
  • 漳州招商局规划建设局网站饿了么网站做生鲜吗
  • 官方网站优化方法字体设计转换器
  • 丽江网站建设c3sales软件app开发培训
  • 网站建设培训相关资料进入wordpress后台
  • 汽车网站建设需要多少钱西安印象网站建设
  • 西安网站网页设计电商平台seo
  • 阜新网站开发公司大连网站建设网站建设
  • 网站建设知识文章wordpress添加友链申请