前言
这章总结一下Nacos的持久化和搭建Nacos集群。
目录
一、数据持久化
1.为什么持久化
之前都是通过单机模式启动的nacos,那仅适用于学习和测试阶段。对于有高可用要求的生产环境显然是不合适的。所以我们就需要搭建Nacos集群来应对生产需求。在搭建Nacos集群之前,我们需要先修改Nacos的数据持久化配置为外部MySQL存储,而不使用Nacos自身的存储库。
2.初始化数据库
- 目前只支持mysql,版本要求:5.6.5+
- 初始化MySQL数据库,数据库初始化文件:
nacos-mysql.sql,可以在Nacos包的conf文件夹下找到:
- 创建nacos数据库导入这个建表语句,表结构如下:
3.切换数据库
- 修改linux下nacos目录下的conf文件夹下的application.properties文件,增加支持mysql数据源配置(目前只支持mysql,版本要求:5.6.5+)
### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://192.168.163.131:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=1111
- 配置完数据库,可以先用单机版nacos试验一下,确定能否持久化
- 如上图,用前面一章讲的Nacos配置中心的用法来做一些操作,可以写入MYSQL中,就是持久化成功了
注意:数据库服务必须开启
二、集群
1.先来一个伪集群
伪集群就是,无法获得多个IP,可以尝试用不同的端口号开启nacos,实现伪集群
2.部署架构图
至少三台构成集群模式
3.集群搭建
- 在Nacos的
conf
目录下有一个cluster.conf.example
,可以直接把example
扩展名去掉来使用,也可以单独创建一个cluster.conf
文件,然后打开将后续要部署的Nacos实例地址配置在这里。
# ip:port
192.168.163.131:8848
192.168.163.131:8858
192.168.163.131:8868
- !!!:这里的例子仅用于本地学习测试使用,实际生产环境必须部署在不同的节点上,才能起到高可用的效果。另外,Nacos的集群需要3个或3个以上的节点,并且确保这三个节点之间是可以互相访问的。
- 接下来复制三份Nacos,可以用命令,也可直接操作虚拟机,自己玩无伤大雅
[root@localhost bin]# cd /usr/local
[root@localhost java]# mkdir nacos_cluster
[root@localhost java]# cp -r nacos nacos_cluster/nacos_8848
[root@localhost java]# cp -r nacos nacos_cluster/nacos_8858
[root@localhost java]# cp -r nacos nacos_cluster/nacos_8868
- 分别将复制的这三个nacos文件夹下 的
conf文件夹下application.properties
中的端口号分别改为:server.port=8848 server.port=8849 server.port=8850
- 分别启动三个nacos
[root@localhost upload]# cd /usr/local/nacos_cluster/nacos_8848/bin
[root@localhost bin]# ./startup.sh
[root@localhost bin]# cd /usr/local/nacos_cluster/nacos_8858/bin
[root@localhost bin]# ./startup.sh
[root@localhost bin]# cd /usr/local/nacos_cluster/nacos_8868/bin
[root@localhost bin]# ./startup.sh
4.此时启动可能会出现问题
我遇到了一个问题,三个都是启动的提示信息,但并没有启动成功,只能启动一个nacos节点。通过查看nacos的启动日志(在下图路径,启动后也会有个提示:日志存在哪里),发现是因为JVM不够引起的错误,默认nacos开启占用挺大的,所以找到nacos的启动命令,把JVM下的这个改一下
- -server -Xms2g -Xmx2g -Xmn1g
改成-server -Xms256m -Xmx256m -Xmn128m
或者直接简单粗暴,虚拟机内存分配至少三个G
5.注意:数据库服务必须开启
不然,连接不上数据库也必然启动失败的
6.测试集群
- 三个节点启动成功之后,可以分别用各自的端口号访问nacos,成功则万事大吉
三.配置代理服务,负载均衡
1.安装nginx
-
首先安装nginx的依赖库
yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
-
创建nginx文件夹
mkdir /usr/local/nginx
cd /usr/local/nginx
-
下载nginx
wget -c https://nginx.org/download/nginx-1.12.0.tar.gz
-
解压安装包
tar -zxvf nginx-1.12.0.tar.gz
- 配置nginx安装包
cd nginx-1.12.0 ./configure --prefix=/usr/local/nginx
注意:./configure配置nginx安装到/usr/local/nginx目录下
-
编译并安装
make && make install
2.配置nginx代理nacos
- nginx的内容修改
#将要代理的nacos的地址以及端口号
upstream nacos {
server 192.168.163.131:8848;
server 192.168.163.131:8858;
server 192.168.163.131:8868;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://nacos;
}
}
- 如下图(该注的注,该加的加)
3.测试代理
三个nacos节点前面已经启动,再把nginx启动
[root@localhost nginx]# cd /usr/local/nginx/sbin/
[root@localhost sbin]# ./nginx
四、Nacos的开机自启(可搞可不搞)
-
生产环境没必要配这个,没事儿谁动服务器开机关机开机关机啊,学习测试环境怕麻烦可设置一下开机自启。
-
添加nacos.service文件
vim /lib/systemd/system/nacos.service
具体添加内容如下
[Unit]
Description=nacos
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nacos/bin/startup.sh -m standalone
ExecReload=/usr/local/nacos/bin/shutdown.sh
ExecStop=/usr/local/nacos/bin/shutdown.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target
- 修改一下nacos的启动脚本,想继续集群模式自启,就配置多个nacos.service,名字改一下,内容稍微改一下下,但是启动集群太消耗内存,这里我就用单机模式玩了
- 修改这个启动脚本的JAVA_HOME,下面三行注掉,第一行改一下就ok
- 修改完成之后
systemctl daemon-reload #重新加载服务配置
- 启动nacos服务
systemctl start nacos.service #启动nacos服务
- 设置为开机启动
systemctl enable nacos.service #设置为开机启动
也可以关闭nacos、查看nacos状态、查看该service是否开机启用
总结
培养自己解决问题的能力。重新加载服务