Nacos(Dynamic Naming and Configuration Service)是一个开源的分布式配置和服务发现系统,特别适用于微服务架构。它基于 CAP 原理,提供了配置管理和服务发现的解决方案,具有命名空间、数据持久化、服务注册与发现、动态配置、分布式集群等核心组件。本文将介绍如何通过 Docker 快速部署 Nacos 2.2.0,并配置其与 MySQL 数据库的认证。

1. Nacos 原理

Nacos 基于 CAP 原理,提供了配置管理和服务发现的解决方案。它主要包含以下几个核心组件:

  • 命名空间(Namespace):用于隔离不同环境或不同应用的配置信息。
  • 数据持久化:支持将配置信息持久化到多种数据源,如 MySQL、Nacos 自带的嵌入式数据库等。
  • 服务注册与发现:允许服务注册到 Nacos 并进行服务发现,实现了服务之间的解耦和动态扩展。
  • 动态配置:支持动态更新配置信息,当配置发生变化时,能够实时通知到相关服务。
  • 分布式集群:Nacos 支持横向扩展,能够构建高可用的分布式集群环境。

2. Nacos 应用场景

Nacos(动态配置服务)是一个用于动态服务发现、配置管理和服务治理的开源平台。它可以帮助实现微服务架构中的服务注册与发现、动态配置管理、服务健康检查和流量管理等功能。以下是一些 Nacos 的应用场景:

  1. 微服务架构中的服务注册与发现: Nacos 可以用作微服务架构中的服务注册中心,服务提供者在启动时注册到 Nacos 中心,服务消费者可以通过 Nacos 中心来发现可用的服务实例。
  2. 动态配置管理: Nacos 提供了动态配置管理功能,可以将配置信息存储在 Nacos 中心,服务在运行时可以动态地从 Nacos 中心获取最新的配置信息,而不需要重启服务。
  3. 服务健康检查: Nacos 支持对服务实例进行健康检查,可以定时检查服务实例的健康状态,及时发现并剔除不健康的实例,确保服务的可用性和稳定性。
  4. 动态路由管理: Nacos 支持动态路由功能,可以根据配置信息动态地调整服务之间的路由规则,实现灵活的流量控制和路由管理。
  5. 分布式系统中的服务发现与配置: 不仅限于微服务架构,Nacos 也可以用于其他分布式系统中,帮助管理服务发现与配置,提升系统的灵活性和可维护性。
  6. 云原生环境中的容器编排: 在云原生环境中,Nacos 可以作为容器编排平台(如 Kubernetes、Docker Swarm 等)的服务发现和配置管理组件,帮助管理容器化应用的服务注册、发现和配置。

3. 拉取 Nacos 镜像

首先,我们需要拉取 Nacos 2.2.0 版本的 Docker 镜像。你可以使用以下命令:

docker pull nacos/nacos-server:v2.2.0
  • 1.

4. 准备数据库初始化文件

在部署 Nacos 前,我们需要准备数据库初始化文件,你可以从以下链接中获取:

执行以下命令来建立数据库:

create database nacos;
use nacos;
-- 执行或者导入 nacos-db.sql
  • 1.
  • 2.
  • 3.

5. 创建数据库用户

为了安全起见,我们创建一个专门用于 Nacos 的数据库用户:

create user 'nacos'@'%' IDENTIFIED BY 'G@nacos2023';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, REFERENCES, INDEX, ALTER ON `nacos`.* TO 'nacos'@'%';
FLUSH PRIVILEGES;
  • 1.
  • 2.
  • 3.

6. 运行 Docker 容器

6.1 单机部署

现在,我们准备运行 Nacos Docker 容器。确保按照以下步骤配置相关环境变量:

docker run -d -p 8848:8848 -p 9848:9848 -p 9849:9849 \
-e NACOS_AUTH_ENABLE=true \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=test-cluster-v1.cluster-cviu6giyqplm.us-east-1.rds.amazonaws.com \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos \
-e MYSQL_SERVICE_USER=nacos \
-e MYSQL_SERVICE_PASSWORD=G@nacos2023 \
-e MYSQL_DATABASE_NUM=1 \
-e NACOS_AUTH_TOKEN_EXPIRE_SECONDS=86400 \
-e NACOS_AUTH_TOKEN=amFjb4NTZWNyZXRLZXkxM3U1ZDlqZDAyaTU3bjBzNTY4OHkyMDIwNzFiYW9nMzQ1Njc5OTAxMjNzZnNhYnkyMDE2Nzg5 \
-e NACOS_AUTH_IDENTITY_KEY=NacosOpendata \
-e NACOS_AUTH_IDENTITY_VALUE=nacos66 \
-v /nacos/logs:/home/nacos/logs \
--restart always \
--name nacos2.2.0 \
nacos/nacos-server:v2.2.0
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.

