centos 下搭建nacos集群

本文详细介绍了Nacos 2.1.1版本集群部署过程,包括环境配置、MySQL数据库准备、集群配置文件设置及Nginx代理配置。此外,还提供了解决部署过程中常见问题的方法。

https://nacos.io/zh-cn/docs/what-is-nacos.html

1. 环境

[root@localhost bin]# cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core)
ip端口作用备注
172.16.10.6680|3307mysq和nginx集群是需要数据库的;nginx是代理服务器
172.16.10.678848
172.16.10.688848
172.16.10.698848

nacos:2.1.1
MySQL:mysql:8.0.28 

[root@localhost nacos]# wget https://github.com/alibaba/nacos/releases/download/2.1.1/nacos-server-2.1.1.tar.gz


[root@localhost nginx]# docker ps -a | grep mysql
e7f8a15e88c3   harbor.jettech.com/jettechtools/mysql:8.0.28   "docker-entrypoint.s…"   4 hours ago   Up 4 hours   33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp   mysql-nacos

2 集群搭建

nacos-server-2.1.1.tar.gz
[root@localhost nacos]# tar -xf nacos-server-2.1.1.tar.gz  ^C
[root@localhost nacos]# cd nacos/
[root@localhost nacos]# ls
bin  conf  data  LICENSE  logs  NOTICE  
[root@localhost nacos]# cp conf/cluster.conf.example conf/cluster.conf

[root@localhost conf]# ls cluster.conf application.properties nacos-mysql.sql 
application.properties  cluster.conf  nacos-mysql.sql

添加集群机器列表:

Nacos Server 可以从一个本地配置文件中获取所有的 Server 地址信息,从而实现服务器之间的数据同步。

所以现在我们要在 Nacos Server 的 conf 目录下创建 cluster.conf 文件,并将 nacos-cluster1 和 nacos-cluster2 这两台服务器的 IP 地址 + 端口号添加到文件中。下面是我本地的 cluster.conf 文件的内容。

cluster.conf:nacos集群配置文件 
[root@localhost conf]# cat cluster.conf
#2022-08-29T14:23:01.962
172.16.10.67:8848
172.16.10.68:8848
172.16.10.69:8848

nacos-mysql.sql:数据库文件

nacos集群模式的工作是将一切注册或配置信息以及存储在数据库中,各个nacos的节点也是从数据库中获取各个用户注册以及配置信息;因此我们需要另外准备好数据库服务器,这里以mysql为例;
在nacos安装目录conf文件夹下有一个 nacos-mysql.sql 脚本文件,此脚本是nacos存储数据库表结构脚本,我们需要把它导入到准备好的mysql服务器

创建 DB Schema 和 Table

Nacos Server 的数据库用来保存配置信息、Nacos Portal 登录用户、用户权限等数据,下面我们分两步来创建数据库。

  1. 第一步,创建 Schema。你可以通过数据库控制台或者 DataGrip 之类的可视化操作工具,执行下面这行 SQL 命令,创建一个名为 nacos 的 schema。
    create schema nacos;
  2. 第二步,创建数据库表。Nacos 已经把建表语句准备好了,就放在你解压后的 Nacos Server 安装目录中。打开 Nacos Server 安装路径下的 conf 文件夹,找到里面的 nacos-mysql.sql 文件,你所需要的数据库建表语句都在这了。你也可以直接到源码仓库的资源文件中获取 Nacos 建表语句的 SQL 文件。
    mysql> source /opt/nacos-mysql.sql

将文件中的 SQL 命令复制下来,在第一步中创建的 schema 下执行这些 SQL 命令。执行完之后,你就可以在在数据库中看到这些 tables 了,总共有 12 张数据库表。

application.properties:nacos工程配置文件

[root@localhost conf]# cat application.properties| grep -v "#" | grep -v "^$"
server.servlet.contextPath=/nacos
server.error.include-message=ON_PARAM
server.port=8848
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://172.16.10.66:3307/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123456aA
db.pool.config.connectionTimeout=30000
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2
nacos.naming.empty-service.auto-clean=true
nacos.naming.empty-service.clean.initial-delay-ms=50000
nacos.naming.empty-service.clean.period-time-ms=30000
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i
server.tomcat.basedir=file:.
nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-ui/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
nacos.core.auth.system.type=nacos
nacos.core.auth.enabled=false
nacos.core.auth.caching.enabled=true
nacos.core.auth.enable.userAgentAuthWhite=false
nacos.core.auth.server.identity.key=serverIdentity
nacos.core.auth.server.identity.value=security
nacos.core.auth.plugin.nacos.token.expire.seconds=18000
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
nacos.istio.mcp.server.enabled=false

mysql服务器准备好后修改conf目录中的 cluster.conf 和 application.properties 配置
每台服务器都要改并保持一致

3. 启动

  • sh startup.sh -m 模式: 模式有两个选项 standalone / cluster 分别代表单机和集群模式启动;单机模式不需要依赖数据库单独使用,集群模式需要依赖数据库,默认为集群模式
  • [root@localhost conf]# ./startup.sh 

nacos设置开机自启

