Nacos2.1.1在Linux中的集群部署详解

前言

在微服务项目中,只部署一个Nacos, 就会面临一个问题。

那就是单点故障。

一旦发送单点故障,会导致整个微服务崩坏。

所以在生产环境中,是一定要搭建Nacos集群的。

一、集群结构图

Nacos原始集群结构(官网提供):

在这里插入图片描述

DNS:域名,其实指代的是一个Nacos客户端,在项目中就是任何一个使用Nacos的微服务。

SLB:负载均衡器,作用和SpringCloud中的Ribbon差不多。不过这里的SLB是对各个Nacos节点做负载均衡。

AZ:第三层的AZ就代表一个Nacos集群中的Nacos节点。

经由原始架构的启发,可以有如下的Nacos集群架构的具体实现:
在这里插入图片描述

架构解释:

Nacos客户端:使用Nacos作配置中心或者注册中心的微服务项目。

Nginx:利用Nginx的反向代理和负载均衡完美实现原始架构图中的SLB(负载均衡器)。

Mysql集群Nacos各个节点之间并不能直接通讯,所以可以把Nacos数据存储在Mysql中, 让所有节点从Mysql集群当中存取共享数据。之所以使用集群,是为了保证Mysql的高可用。

二、搭建集群

1) 明确目标需要的3个Nacos节点情况

节点部署ipport
Nacos1192.168.137.1298841
Nacos2192.168.137.1298843
Nacos3192.168.137.1298844

这里为了更方便的修改配置,三个Nacos节点都在Windows上配置好。

再使用finalShell(一种ssh工具),把已经配置好的三个Nacos节点分别上传到三台服务器上运行即可。

注意:

这里没有使用连续端口,因为Nacos2.0以后启动一个Nacos就会占用连续的两个端口。

如果使用连续的端口,当启动第二个Nacos集群节点时,会报如下错误:

Address already in use: bind

Nacos1.0Nacos2.0之间的版本,则可以使用连续的端口号。

2) 下载和解压Nacos

https://github.com/alibaba/nacos/releases

releases页面往下拖一点,每个发布版本的最后就有对应Linux和Windows的对应安装包。

这里就以2022年8月8号发布的最新版2.11版本为例子。

在这里插入图片描述

下载完成后解压安装包:

​ 虽然是Linux环境下的安装包。但是在Windows下仍然可以解压。

​ 并且Linux环境下的安装包和Windows环境下的安装包目录结构完全一致。

​ 其实也很容易理解,就像在LinuxWindows下运行同一个SpringBoot项目。

SpringBoot项目的结构是一样的。

在这里插入图片描述

小技巧:

​ 基于上面的特点,我们可以使用任意安装包,在Windows下完成配置,再上传到Linux下运行。

3) 按官方建表文件搭建Nacos数据库

3.1 线上Nacos建表文件地址:

https://github.com/alibaba/nacos/blob/master/distribution/conf/nacos-mysql.sql

直接打开这个地址(此地址就是官方地址),里面是官方提供的Nacos数据库的建表语句。

3.2 本地Nacos建表文件位置:

如果地址打不开或者没网络,刚才下载的安装包里也有nacos-mysql.sql这个文件
在这里插入图片描述

如上图所示,在nacos/conf目录下,就有nacos-mysql.sql这个文件。

注意:

最好是使用Mysql,要不然可能建表会出现各种意外。

这个文件中也明显带了-mysql标识。

3.2 开始搭建Nacos数据库

由于搭建Mysql集群比较复杂,这里不做缀述。

这里就用本地单体Mysql来演示

使用本地还是集群最终使用都是一样的。只是Mysql集群搭建比较复杂。

3.2.1 创建数据库,库名就叫nacos
在这里插入图片描述

3.2.2 执行nacos-mysql.sql

使用nacos-mysql.sql和去官方提供的线上建表文件里复制建表语句都是一样的。

但是建议使用本地的nacos-mysql.sql,因为这个文件一定是完全适配所下载的Nacos的版本的。
在这里插入图片描述

执行成功后数据库表如下:
在这里插入图片描述

注意点:

执行这个文件可能会报如下错误:

Invalid default value for 'gmt_create'

有以下解决方法:

  • datetime类型改为timestamp类型。
  • 去掉DEFAULT CURRENT_TIMESTAMP
  • Mysql数据库版本升级至5.6.5以上。

我不建议修改官方提供的文件,语句那么多也不好改,而且官网这么写说不定有特定作用。

所有出现这个问题,只要提升我们自己数据库的版本就行。

建议就用Mysql 5.7版本。

4) 配置单个Nacos

先不要着急一下搞三个Nacos节点,可以先配完一个,再复制三份。

三个节点相同的配置,就没必要配三次。

4.1 修改conf目录下的application.properties文件,增加如下配置:

#数据平台 就是目前使用的哪种数据库 即mysql oracle等数据库
spring.datasource.platform=mysql	

