SpringCloud - 服务注册与配置中心Nacos使用详解1(单机部署)
作者:hangge | 2020-12-02 08:10
在过去许多公司的 Spring Cloud 项目中,都是使用 Eureka 作为服务注册中心。虽然如今 Eureka 2.X 版本断更,但好在 Spring Cloud 并不强依赖 Eureka,Spring Cloud 还支持其他一些服务注册中心组件,比如:Zookeeper、Consul。从 Eureka 切换其他注册中心基本只需要改个依赖,加两行配置就可以了。
本文介绍另一种替代方案:Nacos。Nacos 是阿里云中间件团队开源的一个项目。它除了可以实现注册中心功能外,还是一个配置中心。简单来说就是 Spring Cloud Eureka + Spring Cloud Config + Spring Cloud Admin 的功能组合。
下面是官方的描述:Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
一、单机部署
Nacos 不仅支持二进制部署,也支持 Docker 和 K8S 部署,下面通过样例分别进行介绍。
1,通过二进制方式部署
(1)我们可以下载源码自行编译,也可以直接下载官方发行包使用(最新稳定版本),比如我这里下载 1.2.0 版本的发行包:
wget https://github.com/alibaba/nacos/releases/download/1.2.0/nacos-server-1.2.0.tar.gz
(2)下载后将其解压:
tar -xvf nacos-server-1.2.0.tar.gz
(3)接着进入 bin 文件夹:
cd nacos/bin
(4)然后执行如下命令启动服务(standalone 代表着单机模式运行,非集群模式)
./startup.sh -m standalone
(5)启动成功后,此时 Nacos 控制台就可以访问了。使用浏览器访问 http://IP:8848/nacos/index.html,可以看到如下控制台页面:

2,使用 Docker 部署
(1)Nacos 官方 Docker 部署方式 Git 地址如下:
(2)其中 example 目录下为用于 Docker Compose 启动的 yml 文件:
- standalone-derby.yaml:用于单机部署(内存模式)
- standalone-mysql-xx.yaml:用于单机部署(Mysql 模式)
- cluster-hostname.yaml:用于集群部署

(3)首先我们执行如下命令拉取仓库:
git clone --depth 1 https://github.com/nacos-group/nacos-docker.git
(4)假设我们使用内存模式的单机部署,执行如下命令进入仓库目录,并启动服务:
cd nacos-docker docker-compose -f example/standalone-derby.yaml up -d
(5)启动后通过 docker ps 命令可以发现,通过 docker-compose 部署,除了运行了一个名为 nacos-standalone 的 Nacos 容器,还运行了 prometheus、grafana 等监控组件。


附:实现数据持久化
当我们使用默认配置启动 Nacos 时,所有配置文件都被 Nacos 保存在了内置的数据库中。如果使用内嵌数据库,注定会有存储上限,而且也不方便观察数据存储的基本情况,下面演示如何使用 MySQL 来实现 Nacos 的数据持久化。
1,通过二进制方式部署
(1)首先我们创建一个名为 nacos_config 的数据库,然后使用官方提供的 sql 脚本(点击获取)进行初始化,结果如下:注意:MySQL 数据库建议使用 5.7 版的,如果版本太高(比如 8),可能会造成 Nacos 服务启动失败。

(2)然后修改配置文件 conf/application.properties 里数据库连接配置部分,然后再启动服务即可:

2,使用 Docker 部署
(1)使用 Docker 方式就更加简单了,我们只需要使用 standalone-mysql-5.7.yaml 或 standalone-mysql-8.yaml 文件启动即可,其他步骤同上面的内存模式一样。

docker-compose -f example/standalone-mysql-5.7.yaml up -d
(3)启动后通过 docker ps 命令可以发现,通过 docker-compose 部署,除了运了一个 Nacos、prometheus、grafana 容器外,还运行了一个 MySQL 容器(而且该数据库不需要我们像上面那样手动初始化建表语句)。

全部评论(0)