vim /lib/systemd/system/nacos.service
# 添加以下内容
[Unit]
Description=nacos
After=network.target

[Service]
Type=forking
Environment="JAVA_HOME=/usr/local/jdk1.8"
# 启动后面可以加上 -m standalone/cluster 表示以单机/集群方式启动,默认为集群
ExecStart=/opt/nacos/nacos/bin/startup.sh
ExecReload=/opt/nacos/nacos/bin/shutdown.sh
ExecStop=/opt/nacos/nacos/bin/shutdown.sh
PrivateTmp=true

[Install]
WantedBy=multi-user.target
#重新加载服务
systemctl daemon-reload
#启用服务
systemctl enable nacos.service
#启动服务
systemctl start nacos.service

4 nginx代理

新版本部署

Nacos2.0版本相比1.X新增了gRPC的通信方式,因此需要增加2个端口。新增端口是在配置的主端口(server.port)基础上,进行一定偏移量自动生成。

端口与主端口的偏移量描述
98481000客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求
98491001服务端gRPC请求服务端端口,用于服务间同步等

使用VIP/nginx请求时,需要配置成TCP转发,不能配置http2转发,否则连接会被nginx断开。

客户端拥有相同的计算逻辑,用户如同1.X的使用方式,配置主端口(默认8848),通过相同的偏移量,计算对应gRPC端口(默认9848)。

因此如果客户端和服务端之前存在端口转发,或防火墙时,需要对端口转发配置和防火墙配置做相应的调整。

其余部署参考Nacos部署手册 ,将版本相关替换成2.0.0。

[root@localhost nginx]# cat nginx.conf
load_module  /usr/lib64/nginx/modules/ngx_stream_module.so;
worker_processes  1; 
events { 
    worker_connections  10240; 
} 
#TCP  tcp转发:要添加在http {}之外
stream {
    upstream nacosgrpc{
        server 172.16.10.67:9848;
        server 172.16.10.68:9848;
        server 172.16.10.69:9848;
    }
    server {
        listen       9846;
        proxy_pass nacosgrpc;
   }

}
#HTTP  http转发:要添加在http {}里面
http { 
    include       mime.types; 
    default_type  application/octet-stream; 
    sendfile        on; 
    keepalive_timeout  65; 
    #nacos集群负载均衡 
    upstream nacos-cluster { 
        server 172.16.10.67:8848;
        server 172.16.10.68:8848;
        server 172.16.10.69:8848;
    } 
    server { 
        listen       80; 
        server_name  172.16.10.66;
        location / { 
            #root   html; 
            #index  index.html index.htm; 
            proxy_pass http://nacos-cluster; 
	    proxy_set_header Host $http_host;
        } 
        error_page   500 502 503 504  /50x.html; 
        location = /50x.html { 
            root   html; 
        } 
    } 
}

出现问题:

#查看日志journalctl -u nginx
nginx: [emerg] unknown directive “stream” in /etc/nginx/nginx.conf:13
nginx: configuration file /etc/nginx/nginx.conf test failed
#无法识别stream命令,应该是缺少modules模块
#解决方法
#安装nginx源
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
#先安装
yum -y install epel-release
#然后安装modules模块,启动正常
yum -y install nginx-all-modules.noarch

解决方案:

流模块被添加为动态的,根据:

--with-stream=dynamic

您需要它为“静态” - 因此直接加载模块。为此,请在nginx.conf的最顶部添加以下内容:

在CentOS7上,位于lib64文件夹下的模块路径。因此,您需要添加此行:

load_module '/usr/lib64/nginx/modules/ngx_stream_module.so';

小结:

在实际的项目中,如果某个微服务 Client 要连接到 Nacos 集群做服务注册,我们并不会把 Nacos 集群中的所有服务器都配置在 Client 中,否则每次 Nacos 集群增加或删除了节点,我都要对所有 Client 做一次代码变更并重新发布。那么正确的做法是什么呢?

常见的一个做法是提供一个 VIP URL 给到 Client,VIP URL 是一个虚拟 IP 地址,我们可以把真实的 Nacos 服务器地址列表“隐藏”在虚拟 IP 后面,客户端只需要连接到虚 IP 即可,由提供虚 IP 的组件负责将请求转发给背后的服务器列表。这样一来,即便 Nacos 集群机器数量发生了变动,也不会对客户端造成任何感知。