#db.num 集群中有几台mysql
#这里暂时只有一台,因为这里主要是Nacos集群的搭建,所以没有用较大篇幅演示mysql集群的搭建
db.num=1

# 数据库的url 用户名和密码
db.url.0=jdbc:mysql://192.168.137.129:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=root

一开始的时候这些配置是被注释了的:
在这里插入图片描述

我们只要解开对应注释,改为自己的配置即可。

4.2 修改conf目录下的cluster.conf.example文件

  • 首先把cluster.conf.example重命名为cluster.conf

  • 然后打开文件,在里面添加Nacos各个节点的ip和端口号

    # 为了方便查看集群效果,我把三个Nacos节点放在一个Linux上
    # 实际生产环境,只需要在Windows下配置好,然后再分别上传到三台对应的Linux服务器上即可
    192.168.137.129:8841
    192.168.137.129:8843
    192.168.137.129:8845
    

最终配置效果如下:
在这里插入图片描述

5 ) 配置三台Nacos的个性化配置

把上面配置好点的节点复制两份。

这时候三个Nacos节点都是一样的配置。

分别把三个Nacos节点重命名为nacos8841nacos8843nacos8845

在这里插入图片描述

分别修改三个中Nacos节点的application.properties文件。

主要是为了修改三个节点的端口号:

  • nacos8841:

    server.port=8841
    
  • nacos8843:

    server.port=8843
    
  • nacos8845:

    server.port=8845
    

6) 使用finallshell把三个Nacos节点上传到Linux上

6.1 在 /usr/local/下创建nacos-cluster来放三个Nacos节点

cd /usr/local/			# 进入/usr/local/目录

mkdir nacos-cluster		# 创建nacos-cluster文件夹

cd nacos-cluster		# 进入nacos-cluster目录

6.2 使用finallshell上传三个Nacos节点
在这里插入图片描述

再次声明:

为了方便查看集群效果,把三个Nacos节点放在一个Linux上
实际生产环境,只需要在Windows下配置好,然后再分别上传到三台对应的Linux服务器上即可

6) 使用启动所有Nacos节点并查看效果

6.1 分别启动这三个Nacos节点

# 集群启动命令 (集群启动也是nacos的默认启动方式)
sh startup.sh -p embedded

# 拓展一个单机启动命令(可以用作测试)
sh startup.sh -m standalone

在这里插入图片描述

出现红框处的这两句,就代表其中一个Nacos集群节点启动成功!

按照相同的方式把所有节点都启动起来即可。

6.2 尝试不使用反向代理直接访问

# 开启三个Nacos节点的对外访问 端口
firewall-cmd --zone=public --add-port=8841/tcp --permanent
firewall-cmd --zone=public --add-port=8843/tcp --permanent
firewall-cmd --zone=public --add-port=8845/tcp --permanent

#重启防火墙
firewall-cmd --reload

访问下面任意一个地址:

http://192.168.137.129:8841/nacos
http://192.168.137.129:8843/nacos
http://192.168.137.129:8845/nacos

效果如下:
在这里插入图片描述

在节点列表中可以看到集群中各个节点的状态。

UP代表启动正常,DOWN代表该节点并不在线。

由此集群基本架构搭建完毕。

三、使用Nginx做集群的反向代理和负载均衡

修改 Nginx 配置文件conf目录下的nginx.conf:

# 定义一组需要反向代理的服务器
# 对它们的默认的负载均衡策略是轮询策略
upstream nacos-cluster {
    server 192.168.137.129:8841;
	server 192.168.137.129:8843;
	server 192.168.137.129:8845;
}

# 下述配置的含义为: 
# 当我们访问8999端口时
# 根据反向代理配置,会将请求转发到 http://nacos-cluster 对应的服务上。
server {
    listen       8999;
    server_name  192.168.137.129;

    location /nacos {						#监听的请求路径为/nacos
        proxy_pass http://nacos-cluster; 	#反向代理配置
    }
}

配置完成后,开启需要监听的8999端口:

# 开启8999 端口
firewall-cmd --zone=public --add-port=8999/tcp --permanent

#重启防火墙
firewall-cmd --reload

浏览器访问:

http://192.168.137.129/nacos

在这里插入图片描述

访问这个地址,Nginx会自动根据负载均衡策略帮我们完成堵在均衡!

SpringBoot中的Nacos配置改为如下配置:

spring:
  cloud:
    nacos:
      server-addr: 192.168.137.129:8999 	# Nacos地址(ip + 端口号)

四、后记

4.1 关于集群节点部分

为了快速实现集群效果,这里把所有集群节点部署在一台Linux上。

实际部署的话,应该分别部署在三台Linux服务器上。

这样可以有效的做好容灾和隔离。

4.2 关于Nginx部分

想要具体了解Nginx怎么使用,可以看我Nginx专栏下的内容

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值