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 集群搭建的完整过程,实际部署肯定是使用多台机器进行部署。希望本篇博客对大家有帮助。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