<think>好的,我现在需要帮助用户在CentOS 7上部署和配置Nacos集群。根据用户提供的引用内容,我需要整合这些信息,并生成一个详细的步骤指南。首先,我需要确认用户的环境是否已经安装了必要的依赖,比如Java和MySQL。因为根据引用[1],Nacos的持久化使用的是MySQL,所以安装MySQL是必须的。用户可能已经安装了MySQL,但需要确认版本,引用[1]提到了MySQL5.7和8.0的安装方法,可能需要指导用户如何安装或者确认现有安装。 接下来,引用[5]提到需要修改Nacos的配置文件application.properties,配置MySQL数据源。这包括设置数据库连接信息,如URL、用户名和密码。同时,引用[4]指出需要执行Nacos提供的SQL脚本来创建所需的数据库和表结构,这一步很重要,否则Nacos无法正常持久化数据。 然后,关于集群配置,引用[3]和[2]提到了使用standalone模式启动单节点,但在集群部署时需要修改cluster.conf文件,配置各个节点的IP和端口。这里需要注意,每个节点的cluster.conf中的内容必须一致,否则集群无法正确识别节点。此外,引用[3]还提到了使用systemctl来管理Nacos服务,这可以帮助用户更方便地启动和停止服务,并设置开机自启。 负载均衡方面,用户可能需要配置Nginx作为反向代理,引用[1]提到了负载均衡的安装和部署,但具体的Nginx配置需要用户根据实际情况进行调整,比如设置upstream块,定义各个Nacos节点的地址和端口。 另外,引用[2]中的启动脚本参数,如内存设置和GC日志配置,也需要在集群部署时保持一致,确保每个节点的性能配置相似,避免出现性能瓶颈。同时,引用[5]中的主从数据库配置可能需要用户根据实际数据库架构进行调整,如果使用单数据库,则只需配置db.url.0即可。 在步骤中,还需要提醒用户检查防火墙设置,确保集群节点之间的端口(如7848、8848等)是开放的,否则节点间通信可能受阻。同时,配置systemd服务时,需要正确设置ExecStart和ExecStop的路径,确保服务能够正常启动和停止。 最后,验证集群状态时,用户需要检查每个节点的日志文件,确认是否有错误信息,并通过Nacos控制台查看节点列表是否包含所有集群成员。如果遇到问题,可能需要检查MySQL连接、防火墙规则或配置文件中的拼写错误。 总结来说,步骤大致分为环境准备、MySQL配置、Nacos集群配置、启动集群、负载均衡配置和验证。需要确保每个步骤都详细且准确,避免遗漏关键配置点。同时,生成的相关问题需要覆盖用户可能遇到的后续疑问,如性能调优、安全配置和故障排查等。</think>以下是在CentOS 7上部署Nacos集群的详细指南: --- ### 一、环境准备 1. **安装Java** Nacos依赖Java 8+环境,使用命令验证安装: ```bash java -version ``` 若未安装,参考OpenJDK或Oracle JDK安装教程[^2]。 2. **安装MySQL** Nacos集群需持久化配置到MySQL(推荐5.7或8.0版本): - 参考[CentOS7离线安装MySQL5.7](引用链接1)或[MySQL8安装教程](引用链接2) - 创建数据库`nacos_config`并执行Nacos提供的SQL脚本: ```bash # 下载脚本(需替换实际路径) wget https://raw.githubusercontent.com/alibaba/nacos/master/distribution/conf/nacos-mysql.sql mysql -u root -p nacos_config < nacos-mysql.sql ``` --- ### 二、Nacos集群部署 1. **下载并解压Nacos** ```bash wget https://github.com/alibaba/nacos/releases/download/2.2.0/nacos-server-2.2.0.tar.gz tar -zxvf nacos-server-2.2.0.tar.gz -C /usr/local/ ``` 2. **配置MySQL数据源** 编辑`conf/application.properties`,添加: ```properties spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://[MySQL_IP]:3306/nacos_config?characterEncoding=utf8&autoReconnect=true db.user=root db.password=[Your_MySQL_Password] ``` 3. **配置集群节点** - 修改`conf/cluster.conf`(若不存在则创建): ```plaintext # 格式:[IP]:[PORT] 192.168.1.101:8848 192.168.1.102:8848 192.168.1.103:8848 ``` - **所有节点需保持此文件内容一致**。 4. **调整启动参数** 编辑`bin/startup.sh`,修改JVM参数(单节点建议): ```bash JAVA_OPT="${JAVA_OPT} -Xms512m -Xmx512m -Xmn256m" ``` --- ### 三、启动集群 1. **使用systemctl管理服务** 创建服务文件`/etc/systemd/system/nacos.service`: ```ini [Unit] Description=Nacos Server After=network.target [Service] Type=forking ExecStart=/usr/local/nacos/bin/startup.sh ExecStop=/usr/local/nacos/bin/shutdown.sh PrivateTmp=true [Install] WantedBy=multi-user.target ``` - 执行命令生效: ```bash systemctl daemon-reload systemctl start nacos systemctl enable nacos ``` 2. **验证集群状态** - 查看日志: ```bash tail -f /usr/local/nacos/logs/start.out ``` - 访问控制台:`http://[节点IP]:8848/nacos` (默认账号/密码:nacos/nacos) --- ### 四、配置负载均衡(Nginx示例) 1. **安装Nginx** ```bash yum install -y nginx ``` 2. **配置反向代理** 编辑`/etc/nginx/nginx.conf`,添加: ```nginx upstream nacos-cluster { server 192.168.1.101:8848; server 192.168.1.102:8848; server 192.168.1.103:8848; } server { listen 80; server_name nacos.example.com; location / { proxy_pass http://nacos-cluster; } } ``` - 重启服务:`systemctl restart nginx` --- ### 五、防火墙配置 ```bash # 开放Nacos端口(所有节点) firewall-cmd --permanent --add-port={7848/tcp,8848/tcp} firewall-cmd --reload ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值