Springcloud + nacos + gateway 负载均衡(ribbon)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Springcloud + nacos + gateway 负载均衡(ribbon)相关的知识,希望对你有一定的参考价值。

参考技术A Ribbon是客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用

负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,从而协同完成工作任务。 负载均衡构建在原有网络结构之上,它提供了一种透明且廉价有效的方法扩展服务器和网络设备的带宽、加强网络数据处理能力、增加吞吐量、提高网络的可用性和灵活性

本文主要测试,在Springcloud + nacos + gateway基础上,如何实现负载平衡

前面我们已经整合了Springcloud + nacos + gateway,实现了,当启动3个provider时候,通过gateway,可以对该3个provider进行轮询

1 nocas负载均衡。
   a nocas本身已集成了ribbon,默认使用轮询的方式
   b 在nocas设置weight,实现权重的方式
   c 自定rule(IRule实现类)
   d 顺提,在权重的方式下,可使用先设置权重为0,再关闭单一服务的方式,优雅地下线服务

2 使用ribbon直连ip
   a 使用ribbon提供的自动策略,轮询,随机等
   b 健康检查
   v 自定义rule

关掉其中一个provider,立即通过gateway进行轮询,发现gateway仍然会call已经down掉的provider,导致查询失败。但在大约5秒后,轮询恢复正常,不再call已经prodiver.
gateway call provider首先经nacos注册中心,nacos心跳机制默认每5秒钟检查一次provider是否正常,因此就会出现上面现象。

1 在启动类,将配置类 将IRule 的实现类注册到spring容器中即可
2 分别测试轮询和随机,可正常按规则负载

1 增加gatewayriboonip模块
2 pom添加依赖spring-cloud-starter-gateway和spring-cloud-starter-netflix-ribbon
3 修改application.yml,设置负载均衡
4 启动,测试可正常进行轮询
5 修改application.yml 如下,可测试到从轮询方式变成了随机的方式
   NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

这个时候down掉一个provider,然后轮询,到这个provider时候,会一直查询失败。我们需要增加一个健康检查处理,在服务down掉的时候,可感知到并将该服务从服务列表去除,在服务上线后,可检查到服务已上线
1 增加健康检查
   provider模块增加rest接口HealthController
   增加config类,产生RestTemplate
   增加健康检查类HealthExamination implements IPing。继承IPing接口,判断服务是否可用。我们在微服务中增加heath接口,在gateway中调用该接口,如果返回正常则认为微服务可用。
    修改application.yml 增加Ping如下
          NFLoadBalancerPingClassName: com.roy.springnacos.gatewayribbonip.loadBalance.HealthExamination
2 重启provider和gateway,进行测试
   a 轮询成功
   b down掉其中一个provider,轮询到该provider时候,查询失败
    这里测试未能成功,使用RoundRobinRule还是一直出现查询失败,未能自动skip掉down掉的provider
   但是自定义LoadBalancerRule的话,是能够成功skip掉down掉的provide的

1 增加MyRule extends AbstractLoadBalancerRule
2 重启后,测试成功按规则查询

SpringCloud学习 —— SpringCloud Alibaba Nacos服务注册和配置中心

Nacos
Naming Configuration Service
一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台
Nacos就是注册中心 + 配置中心 等价于 Nacos = Eureka + Config + Bus

在docker中安装和配置nacos详细步骤

使用docker部署Nacos


解压和安装

sudo tar -zxvf nacos-server-2.0.1.tar.gz -C /opt
sudo cp -r /opt/nacos/ /mynacos
备份nacos的启动文件
[johnny@localhost bin]$ sudo cp startup.sh startup.sh.bk

修改nacos脚本使得 使用 startup.sh 可以启动多个端口的nacos

亲测有效:centos8安装mysql5.7 https://blog.csdn.net/wudics/article/details/107573626
alter user root@localhost identified by ‘MySQLroot123#’;

修改application.properties配置文件
修改nacos的持久化配置 将默认的自带数据库换为mysql

Linux服务器上nacos的集群配置cluster.conf

编辑Nacos的启动脚背startup.sh

nacos1.3之后自带5个参数的
-Dserver.port=${EMBEDDED_STORAGE}

二、Nacos集群和持久化配置(windows环境) https://www.jianshu.com/p/a26e0b36ea31

sudo ./startup.sh -p 3333

/usr/bin/java/jdk1.8.0_291

服务注册

nacos自带负载均衡
原因: nacos整合了ribbon

Nacos支持AP和CP模式的切换
在这里插入图片描述

服务配置

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

[johnny@localhost ~]$ hostname -i
::1 127.0.0.1
[johnny@localhost ~]$ hostname -I
192.168.59.123 192.168.122.1 172.17.0.1

以上是关于Springcloud + nacos + gateway 负载均衡(ribbon)的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud使用Nacos服务发现实现远程调用

SpringCloud学习 —— SpringCloud Alibaba Nacos服务注册和配置中心

SpringCloud--alibliba--Nacos--下

教程SpringCloud+Nacos+Feign+Gateway搭建教程(推荐)

springcloud seata nacos环境搭建

SpringCloud学习笔记-p2(Nacos注册中心&Nacos配置管理)