Nacos注册中心搭建

629 阅读9分钟

Nacos注册中心搭建

前言:最近新项目用到了Nacos,之前接触的都是Eureka,所以写这篇笔记记录一下Nacos注册中心的搭建!

一、Nacos 介绍和本地环境的搭建

什么是Nacos?

yrtysv-0.png

Nacos(Dynamic Naming and Configuration Service)官网的首页赫然在目的一段话“一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台”。

进入Nacos的官方文档有更详细的介绍,这里简单说一下重点,详情🔎可以浏览Nacos官网:nacos.io/

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以**“服务”**为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

Nacos 支持几乎所有主流类型的**“服务”**的发现、配置和管理:

Nacos的产品功能

  • 服务发现和服务健康监测

    Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDKOpenAPI、或一个独立的Agent注册 Service 后,服务消费者可以使用DNS TODOHTTP&API查找和发现服务。

    Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。Nacos 支持传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、用户自定义)的健康检查。 对于复杂的云环境和网络拓扑环境中(如 VPC、边缘网络等)服务的健康检查,Nacos 提供了 agent 上报模式和服务端主动检测2种健康检查模式。Nacos 还提供了统一的健康检查仪表盘,帮助您根据健康状态管理服务的可用性及流量。

  • 动态配置服务

    动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。

    动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。

    配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。

    Nacos 提供了一个简洁易用的UI (控制台样例 Demo) 帮助您管理所有的服务和应用的配置。Nacos 还提供包括配置版本跟踪、金丝雀发布、一键回滚配置以及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性,帮助您更安全地在生产环境中管理配置变更和降低配置变更带来的风险。

  • 动态 DNS 服务

    动态 DNS 服务支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。动态DNS服务还能让您更容易地实现以 DNS 协议为基础的服务发现,以帮助您消除耦合到厂商私有服务发现 API 上的风险。

    Nacos 提供了一些简单的 DNS APIs TODO 帮助您管理服务的关联域名和可用的 IP

  • 服务及其元数据管理

    Nacos 能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。

Docker 安装 Nacos

因为云服务器暂时没申请下来,我们先用局域网内一台PC用docker安装Nacos

准备要挂载的文件夹

docker pull之前,我们现在本地文件夹下,创建一个nacos文件夹,等容器运行时,将Nacos容器中的配置文件、持久化文件挂载出来,防止容器重启时数据丢失等问题:

拉取镜像

查看官方文档,可以看到目前Nacos的稳定版本为2.4.3

那么,我们就下载2.4.3版本的Nacos镜像

docker pull nacos/nacos-server:v2.4.3

yxp0z2-0.png

等待安装,若出现下面这样的情况,执行完成后,执行如下命令,查看本地已经下载的镜像列表,确认镜像是否下载成功

docker images

z4w5iy-0.png

运行Nacos容器

镜像下载成功后,执行如下命令,运行一个Nacos容器:

docker run -d --name MyNacos --env MODE=standalone -p 8848:8848 -p 9848:9848 nacos/nacos-server:v2.4.3

[!IMPORTANT]

各项参数的作用:

  1. docker run:启动一个新的容器的命令。
  2. -d:这个选项告诉 Docker 在后台(detached mode)运行容器,这样你就不会看到容器的输出日志,它将在后台运行。
  3. --name nacos:为新创建的容器指定一个名字,方便后续的管理和操作,这里命名为 MyNacos
  4. --env MODE=standalone:设置容器内环境变量。这里设置 MODE=standalone,表示 Nacos 以单机模式运行,而不是集群模式。Nacos 支持两种模式:单机模式和集群模式。单机模式适用于开发和测试环境,集群模式适用于生产环境。
  5. -p 8848:8848:将宿主机的 8848 端口映射到容器内的 8848 端口。Nacos 的默认服务端口是 8848,外部访问时需要通过该端口。
  6. -p 9848:9848:将宿主机的 9848 端口映射到容器内的 9848 端口。这个端口通常用于 Nacos 的监控和管理。
  7. nacos/nacos-server.2.3:指定要运行的镜像和版本。这里使用的是 nacos/nacos-server 镜像的 v2.4.3 版本。

执行完毕后,执行docker ps查看一下正在运行中的docker容器,确认容器是否正常运行,如下图所示:

z5zd8k-0.png

访问控制台

