前言
在微服务项目中,只部署一个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节点情况
节点 | 部署ip | port |
---|---|---|
Nacos1 | 192.168.137.129 | 8841 |
Nacos2 | 192.168.137.129 | 8843 |
Nacos3 | 192.168.137.129 | 8844 |
这里为了更方便的修改配置,三个Nacos
节点都在Windows
上配置好。
再使用finalShell
(一种ssh工具),把已经配置好的三个Nacos
节点分别上传到三台服务器上运行即可。
注意:
这里没有使用连续端口,因为Nacos2.0
以后启动一个Nacos
就会占用连续的两个端口。
如果使用连续的端口,当启动第二个Nacos
集群节点时,会报如下错误:
Address already in use: bind
而Nacos1.0
到Nacos2.0
之间的版本,则可以使用连续的端口号。
2) 下载和解压Nacos
https://github.com/alibaba/nacos/releases
在releases
页面往下拖一点,每个发布版本的最后就有对应Linux和Windows的对应安装包。
这里就以2022年8月8号发布的最新版2.11版本为例子。
下载完成后解压安装包:
虽然是Linux
环境下的安装包。但是在Windows
下仍然可以解压。
并且Linux
环境下的安装包和Windows
环境下的安装包目录结构完全一致。
其实也很容易理解,就像在Linux
和Windows
下运行同一个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.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
节点重命名为nacos8841
、nacos8843
、nacos8845
。
分别修改三个中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目录
再次声明:
为了方便查看集群效果,把三个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
专栏下的内容
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/116490.html