官网文档地址:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html
对如上图片进行翻译如下
根据下图,需要配置MySQL作为持久化保存Nacos的信息
默认Nacos使用嵌入式数据库实现数据的存储。所以,如果启动多个默认配置下的Nacos节点,数据存储是存在一致性问题的。为了解决这个问题,Nacos采用了集中式存储的方式来支持集群化部署,目前只支持MySQL的存储。
官网文档:https://nacos.io/zh-cn/docs/deployment.html
在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力,具体的操作步骤:
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://xxx.xxx.xxx.xxx:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos_devtest
db.password=youdontknow
再以单机模式启动nacos,nacos所有写嵌入式数据库的数据都写到了mysql
GitHub查看官网地址:https://github.com/alibaba/nacos/blob/develop/config/pom.xml
自身的pom.xml依赖文件有
derby
配置,同样的也具有mysql的依赖,通过后面的配置可以结合mysql实现配置持久化
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
dependency>
<dependency>
<groupId>org.apache.derbygroupId>
<artifactId>derbyartifactId>
dependency>
在存放
nacos
的\nacos-server-2.1.1\nacos\conf
路径下可以看到mysql的脚本
将上面的脚本在本地的mysql中创建一个新的数据库nacos_config
,然后执行上面sql脚本生成数据库的具体内容
参考官网的手册【单机模式支持mysql】
在配置文件中添加如下的连接消息,改为自己的连接即可
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:13306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=1234
startup.cmd -m standalone
重新访问nacos可以看出之前的数据已经全部的清空的,是因为切换了数据库为mysql,下面通过新增一条
配置列表
数据,然后查看nacos_config
数据库中是否持久化的保存
预计需要,1个Nginx+3个nacos注册中心+1个mysql
具体的单接节点的安装已经在第一篇的时候已经写过了,下面的就是编写集群的安装步骤
将自带的sql脚本在自己的虚拟机Linux系统MySQL中运行,具体还是参考上面win版本的配置
位置:
/nacos/conf/application.properties
,在配置文件里面添加如下内容,指定自己虚拟机的数据库连接信息
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:13306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=1234
启动项目sh startup.sh -m standalone
测试是否可以正常的登录以及数据是否持久化的存储在MySQL数据库中,如上操作成功之后才进行下面的集群部署操作
对应新版本的
nacos
集群配置与之前的配置又有所不同了,需要查看具体的官网升级说明文档:https://nacos.io/zh-cn/docs/2.0.0-compatibility.html如果启动日记出现
Unable to start embedded Tomcat
提示错误,基本都是配置连接mysql数据库的问题了,将项目的所有进程杀掉并重启虚拟机再运行查看
梳理出3台nacos集器的不同服务端口号,以及对nacos进行分组
注释原来的内容,一定要使用自己虚拟机的网卡地址【ip addr查看】,如果不使用不同的端口,nacos都是8848导致集群启动失败
# 查看虚拟机的IP
hostname -I
#2022-09-27T19:20:05.572
192.168.26.131:8851
192.168.26.131:8861
192.168.26.131:8871
==注意:==这里没有使用连续端口,因为
Nacos2.0
以后启动一个Nacos
就会占用连续的两个端口。如果使用连续的端口,当启动第二个
Nacos
集群节点时,会报如下错误:Address already in use: bind
- 1
【application.properties】下的nacos端口号需要对应,不需要再修改【cluster.conf】
- server.port=8851
- server.port=8861
- server.port=8871
根据官网给出的集群启动命令,需要进入到每一个/bin
文件里面执行
# 集群启动,使用外置数据源
sh startup.sh
当启动nacos10秒后查看
/nacos8851/logs/start.out
启动配置文件的最后面出现如下命令即可视为集群启动成功
2022-09-27 20:18:53,465 INFO The server IP list of Nacos is [xxx.xxx.xxx.xxx:8851, xxx.xxx.xxx.xxx:8861, xxx.xxx.xxx.xxx:8871]
2022-09-27 20:15:39,892 INFO Nacos is starting...
2022-09-27 20:15:40,894 INFO Nacos is starting...
2022-09-27 20:15:41,897 INFO Nacos is starting...
2022-09-27 20:15:42,904 INFO Nacos is starting...
2022-09-27 20:15:43,914 INFO Nacos is starting...
2022-09-27 20:15:44,163 INFO Nacos started successfully in cluster mode. use external storage
8851/8861/8871启动完成后查看启动的nacos集群数据
ps -ef|grep nacos|grep -v grep|wc -l
需要注意的是改为主机的虚拟机IP
地址
http://xxx.xxx.xxx.xxx:8851/nacos/index.html
http://xxx.xxx.xxx.xxx:8861/nacos/index.html
http://xxx.xxx.xxx.xxx:8871/nacos/index.html
UP
代表启动正常,DOWN
代表该节点并不在线。
虚拟机需要安装有Nagix环境,找到自己的配置文件/root/nginx-1.22.0/conf/nginx.conf
备份并修改里面的内容实现负载均衡
# 备份配置文件
cp nginx.conf nginx.conf.bk
修改后的内容
后面指定配置nginx.conf
配置文件的启动
在上面已经启动了集群Nacos集群三个,这里就不再赘述了
# 启动Nginx,-c 指定启动配置文件
./nginx -c /opt/nginx/conf/nginx.conf
# 查看指定访问情况
ps -ef | grep nginx
根据上图修改
nginx.conf
配置文件可以得知拦截的是启动访问的80端口,如下需要使用自己虚拟机的IP地址进行访问
http://xxx.xxx.xxx.xxx/nacos/#/login
在Nacos配置中心中添加配置查看Linux系统中的数据库是否出现添加的内容,如果说明Linux的Nacos持久化就完成了
查看数据库
需要注意的是,下面的配置使用到了虚拟机的端口,一定需要配置成自己的虚拟机IP地址,否则会连接不上
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: xxx.xxx.xxx.xxx:80 # 修改为Nginx访问地址,通过负载均衡分发到虚拟机的nacos
# server-addr: localhost:8848 # win配置Nacos地址
启动项目后,后端没有出现错误就可以查看前端的nacos查看是否有注册到列表