Nacos 使用 CentOS7 进行集群部署
有了上篇博客的 Nacos 单机部署经验,对于集群搭建就容易多了。
要想搭建 Nacos 集群,至少需要 3 个节点。为了统一访问地址,因此需要使用 nginx 进行转发。
本篇博客仍然采用 Nacos 当前最新的版本 2.2.2 进行集群搭建。Nacos 官网上也有集群搭建的说明,不过有点简略。
Nacos 的集群搭建官方网址为:http://nacos.io/zh-cn/docs/cluster-mode-quick-start.html
一、条件准备
由于只是演示,所以就在我个人的笔记本电脑的一台虚拟机上进行搭建。
虚拟机的操作系统是 CentOS7,分配了 3 个 G 的内存(勉强够用),建议分配更多的内存。
对于 Nacos 的 3 个节点,就通过 3 个端口来实现,具体细节如下:
节点 | ip | port |
---|---|---|
nacos1 | 192.168.216.129 | 6841 |
nacos2 | 192.168.216.129 | 6844 |
nacos3 | 192.168.216.129 | 6847 |
1. 安装 jdk
由于 nacos 是 java 开发的,因此必须安装 jdk ,版本需要在 1.8 或更高,具体 jdk 的安装过程,这里就省略了。
2. 安装 nginx
需要注意的是:由于 Nacos 从 2 版本开始,java 代码连接 Nacos 需要使用 grpc 协议端口
因此 nginx 必须使用 1.19 以上的版本,因为能够支持 tcp 协议的转发。本篇博客下面有 nginx 的 tcp 转发配置。
nginx 官网的 yum 安装参考网址为:http://nginx.org/en/linux_packages.html#RHEL
按照官网的 yum 步骤安装,版本一般都是最新的稳定版本,肯定是支持 tcp 转发的。
当然最好运行以下命令,安装 nginx 的所有模块,这样就能够绝对支持 tcp 转发,万无一失了:
yum -y install nginx-all-modules.noarch
3. 安装 mysql
搭建集群肯定使用 mysql 数据库,不会使用内置的 derby 数据库。
有关 mysql 的安装,可以参考 mysql 的官网 yum 安装步骤,我安装的是 mysql 5.7 版本。
官网 mysql 5.7 的 yum 安装参考网址:https://dev.mysql.com/doc/refman/5.7/en/linux-installation-yum-repo.html
安装好之后,按照上一篇博客的操作,创建一个名称为 nacos 的数据库,运行 mysql-schema.sql 初始化数据库表。
二、Nacos 集群搭建
Nacos 的集群搭建比较简单,部署的基本思路就是:
首先我们先把单个 Nacos 的配置文件修改好,然后复制出两份,分别修改一下启动端口就可以了。
在 CentOS7 上的根目录上创建一个 app 文件夹,方便管理:mkdir /app
将安装包上传到 /app 目录下,然后进行解压缩:tar -zxvf nacos-server-2.2.2.tar.gz
这样在 /app 目录下就会多出一个 nacos 目录
由于需要部署 3 个 nacos 节点,因此该文件夹先命名为 nacos1:mv /app/nacos /app/nacos1
然后进入 nacos1 的 conf 文件夹中:cd /app/nacos1/conf
复制 conf 文件夹里面的 cluster.conf.example 文件
复制出一个名称为 cluster.conf 的新文件:cp cluster.conf.example cluster.conf
编辑 cluster.conf :vim cluster.conf
填写以下内容并保存:
192.168.216.129:6841
192.168.216.129:6844
192.168.216.129:6847
然后编辑 application.properties 配置文件:vim application.properties
由于 application.properties 文件内容太多,这里就不列出来了,最主要关注下面的几个配置项:
# 这个是 nacos 的启动端口,默认就是 8848,这里修改为 6841
server.port=6841
# 下面是配置 nacos 有关连接 mysql 的一些参数配置
# 由于本篇博客没有采用读写分离,只有一个 mysql 库,所以 db.num=1
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://192.168.216.129:3306/nacos?characterEncoding=utf8
db.user.0=root
db.password.0=root
# 该配置项决定访问 nacos 时是否账号密码认证,默认值是 false,强烈建议修改为 true
nacos.core.auth.enabled=true
# 下面这俩配置项,其实没啥用,没什么作用,但是其值不能空着,否则 nacos 无法正常工作。
# 默认值为空字符串,随便填写一个值就行
nacos.core.auth.server.identity.key=jobs
nacos.core.auth.server.identity.value=888
# 这个配置项,我也没有发现有什么用,默认值为空字符串,但是其值不能空着,否则 nacos 无法正常工作。
# 找一个在线生成 base64 字符串的网站,随便输入一个拥有32个字符组成的字符串,生成 base64 字符串,填写到这里即可。
nacos.core.auth.plugin.nacos.token.secret.key=VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=
以上的步骤都操作完之后,就可以复制出两份 nacos 的节点了。
在 /app 下创建出 nacos2 和 nacos3 文件夹:mkdir /app/nacos2 /app/nacos3
将 nacos1 文件夹中的内容,全部拷贝到 nacos2 和 nacos3 中:
cp -r /app/nacos1/* /app/nacos2/
cp -r /app/nacos1/* /app/nacos3/
然后分别进入 nacos2 和 nacos3 的 conf 文件夹,修改 application.properties 文件,
将 nacos2 的端口修改为 6844,将 nacos3 的端口修改为 6847
然后进入 CentOS7 的服务存放目录中:cd /etc/systemd/system
新建 3 个 nacos 的文件,nacos1.service、nacos2.service、nacos3.service,内容填写如下:
# nacos1.service 的内容
[Unit]
Description=Nacos
After=syslog.target network.target
[Service]
Type=forking
Environment='JAVA_HOME=/app/jdk1.8'
ExecStart=/app/nacos1/bin/startup.sh
ExecStop=/app/nacos1/bin/shutdown.sh
[Install]
WantedBy=multi-user.target
# nacos2.service 的内容
[Unit]
Description=Nacos
After=syslog.target network.target
[Service]
Type=forking
Environment='JAVA_HOME=/app/jdk1.8'
ExecStart=/app/nacos2/bin/startup.sh
ExecStop=/app/nacos2/bin/shutdown.sh
[Install]
WantedBy=multi-user.target
# nacos3.service 的内容
[Unit]
Description=Nacos
After=syslog.target network.target
[Service]
Type=forking
Environment='JAVA_HOME=/app/jdk1.8'
ExecStart=/app/nacos3/bin/startup.sh
ExecStop=/app/nacos3/bin/shutdown.sh
[Install]
WantedBy=multi-user.target
注意:上面的 Environment 指定的是你的 JAVA_HOME 的环境变量。
最后启动 nacos1、nacos2、nacos3 即可。
# 服务的配置文件修改了,可能还需要运行以下命令
systemctl daemon-reload
# 启动 nacos1、nacos2、nacos3
systemctl start nacos1
systemctl start nacos2
systemctl start nacos3
三、nginx 的转发配置
三个 nacos 的服务启动后,我们可以通过 netstat -tulnp
查看 nacos 占用的端口:
红框的端口,是 3 个 nacos 服务启动的端口,黄色的端口是 3 个 nacos 的 grpc 端口。如果防火墙已经开放了以上 6 个端口的话,访问下面 3 个地址的任意一个地址都可以访问 nacos:
# 实际上防火墙只需要开通 6841、6844、6847 就可以通过以下地址访问 nacos
# 但是 java 程序要想连接 nacos 的话,防火墙还得需要开通 7841、7844、7847
http://192.168.216.129:6841/nacos/index.html
http://192.168.216.129:6844/nacos/index.html
http://192.168.216.129:6847/nacos/index.html
既然是搭建集群,我们肯定是想通过统一入口进行访问,这样才比较方便。不然的话,如果我们部署 nacos 集群的节点更多的话,服务启动端口和 grpc 端口也就会更多了,因此必须使用 nginx 进行负载均衡转发才行。
使用 nginx 需要转发两个地址:
-
本博客使用 http 的 80 端口转发 6841、6844、6847
-
本博客使用 tcp 的 1080 端口转发 7841、7844、7847(由于 java 程序连接 nacos 时,grpc 使用的端口比连接端口大 1000,此处采用 80 端口作为连接端口,因此 grpc 端口就是 1080)
具体 nginx 的完整配置内容如下:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
# 配置 http 服务
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;
include /etc/nginx/mime.types;
default_type application/octet-stream;
upstream nacos-cluster {
server 127.0.0.1:6841;
server 127.0.0.1:6844;
server 127.0.0.1:6847;
}
server {
listen 80;
server_name 192.168.216.129;
location / {
root /usr/share/nginx/html;
}
location /nacos/ {
proxy_pass http://nacos-cluster/nacos/;
}
}
}
# 配置 tcp 服务
stream {
upstream grpc-cluster {
server 127.0.0.1:7841;
server 127.0.0.1:7844;
server 127.0.0.1:7847;
}
server {
listen 1080;
proxy_pass grpc-cluster;
}
}
配置完成后可以使用 nginx -t
检查 nginx 配置文件的正确性。
可以采用 nginx -s reload
重启加载 nginx 配置文件
当然第一次配置完成后,最好重启 nginx 服务 systemctl restart nginx
然后在防火墙中把 80 端口和 1080 端口开放了:
# 开放防火墙端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=1080/tcp --permanent
# 重新加载防火墙配置
firewall-cmd --reload
# 当然你也可以关闭防火墙
systemctl stop firewalld
一般情况下,我们也最好关闭 CentOS 的 Selinux 的安全控制。
vim /etc/selinux/config
将 SELINUX 的值修改为 disabled
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
然后重启 CentOS7 即可禁用 Selinux 的配置生效。
此时通过 http://192.168.216.129/nacos/index.html
即可访问 nacos 集群:
nacos 的默认登录账号和密码,都是 nacos ,登录之后,在左侧菜单点击【集群管理】下【节点列表】,在右侧即可看到集群节点,比如每个节点的 ip 地址和端口号,以及节点的状态:up 表示节点正常上线,down 表示节点下线了。
以上就是 nacos 集群搭建的完整过程,实际部署肯定是使用多台机器进行部署。希望本篇博客对大家有帮助。