参数和环境变量的说明:

  • -d: 在后台运行容器。
  • -p 8848:8848 -p 9848:9848 -p 9849:9849: 将容器内部的端口 8848、9848 和 9849 映射到宿主机的相应端口。
  • -e NACOS_AUTH_ENABLE=true: 启用 Nacos 的认证功能。
  • -e MODE=standalone: 设置 Nacos 的运行模式为独立模式。
  • -e SPRING_DATASOURCE_PLATFORM=mysql: 使用 MySQL 作为 Nacos 的数据存储平台。
  • -e MYSQL_SERVICE_HOST=test-cluster-v1.cluster-cviu6giyqplm.us-east-1.rds.amazonaws.com: MySQL 服务器的主机名。
  • -e MYSQL_SERVICE_PORT=3306: MySQL 服务器的端口。
  • -e MYSQL_SERVICE_DB_NAME=nacos: MySQL 中用于存储 Nacos 数据的数据库名称。
  • -e MYSQL_SERVICE_USER=nacos: 连接 MySQL 数据库的用户名。
  • -e MYSQL_SERVICE_PASSWORD=G@nacos2023: 连接 MySQL 数据库的密码。
  • -e MYSQL_DATABASE_NUM=1: Nacos 使用的数据库数量。
  • -e NACOS_AUTH_TOKEN_EXPIRE_SECONDS=86400: 设置认证 token 的过期时间为 86400 秒。
  • -e NACOS_AUTH_TOKEN=...: 认证 token 的值。
  • -e NACOS_AUTH_IDENTITY_KEY=NacosOpendata: 认证身份 key 的值。
  • -e NACOS_AUTH_IDENTITY_VALUE=nacos66: 认证身份 value 的值。
  • -v /nacos/logs:/home/nacos/logs: 将宿主机的 /nacos/logs 目录挂载到容器内部的 /home/nacos/logs 目录,用于存储日志文件。
  • --restart always: 设置容器退出时自动重启。
  • --name nacos2.2.0: 为容器指定名称为 nacos2.2.0
  • nacos/nacos-server:v2.2.0: 指定使用的 Docker 镜像为 nacos/nacos-server 的版本 v2.2.0

以上命令中,我们配置了 MySQL 数据库相关的参数,并且启用了认证功能。

6.2 集群部署

修改NACOS_SERVER_IP参数为对应的机器ip,分别执行

docker run -d \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
-e MODE=cluster \
-e NACOS_AUTH_ENABLE=true \
-e NACOS_SERVER_IP=172.31.78.68 \
-e NACOS_SERVERS="172.31.78.68:8848 172.31.66.4:8848 172.31.66.22:8848"  \
-e MYSQL_SERVICE_DB_PARAM='useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false' \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=base-cluster1.cluster-cvou6goyqplm.us-east-1.rds.amazonaws.com \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos \
-e MYSQL_SERVICE_USER=nacos \
-e MYSQL_SERVICE_PASSWORD=G@nacos2023 \
-e MYSQL_DATABASE_NUM=1 \
-e NACOS_AUTH_TOKEN_EXPIRE_SECONDS=86400 \
-e NACOS_AUTH_TOKEN=amFjb4NTZWNyZXRLZXkxM3U1ZDlqZDAyaTU3bjBzNTY4OHkyMDIwNzFiYW9nMzQ1Njc5OTAxMjNzZnNhYnkyMDE2Nzg5 \
-e NACOS_AUTH_IDENTITY_KEY=NacosOpendata \
-e NACOS_AUTH_IDENTITY_VALUE=nacos123456 \
-v /data/nacos/logs:/home/nacos/logs \
--restart always \
--name nacos2.2.0 \
nacos/nacos-server:v2.2.0
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.

现在,你已经成功部署了 Nacos 2.2.0 版本,并配置了 MySQL 数据库认证。可以通过 http://ip:8848/nacos 访问 Nacos 控制台,健康检测路径:/nacos/v1/console/health/liveness。