前言:在Windos和Linux的Docker中搭建nacos集群只是出于学习的目的,生产环境中请不要这么使用nacos
Nacos集群
在Linux服务器上启动一个Nacos,然后在Windos本地启动一个Nacos,如何去保证他们使用数据的一致性?
第一个问题,Nacos本身的数据是存在哪里的?上面配置的配置文件,肯定不是存在内存里,因为重启Nacos之后任然可以查到这些数据。因为这些数据是存在一个嵌入式的数据库,这样一来,如果启动了多个Nacos,这个数据库是不共享的,就会出现数据的不一致性问题。
解决方案:
通过配置MySQL数据库,使两个Nacos使用同一个数据库,因为使用同一个数据源,那么就可以保证数据的一致性。
1 需要一个数据库作为公用的数据库
在nacos文件夹的conf文件夹下我们能够找到nacos-mysql.sql这个SQL脚本文件
在服务器上先开一个数据库,在这个数据库中执行这个SQL脚本。
得到了这么一个数据库。
2 windos系统中的nacos配置使用这个数据库
和SQL脚本的同一个文件夹下可以找到application.properties配置文件

不知道是不是版本的问题,我在里面找了一个注释了的代码在第32行,对其进行修改,将我们的数据库配置上去
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://1.15.37.134:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=nacos_config
db.password.0=nacos_config
重启Nacos,这个Nacos里所有的配置全部消失了,我重新在里面新增了一个配置如下,可以看到这时在我本地Windos的系统中的Nacos
3 然后在Linux系统中修改配置
我的nacos是安装在docker上的,在docker中打开application.properties

这里有一堆已经配置好了的数据库,我直接全部注释掉,然后重新写上新的数据库配置,和Windos系统下的一样
db.num=${MYSQL_DATABASE_NUM:1}
db.url.0=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME}?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true}
db.url.1=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME}?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true}
db.user=${MYSQL_SERVICE_USER}
db.password=${MYSQL_SERVICE_PASSWORD}
写在最后一行
### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://1.15.37.134:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=nacos_config
db.password.0=nacos_config
重启Nacos,打开在Linux系统下的Nacos的网页端

可以看到,出现了之前没有的配置,和Windos下新增的配置一模一样,说明他们已经使用了同一个数据库
我们在数据库里也可以看到这一条数据的记录
