centos 下搭建nacos集群

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 集群机器数量发生了变动,也不会对客户端造成任何感知。

搭建 Nacos 集群,您需要准备以下内容: 1. 两台或以上的云服务器,建议配置 4 核 8G 内存以上,操作系统为 CentOS 7 或以上版本。 2. 安装 JDK,版本建议选择 1.8 或以上版本。 3. 下载最新的 Nacos 发行版。 接下来,您可以按照以下步骤进行操作: 1. 在所有云服务器上安装 JDK,并确保环境变量已正确设置。 2. 下载 Nacos 发行版并解压到各个云服务器上。 3. 修改 Nacos 配置文件,包括 application.properties 和 cluster.conf 文件。 4. 启动 Nacos 集群。 具体操作步骤如下: 1. 安装 JDK 在云服务器上安装 JDK,可使用以下命令: ``` yum install java-1.8.0-openjdk.x86_64 ``` 并确保环境变量已正确设置。 2. 下载 Nacos 发行版 从 Nacos 官网下载最新的发行版,解压到各个云服务器上。 ``` wget https://github.com/alibaba/nacos/releases/download/2.0.1/nacos-server-2.0.1.tar.gz tar -zxvf nacos-server-2.0.1.tar.gz ``` 3. 修改 Nacos 配置文件 修改各个云服务器上的 Nacos 配置文件,包括 `application.properties` 和 `cluster.conf` 文件。 首先修改 `application.properties` 文件,设置 `server.port` 和 `spring.datasource.platform`,以及其他需要修改的配置项。 ``` # server port server.port=8848 # database type spring.datasource.platform=mysql ``` 然后修改 `cluster.conf` 文件,将各个云服务器的 IP 地址添加进去。 ``` # ip:port 192.168.0.1:8848 192.168.0.2:8848 ``` 4. 启动 Nacos 集群 在各个云服务器上启动 Nacos 集群。 ``` sh startup.sh -m standalone ``` 其中 `-m` 参数可以设置为 `standalone`、`cluster` 或 `config`,这里选择 `standalone`。 在所有云服务器上启动成功后,即可进入 Nacos 控制台进行操作。 总结一下,搭建 Nacos 集群的步骤主要包括安装 JDK、下载 Nacos 发行版、修改配置文件以及启动 Nacos 集群
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值