百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

使用nginx的负载均衡机制实现用户无感更新服务

off999 2025-02-15 16:59 35 浏览 0 评论


知识改变命运,撸码使我快乐,2020继续游走在开源界
点赞再看,养成习惯

前言

用户请求的转发是接口服务在部署时必须要做的一步。

请求转发的步骤大约分为如下几步:

  1. 域名解析到转发服务器
  2. 转发服务器会根据权重(weight)、备用(backup)配置转发到统一网关
  3. 如果统一网关存在灰度的配置,需要根据身份或者头信息过滤请求
  4. 转发到具体的业务服务

目前市面上优秀的 请求转发有很多种,比如: Nginx、 F5、 Kong、 Tengine等,其中 Tengine是阿里巴巴基于 Nginx进行封装,我们本章的内容基于 Nginx进行讲解,我们先来准备下 nginx的测试环境。

准备环境

如果你的测试环境没有安装 Nginx,下面我通过两种方式来说下具体的安装过程。

使用Brew安装Nginx

如果你是 OSX系统,可以直接使用 brew管理工具进行安装,这种方式比较简单,自动从远程服务器下载最新稳定的版本进行解压、配置环境等。

# 安装nginx?  ~ brew install nginx

静静等待~

安装完成后,我们先来修改下端口号(brew安装包把默认的监听端口号改为了 8080,一般在使用解压的方式安装时监听端口都是 80)。

我们需要先找到 nginx.conf这个文件的位置:

?  ~ sudo find / -name nginx.conf           /usr/local/etc/nginx/nginx.conf

找到文件后,我们通过 sudo
vi/usr/local/etc/nginx/nginx.conf命令来修改默认的端口号,位置如下:

