版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:[https://blog.csdn.net/boling\_cavalry/article/details/100171289](https://blog.csdn.net/boling_cavalry/article/details/100171289)
本文是《Spring Cloud Alibaba实战系列》的第五篇,学习如何将Nacos服务所用的数据库从嵌入式数据库改为MySql。
下面是《Spring Cloud Alibaba实战系列》的所有文章地址:
下图是来自官方的操作指导,地址是:https://nacos.io/zh-cn/docs/deployment.html ,可见步骤很简单:
如果您是在物理机上操作,按照上述步骤即可完成,如果您的Nacos部署在Docker上,下本文可以用来做参考:
Nacos的镜像和测试应用都来自《Docker下,两分钟极速体验Nacos配置中心》一文,编排容器的docker-compose.yml内容如下:
version: '2'
services:
nacos:
image: bolingcavalry/nacosserver:0.0.1
container_name: nacos
restart: unless-stopped
ports:
- '8848:8848'
config-demo:
image: bolingcavalry/nacosconfigdemo:1.0-SNAPSHOT
container_name: config-demo
restart: unless-stopped
depends_on:
- nacos
ports:
- '8080:8080'
简单介绍一下整个实战的步骤:
接下来一起实战吧。
CREATE DATABASE nacos_config;
use nacos_config;
接下来在容器编排文件docker-compose.yml中增加mysql容器:
mysql:
image: mysql:5.7.27
container_name: mysql
restart: unless-stopped
volumes:
- ./nacos-mysql.sql:/docker-entrypoint-initdb.d/nacos-mysql.sql
- ./mysqldata:/var/lib/mysql
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_ROOT_PASSWORD: 123456
上述内容有几处需要注意:
a. 第一个volumes参数将宿主机的nacos-mysql.sql映射到容器的/docker-entrypoint-initdb.d/目录,mysql容器启动时会执行这个目录下的所有以sh和sql结尾的文件;
b. 第二个volumes参数将docker-compose.yml文件所在位置的mysqldata目录映射到容器的/var/lib/mysql目录,这样数据库所有数据都保存在宿主机上了,此mysqldata文件夹容器启动时自动创建;
c. command参数设置了mysql的鉴权方式是密码方式;
d. 环境变量MYSQL_ROOT_PASSWORD设置了mysql的root密码为123456;
接下来需要设置nacos server的参数,将mysql相关参数配置好,这样nacos server启动后就会使用mysql保存数据:
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://mysql:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456
nacos:
image: bolingcavalry/nacosserver:0.0.1
container_name: nacos
restart: unless-stopped
volumes:
- ./application.properties:/root/nacos/conf/application.properties
depends_on:
- mysql
ports:
- '8848:8848'
如上所示,nacos的配置有两处修改:
a. 增加volumes,将宿主机的application.properties文件映射到容器中,作为nacos的配置文件;
b. 增加依赖配置,在mysql容器启动成功后才会启动nacos;
完整的docker-compose.yml内容如下:
version: '2'
services:
mysql:
image: mysql:5.7.27
container_name: mysql
restart: unless-stopped
volumes:
- ./nacos-mysql.sql:/docker-entrypoint-initdb.d/nacos-mysql.sql
- ./mysqldata:/var/lib/mysql
command: --default-authentication-plugin=mysql_native_password
ports:
- '3306:3306'
environment:
MYSQL_ROOT_PASSWORD: 123456
nacos:
image: bolingcavalry/nacosserver:0.0.1
container_name: nacos
restart: unless-stopped
volumes:
- ./application.properties:/root/nacos/conf/application.properties
depends_on:
- mysql
ports:
- '8848:8848'
config-demo:
image: bolingcavalry/nacosconfigdemo:1.0-SNAPSHOT
container_name: config-demo
restart: unless-stopped
depends_on:
- nacos
ports:
- '8080:8080'
至此,准备完毕,可以验证了;
首先验证nacos的配置服务是否正常,验证方法和操作步骤和《Docker下,两分钟极速体验Nacos配置中心》完全一致,下面给出关键步骤:
docker-compose up -d
再来看看mysql的数据;
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| nacos_config |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql> use nacos_config;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+------------------------+
| Tables_in_nacos_config |
+------------------------+
| config_info |
| config_info_aggr |
| config_info_beta |
| config_info_tag |
| config_tags_relation |
| group_capacity |
| his_config_info |
| roles |
| tenant_capacity |
| tenant_info |
| users |
+------------------------+
11 rows in set (0.00 sec)
mysql> select * from config_info \G
*************************** 1. row ***************************
id: 1
data_id: my-nacos-config.yaml
group_id: BOLING_CAVALRY
content: bolingcavalry:
desc: desc from nacos yaml config
md5: f44c8fd76e8da757380e8f7ddabe6e70
gmt_create: 2019-08-31 13:53:01
gmt_modified: 2019-08-31 13:53:01
src_user: NULL
src_ip: 192.168.121.1
app_name:
tenant_id:
c_desc: nacos config demo
c_use: NULL
effect: NULL
type: yaml
c_schema: NULL
1 row in set (0.00 sec)
至此,可以确定在Docker环境下,Nacos使用MySQL进行持久化存储操作成功,接下来我们验证即使容器被删除,数据也可以恢复
docker-compose down
[root@maven test]# docker-compose down
Stopping config-demo ... done
Stopping nacos ... done
Stopping mysql ... done
Removing config-demo ... done
Removing nacos ... done
Removing mysql ... done
Removing network test_default
[root@maven test]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
version: '2'
services:
mysql:
image: mysql:5.7.27
container_name: mysql
restart: unless-stopped
volumes:
- ./mysqldata:/var/lib/mysql
command: --default-authentication-plugin=mysql_native_password
ports:
- '3306:3306'
environment:
MYSQL_ROOT_PASSWORD: 123456
nacos:
image: bolingcavalry/nacosserver:0.0.1
container_name: nacos
restart: unless-stopped
volumes:
- ./application.properties:/root/nacos/conf/application.properties
depends_on:
- mysql
ports:
- '8848:8848'
config-demo:
image: bolingcavalry/nacosconfigdemo:1.0-SNAPSHOT
container_name: config-demo
restart: unless-stopped
depends_on:
- nacos
ports:
- '8080:8080'
至此,Docker下Nacos持久化配置实战就完成了,希望能给您的容器化项目提供一些参考。
Naocs的官方也给出了Docker下的Nacos镜像以及对应的编排操作指南,地址是:https://github.com/nacos-group/nacos-docker ,您也可以根据官方指导来实践,官方编排提供了更多的设置和配置,功能更强大,但是由于内容过多(例如Mysql使用了主从的容器设置),不适合本次文章的主题,因此我这里依然沿用了之前自己动手做的镜像;