现在在浏览器访问地址:http://localhost:8848/nacos ,即可进入到 Nacos 的控制后台,如下图所示:

z724pf-0.png

复制配置文件、数据文件到宿主主机

Nacos容器运行成功后,我们将容器中的配置文件,以及数据文件复制到宿主主机中。(很多小伙伴可能很好奇,为什么要这么操作?不是已经运行成功了吗?我们稍后解答!)。执行如下命令

docker cp MyNacos:/home/nacos/conf D:\Docker\nacos
docker cp MyNacos:/home/nacos/data D:\Docker\nacos

zckyru-0.png

重新启动一个Nacos容器

在启动之前删除正在运行的容器

docker ps
docker rm -f ff79da980f3b

iShot_2025-01-02_23.25.15.png

重新运行一个Nacos容器

docker run -d --name MyNacos --privileged -e MODE=standalone -e JVM_XMX=300m -e JVM_XMS=300m -p 8848:8848 -p 9848:9848  -v D:\docker\nacos\conf:/home/nacos/conf -v D:\docker\nacos\data:/home/nacos/data -v D:\docker\nacos\logs:/home/nacos/logs nacos/nacos-server:v2.4.3

[!IMPORTANT]

额外的参数含义:

  1. --privileged:使容器以特权模式运行,给予容器更多的权限,这通常用于需要更高权限的操作。
  2. -e JVM_XMX=300m:设置环境变量 JVM_XMX,指定 JVM 最大堆内存为 300MB。
  3. -e JVM_XMS=300m:设置环境变量 JVM_XMS,指定 JVM 初始堆内存为 300MB。
  4. -v E:\docker\nacos\conf:/home/nacos/conf:将宿主机的 E:\docker\nacos\conf 目录挂载到容器内的 /home/nacos/conf 目录。这样,宿主机上的配置文件可以在容器内使用。
  5. -v E:\docker\nacos\data:/home/nacos/data:将宿主机的 E:\docker\nacos\data 目录挂载到容器内的 /home/nacos/data 目录。这样,Nacos 的数据可以持久化到宿主机上。
  6. -v E:\docker\nacos\logs:/home/nacos/logs:将宿主机的 E:\docker\nacos\logs 目录挂载到容器内的 /home/nacos/logs 目录。这样,Nacos 的日志可以持久化到宿主机上。

[!NOTE]

现在来解释一下,为什么要这么操作?

这套操作主要是为了实现 Nacos 数据和配置的持久化,方便后续维护和升级,同时避免因容器删除或重启导致数据丢失。以下是原因的详细解析:

这套操作主要是为了实现 Nacos 数据和配置的持久化,方便后续维护和升级,同时避免因容器删除或重启导致数据丢失。以下是原因的详细解析:

1. 数据和配置的持久化

Nacos 容器默认将配置和数据存储在容器内部(如 /home/nacos/conf 和 /home/nacos/data)。但如果容器被删除或重启,这些文件会被清空,导致:

​ • 配置数据丢失。

​ • 服务注册信息丢失。

通过将容器内的数据和配置文件复制到宿主机中,并通过 挂载卷(volume) 将宿主机目录映射回容器,可以确保这些关键数据即使容器被删除也能保留。

2. 容器配置的定制化

通过将默认的 Nacos 配置文件复制到宿主机并挂载到容器内,允许我们在宿主机上修改这些文件(如 application.properties 或其他自定义配置),使得配置更灵活:

​ • 可以快速修改 Nacos 的参数(如数据库连接信息)。

​ • 不需要每次修改都重建镜像或重新进入容器,提升了操作效率。

3. 日志的持久化

容器内部的日志文件通常也会随着容器的销毁而丢失。如果出现问题,日志是排查问题的重要依据。因此,通过挂载日志目录到宿主机:

​ • 日志文件可以长期保留。

​ • 方便对日志进行分析和备份。

4. 容器重启后的快速恢复

通过这种操作,重新启动或更换 Nacos 容器时,可以:

​ • 挂载原有的配置和数据目录,快速恢复之前的状态。

​ • 避免重复配置或手动重建数据,节省时间。

5. 适应不同环境

​ • 开发环境:便于团队成员直接复制文件,快速搭建本地开发环境。

​ • 生产环境:在多节点部署中,可以通过挂载共享存储(如 NFS)实现数据同步,支持高可用。