二、Linux 搭建 Nacos 集群架构以及持久化
前言
上篇已经介绍了 Nacos 在 Windows 的安装及 Nacos 的注册中心、配置管理的基本使用。如果是个人本地环境使用 Windows 的单机模式已经足够了,但如果是公司环境,那肯定是在 Linux 环境部署集群模式,确保高可用;并且还需要保证信息的持久化。
环境准备
- Linux
>=
JDK 1.8- Nacos Linux 版本安装包
1、下载 Liunx 版本的 nacos-server,
下载地址:https://github.com/alibaba/nacos/releases/tag/2.1.1
,如果下载慢,可以使用 github 的国内镜像加速地址:https://kgithub.com/alibaba/nacos/releases/tag/2.1.1
2、使用命令进行解压:tar -zxvf nacos-server-2.1.1.tar.gz -C /opt/soft/
3、解压之后进行启动 Nacos,步骤如下:
cd /opt/soft/nacos/bin/
# 启动
sh startup.sh -m standalone
# 关闭防火墙
systemctl stop firewalld
# 或者开放 8848 端口
# 1、打开防火墙
systemctl start firewalld
# 2、检查是否开放
firewall-cmd --query-port=8848/tcp
# 3、打开 8848 端口
firewall-cmd --add-port=8848/tcp --permanent
# 4、重启防火墙:
systemctl restart firewalld
4、浏览器访问
注意:如果是使用IDEA开发工具进行远程访问,需要额外放开:9848、9849(根据主端口8848进行偏移)。 Nacos2.0版本相比1.X新增了gRPC的通信方式,因此需要增加2个端口。新增端口是在配置的主端口(server.port)基础上,进行一定偏移量自动生成。
端口 | 与主端口的偏移量 | 描述 |
---|---|---|
9848 | 1000 | 客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求 |
9849 | 1001 | 服务端gRPC请求服务端端口,用于服务间同步等 |
7848 | -1000 | Jraft请求服务端端口,用于处理服务端间的Raft相关请求 |
[root@cxyxj ~]# firewall-cmd --add-port=9848/tcp --permanent
success
[root@cxyxj ~]# firewall-cmd --add-port=9849/tcp --permanent
success
[root@cxyxj ~]# systemctl restart firewalld
集群部署
Nacos 支持三种部署模式
- 单机模式 - 用于测试和单机试用。
- 集群模式 - 用于生产环境,确保高可用。
- 多集群模式 - 用于多数据中心场景。
1、集成MySQL存储
默认情况下 Nacos 使用嵌入式数据库 derby 实现数据的存储。所以,如果启动多个默认配置下的 Nacos 节点,数据存储是存在一致性问题的。为了解决这个问题,Nacos 采用了集中式存储的方式来支持集群化部署,目前只支持MySQL的存储。具体的操作步骤如下:
- 1、需要安装版本为 5.6.5+ 的数据库。
- 2、创建名为 nacos_config 的数据库,前往 nacos\conf\ 目录下找到 nacos-mysql.sql 文件,执行sql脚本。
创建 nacos_config
数据库,执行 nacos-mysql.sql
文件结果如下:
- 3、修改
conf/application.properties
文件,增加mysql
数据源配置。
# 指定数据源
spring.datasource.platform=mysql
### 指定 DB 实例数
db.num=1
### DB连接信息
db.url.0=jdbc:mysql://192.168.xxx.xx:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=root
重新启动 Nacos,可以看到是个全新的空记录界面。
- 4、新建配置
- 5、从数据库中查看配置信息
2、配置集群配置文件
将 Node-1 导出为镜像,搭建三个 Linux 系统,每个系统中搭建一个 Nacos 服务。
- 1、将 Node-1 虚拟机关机
- 选中 Node-1 虚拟机,单击“文件”选项,然后在弹出的下拉框中单击“导出为OVF”这一项,如下图所示:
- 需要选择OVF模板的保存目录,默认文件名是.ovf,无需更改,只需单击“保存”按钮即可,如下图所示:
- 等待导出完成即可。
- 导出完成后会在目录下生成四个文件,如下图:
- 在VMWare软件界面中选择“文件”——“打开”:
- 选择之前导出的.ova文件,点击“打开”:
- 设置新虚拟机的名称以及存储位置
注意:不同的虚拟机需要放在不同的文件夹下,否则会出现同时只能打开一台虚拟机的情况。
- 导入成功后,重复上述步骤,创建 Node-3 虚拟机,最终结果如下图:
3 个或 3 个以上 Nacos 节点才能构成集群,所以需要三个 Nacos 服务程序。
- 1、在每个 Nacos 服务中, 前往 nacos\conf\ 目录下找到 cluster.conf.example 文件,对其进行 copy,并修改文件名为 cluster.conf
[root@cxyxj conf]# cp cluster.conf.example cluster.conf
- 2、修改 cluster.conf 文件内容,请每行配置成 ip:port
192.168.91.128:8848
192.168.16.129:8848
192.168.16.130:8848
注意,这个IP不能写 127.0.0.1 或者 localhost。请将Linux虚拟机的IP修改为静态IP。
- 3、集群模式启动
cd /usr/local/java/nacos/bin
# 使用外置数据源
sh startup.sh
-
4、分别将三个节点启动成功,结果如下:
- 192.168.91.128:8848
- 192.168.91.129:8848
- 192.168.91.130:8848
注意
本文采用的 MySQL 为单机,虽然也够用,如果公司资源足够,生产使用建议至少主备模式。
额外
设置 Nacos 开机自启动
[root@cxyxj bin]# vim /usr/lib/systemd/system/nacos.service
该文件是不存在的,所以需要创建该文件。在文件中编写以下内容:
[Unit]
Description=nacos
After=network.target
[Service]
Type=forking
LimitNOFILE=infinity
Environment="JAVA_HOME=/usr/local/java/jdk1.8.0_321"
ExecStart=/usr/local/java/nacos/bin/startup.sh
ExecReload=/usr/local/java/nacos/bin/shutdown.sh
ExecStop=/usr/local/java/nacos/bin/shutdown.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target
-
Environment:指定 JDK 位置
-
ExecStart 有如下几种写法:
-
单机模式:ExecStart=/opt/nacos/bin/startup.sh -m standalone
-
集群模式内置数据源:ExecStart=/opt/nacos/bin/startup.sh -p embedded
-
集群模式外置数据源:ExecStart=/opt/nacos/bin/startup.sh
-
修改 Nacos 服务 bin目录下的 startup.sh 文件内容, 将下面3条注释掉,保留第一条,并修改 jdk 路径。
修改完之后,对服务操作的相关命令如下:
启动服务:systemctl start nacos.service
关闭服务:systemctl stop nacos.service
重启服务:systemctl restart nacos.service
显示服务的状态:systemctl status nacos.service
开机时启用服务:systemctl enable nacos.service
开机时禁用服务:systemctl disable nacos.service
查看服务是否开机启动:systemctl is-enabled nacos.service
查看已启动的服务列表:systemctl list-unit-files|grep enabled
查看启动失败的服务列表:systemctl --failed
重启测试:reboot
转载自:https://juejin.cn/post/7352704880282468379