🏠个人主页:啊陈晓
🎉学习方向:java后端开发
🎁我的上一篇文章:【深入浅出Nginx系列】Nginx入门?看这一篇就够了(实战篇)
💕如果我的文章对你有帮助,点赞、收藏、留言都是对我最大的动力
【玩转Springcloud Alibaba系列】使用Nacos 实现服务注册与负载均衡
未完待续.........
现在让我们正式开启进入今天的正文
目录
1.修改nacos中的配置文件application.properties
在上一讲中,我们已经对Nacos的服务发现和负载均衡的实现做出了详细的介绍,今天,我们在上一讲的基础上再进一步,使用Nacos集成 Nginx技术搭建架构更为复杂、可用性更高的Nacos集群。
注意:
在进行本文的学习前,读者需要对Nginx的基础知识、微服务架构及Nacos基础有一定的了解喔,不然本文学习起来可能会较为吃力。
如果还未了解过这些知识的小伙伴可以移步我的主页,那里有着与Nacos的基础知识、Nginx基础以及部分微服务架构相关的博客~欢迎大家前去观看~
学习过Nacos基础的小伙伴都知道,Nacos支持三种部署模式:
- 单机模式 - 用于测试和单机环境。
- 集群模式 - 用于生产环境,确保高可用性。
- 多集群模式 - 用于多数据中心场景。
而在【玩转Springcloud Alibaba系列】的上一篇文章【玩转Springcloud Alibaba系列】使用Nacos 实现服务注册与负载均衡中,我已经对Nacos单机模式的部署做出了详细的介绍,而今天,我们要介绍的,就是在生产环境下用的更多的部署模式——集群模式。
首先,我们先来看看一张架构图,对比单机模式和集群模式的区别:
Nacos部署模式:单机模式VS集群模式 | ||
---|---|---|
单机模式 | 集群模式 | |
Nacos节点数量 | 1个 | 至少3个 |
数据库 | Derby | Mysql |
代理服务器 | 无 | Nginx集群 |
在表格中我们可以看到,对比起单机模式,集群模式有着下面的优点:
在学习微服务时,无论是Eureka的集群也好、zookeeper、consul的集群架构也罢,我们总会听到高可用性这个词,那究竟什么是高可用性呢?
“高可用性”(High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。这种操作在现在的集群系统中。
人话:
Nacos作为服务注册中心,起着服务发现、配置中心、负载均衡等的作用,在只有一台Nacos服务器在工作的时候,一旦这台服务器发生宕机,就会导致整个系统发生故障,造成数据的丢失。为了保证整个系统的可用性,于是我们增加了两台或更多的Nacos服务器,这样即使是部分Nacos服务器宕机,也不会影响到整个系统的使用,提高了整个系统的可用性。
在单机模式中,Nacos默认采用内嵌式数据库Derby来存储数据,这使得Nacos在数据环境下有以下缺点:
- 一旦Nacos重启,所有数据都会丢失,数据无法进行持久化。
- 搭建集群时,会造成多台Nacos服务器各一台Derby数据库的情况,使得数据不同步。
所以在集群模式中,Nacos配置了Mysql,将数据放到可以统一共享的数据库中,保证了数据的一致性和持久化的问题
在集群模式的架构图中,我们可以看到集群中集成了Nginx,Nginx作为一款出色的完成高并发任务的代理服务器,能够出色的完成下面这些场景的任务:
- 反向代理
- 负载均衡
- 动静分离
这使得集群具备更强的高并发能力,能够承受更多的负载压力并被使用在更多场景之中,进一步提升了整个集群的高可用性。
在配置Nacos集群前,我们需要上表所示的环境,如果还未安装的小伙伴可以自行在网上查找相对应的教程进行安装,在这里因为篇幅原因我们就只对Linux环境下Nacos的安装做出介绍。
在这里我也为大家提供了相对应的安装包供大家使用
链接:百度网盘
提取码:acxy
安装Nacos需要具备jdk环境,输入下面命令检测jdk环境是否安装成功:
java -version
安装成功后如下所示:
进入到/usr/local/software 目录(如果没有 software则自己创建)
- cd /usr/local/software #进入对应目录
-
- mkdir software #如果目录不存在则在对应路径下创建文件夹
将下载好的资源包上传到software文件夹中,也可以直接将文件拖进去。
解压安装包
tar -zxvf nacos-server-1.4.3.tar.gz
将解压后的文件夹放到服务器/usr/local文件夹下
mv nacos /usr/local/
进入 /usr/local/nacos/conf 目录下,可以看到nacos-mysql.sql脚本,对其进行备份
cp nacos-mysql.sql nacos-mysql.sql.bk #将数据库脚本文件进行备份
连接到mysql
- systemctl start mysqld #启动mysql服务
-
- mysql -u 用户名 -p #连接到mysql,用户名即你所创建的用户名
创建一个数据库nacos_config (名字必须为这个!!)
- CREATE DATABASE nacos_config; #创建一个数据库
-
- SHOW DATABASES; #查看数据库列表
进入nacos_config数据库,执行脚本文件,查看执行后的表
- use nacos_config;
-
- source /usr/local/nacos/conf/nacos-mysql.sql;
-
- show tables;
退出mysql
exit;
进入/usr/local/nacos/conf,可以看到application.properties文件,对其进行备份
cp application.properties applicationbk.properties
在这里配置Nacos服务的数据库 ,按下图所示修改完成后wq保存退出
vi application.properties
将url、user、password改成你自己的数据后添加在文件的末端
- spring.datasource.platform=mysql
-
-
- db.num=1
- db.url.0=jdbc:mysql://127.0.0.1:3306/nacostest?characterEncoding=utf8&serverTimezone=UTC&connectTimeout=10000&socketTimeout=30000&autoReconnect=true
- db.user=root
- db.password=520141Cx..
确定三台服务器的端口号:
3台nacos服务器的不同服务端口号 |
---|
192.168.154.140:8841 |
192.168.154.140:8842 |
192.168.154.140:8843 |
进入/usr/local/nacos/conf,可以看到cluster.conf.example文件,将其复制成cluster.conf (这里也要注意,必须是cluster.conf,否则nacos无法识别)
cp cluster.conf.example cluster.conf
对cluster.conf进行修改,在编辑模式下配置三台nacos服务器的地址后wq退出
vi cluster.conf
进入/usr/local/nacos/bin,可以看到startup.sh,同样对其进行备份
cp startup.sh startup.sh.bk
编辑脚本文件,使其能够根据端口号运行对应的nacos服务器
编辑处如下图所示后wq退出:
vi startup.sh
启动Nacos集群必须使用三个文件夹分别进行启动,所以我们对拷贝出份nacos文件夹,分别为:
注意:一定要使用三个文件夹进行启动,不能只使用一个文件夹,不然集群会启动失败!!博主就在这里卡了很久!!
- nacos01
- nacos02
- nacos01
- mv nacos nacos01 #将nacos文件夹改名为nacos01
-
- mkdir nacos #新建一个名为nacos的文件夹
-
- mv nacos01 /usr/local/nacos #将nacos01文件夹移动到nacos中
-
- cp - r nacos01 /usr/local/nacos/nacos02 #将nacos01复制到nacos文件夹中并命名为nacos02
-
- cp - r nacos01 /usr/local/nacos/nacos03 #将nacos01复制到nacos文件夹中并命名为nacos03
-
如下图所示即拷贝成功!
进入/usr/local/nacos/目录,输入下面命令依次启动nacos服务,并查看启动的nacos数目:
- nacos1/bin/startup.sh -p 8841 #启动端口号为8841的nacos服务
-
- nacos2/bin/startup.sh -p 8842 #启动端口号为8842的nacos服务
-
- nacos3/bin/startup.sh -p 8843 #启动端口号为8843的nacos服务
-
- ps -ef|grep nacos|grep -v grep|wc -l #查看当前启动的nacos服务的个数
注意:在这里有小伙伴可能会发现,我明明启动了三个服务器,但是查看的时候却只有一个,对此情况的解决方案是:
- 关闭当前虚拟机
- 进入虚拟机设置页面
- 适量增加虚拟机的内存
- 重启
重启完成后,再次启动nacos服务,会发现此时启动多少个服务就显示多少个服务器:
启动nacos后,将IP地址换成你自己的,访问下面的链接:
http://192.168.154.140:8843/nacos/index.html
http://192.168.154.140:8842/nacos/index.html
http://192.168.154.140:8841/nacos/index.html
若结果如下图所示即证明nacos启动成功。
进入/usr/lcoal/nginx/conf中,修改nginx.conf文件,如下图所示在对应位置进行修改,修改完成后wq保存退出。
进入Nginx下的sbin目录,启动Nginx:
sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
进行测试:
访问:http://192.168.154.140:1111/nacos/index.html
如下图所示即配置成功
输入账号和密码:
账号:nacos
密码:nacos
登陆后查看集群配置中的节点列表,结果如下图所示即搭建成功!
访问我们所设置数据库中的表,可以查看到对应的配置信息则成功
- mysql -u root -p #连接数据库
-
- use nacos_config; #切换到nacos_config数据库
-
- show tables; #展示该数据下所有表
-
- select * from config_info; #查看config_info表下所有的数据
将微服务cloudalibaba-provider-payment9002注册进Nacos中
修改yaml文件中的nacos地址如下:
- server:
- port: 9002
-
- spring:
- application:
- name: nacos-payment-provider
- cloud:
- nacos:
- discovery:
- server-addr: 192.168.154.140:1111 #配置Nacos地址
-
- #配置使用Actuator其他端点(除了info和health)
- management:
- endpoints:
- web:
- exposure:
- include: "*"
启动服务,访问http://192.168.154.140:1111/
若可以看到nacos集群中出现nacos-payment-provider,则证明服务注册成功
相对博主学过的其他集群搭建来说,Nacos高可用的集群的搭建还是比较复杂的,博主也是踩了很多坑才把集群搭建成功,长期处于下图的这种状态。
总的来说,在搭建的过程中还是要细心一些,尽量避免一些不必要的错误。还有一点,就是看日志!!看日志!!看日志!!,重要的事情说三遍,不要一出现错误就盲目上网找!先了解到底是什么错误导致的失败再上网查找解决方案,这样才能锻炼到你的能力,少踩一些坑!!
最后的最后,祝大家都能顺利搭建成功!!