server {        listen       80;        server_name  localhost;        #...}        

修改后保存退出。

最后不要忘记重启 Nginx服务。

?  ~ brew services restart nginx

解压包方式

首先去 nginx官方提供 http://nginx.org/download 的下载地址去挑选自己中意的版本,下面以 1.17.7版本示例:

  • http://nginx.org/download/nginx-1.17.7.tar.gz

点击下载完成后解压安装即可(注意编译环境,可能会缺少一些依赖库,本机安装对应的依赖就可以了)

# 解压nginxtar -xvf nginx-1.17.7.tar.gz# 进入目录cd nginx-1.17.7# 配置./configure --prefix=/usr/local/nginx# 编译sudo make# 安装sudo make install# 进入nginx执行目录cd /usr/local/nginx/sbin# 启动nginx./nginx

安装完成如果访问 http://127.0.0.1 可以看到 Welcometo nginx!字样,说明我们已经安装成功了。

示例项目

为了演示更新服务用户无痛感知,我们先来创建一个简单的 SpringBoot示例项目,在项目内添加一个测试接口,项目 pom.xml依赖如下所示:

      org.springframework.boot    spring-boot-starter-web  

示例接口

创建一个名为 TestController的测试控制器,如下所示:

/** * 测试控制器 * * @author 恒宇少年 */@RestController@RequestMapping(value = "/test")public class TestController {    @Autowired    private ServerProperties serverProperties;    @GetMapping    public String hello() {        return "请求分发到了,端口号:" + serverProperties.getPort() + "的服务,接口访问成功.";    }}

配置转发

我们测试所需要的请求接口已经准备好了,接下来需要在访问 nginx时将请求转发到我们测试的接口,配置转发时需要用到 nginx的两个关键字,分别是 upstream、 location。

  • upstream:服务器组,配置请求分发到组内多台服务器。
  • location:转发的路径前缀,如:"/user/",当我们访问 http://127.0.0.1/user/1时,就会执行该 location的转发业务。

upstream转发流程如下图所示:

配置UpStream

在 nginx.conf文件 http内添加转发的 服务器组(upstream),如下所示:

# 负载配置upstream test {    server 127.0.0.1:8080 weight=1;    server 127.0.0.1:9090 weight=2;    server 127.0.0.1:9000 backup;}

配置Location

在上面已经配置好了服务器组,我们需要把名为 test的服务器组作为代理的方式配置在 location,在 location的 server下新增一个 location,如下所示:

# 配置"/lb/"路径的请求全部转发到本地8080端口location /lb/ {    proxy_pass http://test/;    proxy_set_header Host $host;    proxy_set_header X-Real-IP $remote_addr;    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    proxy_connect_timeout       50;    proxy_read_timeout          50;    proxy_send_timeout          50;}

重启Nginx

我这里是使用 brew的方式安装的 nginx,所以重启的命令如下所示:

brew services restart nginx

如果你是 安装包的方式安装:

# 进入安装包目录cd /usr/local/nginx/sbin# 重载./nginx -s reload

权重配置

在 nginx中有一个权重的概念,根据权重值的大小来控制请求流量,当权重的配值越大时,流量分发就会越多,我们在 test服务器组内配置权重解释:

  • server127.0.0.1:8080weight1; 权重占比为 1/3,每3次请求会转发1次到这台服务器上。
  • server127.0.0.1:9090weight2; 权重占比为 2/3,每3次请求会转发2次到这台服务器上。

备用配置

当我们在 upstream内的 server尾部添加 backup时,表示这台服务器是备用服务器,只有其他服务器都停机时才会启用,我们更新时其实就利用的这一点。

运行测试

为了演示方便我们直接将本章测试项目 package打包后,通过 --server.port来指定运行的端口号来模拟多台服务器的场景。

# 启动127.0.0.1:8080服务器java -jar target/use-nginx-loadbalance-upgrade-service-0.0.1-SNAPSHOT.jar --server.port=8080# 启动127.0.0.1:9090服务器java -jar target/use-nginx-loadbalance-upgrade-service-0.0.1-SNAPSHOT.jar --server.port=9090# 启动127.0.0.1:9000备用服务器java -jar target/use-nginx-loadbalance-upgrade-service-0.0.1-SNAPSHOT.jar --server.port=9000

注意:使用多个终端窗口运行服务。

在 nginx.conf> server中配置 location的转发条件为 /lb/路径前缀,所以我们访问 http://127.0.0.1/lb/test (由于 nginx监听的端口号是80,所以通过 nginx访问转发时不需要携带端口号)就会被转发到 test服务器组内的服务器上。

测试点:权重转发

curl http://localhost/lb/test端口号:8080,接口访问成功.                                                                                                        curl http://localhost/lb/test端口号:9090,接口访问成功.curl http://localhost/lb/test                                                                                                       端口号:9090,接口访问成功.curl http://localhost/lb/test                                                                                                      端口号:8080,接口访问成功. 

根据访问的结果来看, 8080端口号的服务是每3次中请求了 1次,而 9090则是每3次中请求了 2次,这一点正是符合我们配置的权重( weight),测试通过。

测试点:备用生效

我们把 8080、 9090这两个服务都停掉,再次访问 http://127.0.0.1/lb/test 。

curl http://localhost/lb/test端口号:9000,接口访问成功.curl http://localhost/lb/test                                                                                                       端口号:9000,接口访问成功.      curl http://localhost/lb/test                                                                                                  端口号:9000,接口访问成功.

可以看到我们的备用服务器启用了,已经把全部的请求流量转发到 9000这台服务上,测试通过。

敲黑板,划重点

当我们把 8080、 9090都停掉时,备用服务器会启用,这时我们就可以来更新 8080、 9090这两个服务的运行代码,更新完成后重启,只要 8080、 9090这两台服务器有一台处于运行状态, nginx就不会把流量分发到备用的 9000,以此类推把全部的服务都更新完成。

代码示例

如果您喜欢本篇文章请为源码仓库点个 Star,谢谢!!! 本篇文章示例源码可以通过以下途径获取,目录为
use-nginx-loadbalance-upgrade-service:

  • Gitee:https://gitee.com/hengboy/spring-boot-chapter

相关推荐

如何将网址粘贴为链接(网址复制到word怎么变成链接)

可以复制网址链接的方法有多种,最常用的方法是在浏览器中打开需要复制的网页,在地址栏中选中网址,然后右键选择“复制”,或者按下“Ctrl+C”快捷键,即可将网址复制到剪贴板中。另外,某些应用程序也提供了...

i主题app下载(i主题官方版)

OPPO手机使用i主题的操作方法如下首先我们打开OPPO手机,在手机桌面找到i主题的图标,点击图标进入到主题页面,在主题页面,我们选择主题专区,然后再推荐主题专区里面找到你喜欢的主题之后,点击...

win10官方下载工具打不开(win10下载软件打不开怎么办)
win10官方下载工具打不开(win10下载软件打不开怎么办)

步骤/方式1首先右击win10桌面的此电脑图标,选择管理进入。步骤/方式2展开本地用户和组,点击用户,右击右侧的Administrator账户,选择属性打开,然后取消账户已禁用的勾选点击确定。步骤/方式3然后再次登录Administrato...

2025-12-18 04:03 off999

系统错误怎么解决(微信系统错误怎么解决)

1、最后一次正确的配置:在开机启动未进入到操作系统之前我们按下F8键,选择“最后一次正确的配置”然后回车即可。此方法只能解决因出现配置问题进不了系统的情况(例如更换新硬件或加载新驱动后造成的蓝屏),由...

电脑自带的防火墙怎么关(电脑的防火墙如何关闭)
电脑自带的防火墙怎么关(电脑的防火墙如何关闭)

点击开始,点击设置,进入设置后我们可以直接在上方的搜索框中直接搜索【defender】,就会弹出防火墙。点击进入防火墙后,在左侧的列表中找到【启用或关闭Windowsdefender防火墙】,并且点击进入。进入后,就可以自行关闭所有的防...

2025-12-18 03:03 off999

光猫和路由器哪个网速快(光猫网速快还是路由器网速快)

两个都快。这要从两个设备的功能说起。光猫是把光信号转变成数字信号的一种设备,随着光猫技术的发展,现在光猫也集成了路由器的功能,也带有有线和无线,只要有光纤加上光猫,就可以实现有线或者无线上网。路由器的...

台式电脑运行一段时间就死机

1、散热不良:显示器、电源和CPU工作时间太长会导致死机,给风扇除尘,上油。2、灰尘杀手:机器内灰尘过多也会引起死机故障。定期清洁机箱。3、内存条故障:主要是内存条松动,内存芯片本身质量所致,应根...

高清windows免费版观看(高清windows免费版观看网站)

方法一:1、右键单击开始菜单----运行2、在运行对话框中输入:devmgmt.msc,展开:显卡适配器,右击所列的显卡适配器,点击卸载。3、卸载后重新安装兼容Win10的显卡驱动,建议去官方下载...

h3c官网(H3C官网登录账号)

1H3C防火墙官网是存在的,可以通过搜索引擎或输入官方网址进行访问。2H3C防火墙官网提供了产品信息、技术支持、解决方案和服务支持等各种资源,帮助用户全面了解和使用H3C防火墙产品。同时,还有在线...

系统流小说下载(系统流小说大全完本)

全能奇才、末世之兑换高手、穿越之兑换无敌、:重生之我能升级、重生之模拟游戏、超级物品、戒指也疯狂、全职天才、疯狂道具、星戒、超级游戏分身、重生之神才风流、全能闲人、逆天作弊器之超级游戏、宅男之游戏人生...

win7网络设置初始化(win7网络设置初始化方法)

1、首先在操作系统桌面上,点击左下角开始按钮选择控制面板选项进入。2、进入控制面板主界面,点击查看方式下拉按钮选择大图标进入。3、切换至所有控制面板项,点击恢复选项进入。4、进入恢复界面,点击高级恢复...

家用笔记本电脑哪个牌子实惠又好用

在用机械革命s1pro键盘不好用,录音功能不好用,其它还行吧一分价钱一分货清华同方品牌的笔记本最便宜,然14最大的特点就是便宜,仅售3000元,属于新品笔记本中的超低价位。屏幕方面,熟悉的1080p...

免费使用的数据恢复软件(真正的免费的数据恢复软件)

1、在误删除数据后,无论是硬盘、U盘、SD卡还是其他存储设备,最好马上停止写入新的数据,保持现状,然后找适当的数据恢复软件进行恢复。请勿使用非专业软件,以免导致文件彻底无法恢复!  2、在误删除数据后...

感冒流鼻涕怎么办最简单方法

由于受凉感冒引起鼻腔腺体分泌旺盛导致鼻涕增多,建议在医生指导下使用玉屏风颗粒口服治疗促进恢复正常,可以进食鼻腔腺体分泌,改善流鼻涕,打喷嚏症状,另外注意保暖,不要进食辛辣刺激性食物,避免疲劳,多食用容...

tp路由器无线设置最佳参数(tp-link路由器网络参数怎么设置)

1,在浏览器中输入192.168.1.1,进入后台管理,输入用户名和密码登录。2,先连接外网。在左边选择“网络参数”下的“WAN口设置”。3,并在右边选择一种网络方式,如“PPPOE”并输入帐号和密码...

取消回复欢迎 发表评论: