Nginx负载均衡详解

news2024/12/26 21:57:49

一、负载均衡介绍

1、负载均衡的定义

单体服务器解决不了并发量大的请求,所以,我们可以横向增加服务器的数量(集群),然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。

负载均衡的意思是在服务器集群中,需要有一台服务器作为调度者,客户端所有的请求都由调度者接收,调度者再根据每台服务器的负载情况,将请求分配给对应的服务器去处理。

在这个过程中,调度者如何合理分配任务,保证所有服务器将性能充分发挥,从而保持服务器集群的整体性能最优,这就是负载均衡的需要处理的问题了。

2、nginx负载均衡

nginx在 nginx.conf配置文件中通过 upstream模块 和 server模块的配合使用,就可以实现负载均衡。

2.1 upstream 模块

upstream 模块:负载均衡模块,通过一个简单的调度算法来实现客户端IP到后端服务器的负载均衡。

在http的 upstream模块中,可以通过 server指令指定后端服务器的IP地址和端口,同时还可以设定每个后端服务器在负载均衡调度中的状态。

常用的状态有:

  • weight:服务访问的权重,默认是1。
  • down:表示当前的server暂时不参与负载均衡。
  • backup:预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。
  • max_fails:在fail_timeout时间内,允许请求最大的失败次数,默认为1。当达到最大失败时,会在fail_timeout时间内不允许再次被选择。,返回 proxy_next_upstream 模块定义的错误。
  • fail_timeout:单位为秒,默认是10秒。指定一段时间内,请求经历了max_fails次失败后,该server不能访问的时间(暂停服务的时间)。max_fails可以和fail_timeout一起使用。

注意:当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不能是backup。

2.2 nginx负载均衡配置

nginx.conf 负载均衡的基本配置内容如下,以轮询策略为例:

worker_processes  1;

events {
  	worker_connections  1024;
}
 
 
http {
		# upstream模块:server_group_name 自定义服务组名
    upstream  server_group_name {
    		# server指令指定后端服务器的IP地址和端口
        server    localhost:8080;
        server    192.168.xxx.xxx:8081 down;
        server    192.168.xxx.xxx:8082  max_fails=3  fail_timeout=20s;
        server    192.168.xxx.xxx:8083;
    }
    
 		# server模块
    server {
        listen       80;
        server_name  localhost;
 
        location / {
         		# proxy_pass:代理转发,将单体服务http://127.0.0.1:80,改为服务组名
         		proxy_pass http://server_group_name/;
         		# proxy_redirect default;
        }
    }
}

二、Nginx负载均衡实战

浏览效果:在浏览器访问:http://192.168.xxx.xxx/test.html时,由于配置的负载均衡会将请求平均分发到两台服务器中,访问时会出现不同界面。。

1、准备工作

这里准备两台tomcat服务器,一台服务器的端口为8080,另一台服务器的端口为8080;

在这两台tomcat服务器的webapps目录中的 ROOT文件夹中创建一个 test.html文件,用于测试。

# 添加 html文件并加入内容
echo "<h1>This is 8080 Port</h1>" > /usr/local/tomcat8080/webapps/ROOT/test.html
echo "<h1>This is 8080 Port -------</h1>" > /usr/local/tomcat8080/webapps/ROOT/test.html

启动两个tomcat服务。

#启动tomcat8080
/usr/local/tomcat8080/bin/startup.sh

浏览器直接访问tomcat服务。

在这里插入图片描述

2、Nginx负载均衡配置

第一步:修改Nginx的配置文件

vim /usr/local/nginx/conf/nginx.conf

配置内容如下,以轮询策略为例:

worker_processes  1;

events {
  	worker_connections  1024;
}
 
 
http {
    # upstream模块:自定义服务组名
    upstream my_tomcat_server {
    	 server 192.168.xxx.1xx:8080;
    	 server 192.168.xxx.2xx:8080;
    }

    server {
    	 listen       80;
	     server_name  192.168.xxx.xxx;  # 指定虚拟主机的IP,或者外网域名
    
    	 location / {
    		  root   html;
    		  # proxy_pass:代理转发,指定我们配置负载均衡的服务名my_tomcat_server
    		  proxy_pass http://my_tomcat_server; 
    		  index  index.html index.htm; 
    	 }
    }
}

第二步:重启Nginx

修改 nginx完之后,保存退出,重启Nginx。

/usr/local/nginx/sbin/nginx -s reload

# 先执行停止命令再执行启动命令
[root@centos7 sbin]# /usr/local/nginx/sbin/nginx -s quit
[root@centos7 sbin]# /usr/local/nginx/sbin/nginx

第三步:浏览器访问OK

在浏览器访问:http://192.168.xxx.xxx/test.html时,由于配置的负载均衡会将请求平均分发到到这两台服务器中,所以,访问时会出现不同界面。

在这里插入图片描述

第四步:关闭服务

#关闭Nginx
/usr/local/nginx/sbin/nginx -s quit
#关闭tomcat
/usr/local/tomcat8080/bin/shutdown.sh
/usr/local/tomcat8080/bin/shutdown.sh

三、Nginx负载均衡分配策略介绍

1、轮询[默认]

轮询方式是Nginx负载默认的方式。

该策略会使得每个请求按时间顺序逐一分配到不同的后端服务器,如果其中某个后端服务器 down 掉,该策略能自动从轮询列表中剔除该服务。

轮询方式是将所有请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。

    # upstream模块:自定义服务组名
    upstream my_tomcat_server {
    	 server localhost:8080; # 服务器的ip:port
    	 server 192.168.xxx.xxx:8081;
    }

2、权重(weight)

该策略会指定每个服务的权重比例,权重越高被分配的客户端(请求)也就越多,weight 和访问比率成正比。主要用于后端服务器性能不均的情况。

  • weight指定轮询权值,默认值为1。通常用于后端服务机器性能不统一,将性能好的分配权重高来发挥服务器最大性能。

不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。

    upstream my_tomcat_server {
    	 server localhost:8080  weight=2;
    	 server 192.168.xxx.xxx weight=5; # 权重设置为5,5>2,所以请求时会多跳转到这个服务
    }

3、ip_hash(哈希)

该策略会按照每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器。有效解决了动态网页存在的session共享问题。

源地址哈希法:根据获取客户端的IP地址,通过哈希函数计算得到一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客服端要访问服务器的序号。采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问。

注意:ip_hash和 weight也可以配合使用。

    upstream my_tomcat_server {
		ip_hash;
    	server localhost:8080;
    	server 192.168.xxx.xxx; 
    }
# ip_hash和 weight也可以配合使用
    upstream my_tomcat_server {
		ip_hash;
    	server localhost:8080  weight=1;
    	server 192.168.xxx.xxx weight=2;
    }

4、最少连接(least_conn)

该策略会将请求分配到连接数最少的服务上。

    upstream my_tomcat_server {
		least_conn;
    	server localhost:8080;
    	server 192.168.xxx.xxx; 
    }

5、第三方策略

Nginx支持集成第三方的策略插件。

比如:

  • fair:此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,即响应时间短的优先分配。比上面更加智能的负载均衡算法。下载安装 Nginx的upstream_fair模块。
  • url_hash:按访问 url的 hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。下载安装 Nginx 的hash软件包。

– 求知若饥,虚心若愚。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1038682.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【EI会议】第三届大数据、人工智能与风险管理国际学术会议 (ICBAR 2023)

第三届大数据、人工智能与风险管理国际学术会议 (ICBAR 2023) 2023 3rd International Conference on Big Data, Artificial Intelligence and Risk Management 第三届大数据、人工智能与风险管理国际学术会议&#xff08;ICBAR2023&#xff09;将于2023年11月24-26日在中国成…

18643 鸡马立克氏病诊断技术

声明 本文是学习GB-T 18643-2021 鸡马立克氏病诊断技术. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了鸡马立克氏病临床诊断&#xff0c;以及病毒分离、琼脂免疫扩散试验、PCR 检测和荧光定量 PCR 检测等实验室检测的技术要求…

【通世智库】彭子商:秋风集

我的人生阅历是丰富的&#xff0c;感受是复杂的。 我出生于1949年&#xff0c;父亲是中国老一代旧知识分子&#xff0c;是重庆宽仁医院(教会医院)最后一任院长。【作者&#xff1a;彭子商;来源&#xff1a;通世智库;编撰&#xff1a;张小青】 我同共和国一起成长&#xff0c;经…

开源视频处理软件OBS Studio下载和使用

为了免费使用麦克风降噪功能&#xff0c;可以使用可以使用OBS Studio软件。在清华大学开源软件镜像站提供的OBS Studio镜像源上下载或者上csdn 找我的内容源0积分下载。链接https://download.csdn.net/download/A41915460/88371699 录VCR的时候提取打好纸张发言稿件&#xff0c…

Vue3最佳实践 第五章 Vue 组件应用 5 (Vue 插件)

想了解Vue插件所以你看了官方文档却看不懂&#xff0c;或者你想知道Vue.use()方法和插件的关系。在本文档中&#xff0c;我们将参照文档讲解插件制作的基础知识&#xff0c;了解基础知识后&#xff0c;我们将制作与更实用的下拉菜单和脚本加载相关的插件。读完之后&#xff0c;…

浅谈智慧医院的信息集成平台建设与配电设计方案

安科瑞电气股份有限公司 上海嘉定201801 摘要&#xff1a;随着云计算、5G、大数据、物联网等技术的不断发展与进步&#xff0c;推动着智慧医院建设的飞速发展。智慧医院建设强调医院内部业务的多流程联动和医疗信息互联互通的高协同效率&#xff0c;突出了数据驱动下构建高质量…

视频号如何下载到相册,无水印高清下载保存到手机相册

微信视频号是一个全新的内容记录与创作平台&#xff0c;他不同于订阅号与服务号&#xff0c;很多人都有这么一个需求视频号视频怎么下载保存到手机相册&#xff0c;不同的人思路要有所不同&#xff0c;今天这篇内容就和大家聊聊如何下载并保存到手机相册。 视频号如何下载到相…

苹果手机屏幕上的悬浮球怎么设置(必备教程)

苹果手机有一个好用又好玩的功能叫做悬浮球&#xff0c;又名白色小圆点。该功能最大的优点就是给用户提供了便携式访问&#xff0c;它相当于一个快捷键&#xff0c;能够让用户在无需返回主屏幕的情况下快速完成一些其他操作。 但是一些新用户可能还不知道如何设置悬浮球。苹果…

uni-app:实现密码框内容展示与隐藏

效果 代码 <template><view class"container"><view class"item_left"><view>密码</view><view class"eye_position" taptoggleShowPassword><image :srceye v-ifisShowPassword /><image :srcey…

iTOP-RK3588开发板体验RKNN_DEMO

RKNN 是 Rockchip NPU 平台(也就是开发板)使用的模型类型&#xff0c;是以.rknn 结尾的模型文件。 RKNN SDK 提 供 的 demo 程 序 中 默 认 自 带 了 RKNN 模 型 &#xff0c; 在 RKNN SDK 的 examples/rknn_yolov5_demo/model/RK3588/目录下&#xff0c;如下图所示&#xff…

robotframework在Jenkins执行踩坑

1. Groovy Template file [robot_results.groovy] was not found in $JENKINS_HOME/email_template 1.需要在managed files 添加robot_results.groovy。这个名字需要和配置在构建项目里default content一致&#xff08;Extended E-mail Notification默认设置里Default Content…

python水仙花数

水仙花数是3位整数&#xff08;100-199&#xff09;&#xff0c;它的各位数字立方和等于该数本身。请编写程序。 源代码&#xff1a; print(100-199的水仙花数&#xff1a;) for i in range(100,200): s str(i) a int(s[0]) b int(s[1]) c int(s[2]) …

基于SpringBoot的学科竞赛管理系统的设计与实现

目录 前言 一、技术栈 二、系统功能介绍 学生功能模块的实现 管理员功能模块的实现 教师管理界面 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着国家教育体制的改革&#xff0c;全国各地举办的竞赛活动数目也是逐年增加&#xff0c;面对如此大的数目…

使用CRM系统提高潜在客户质量

客户是企业发展的重要资源&#xff0c;如果销售人员获得更优质的潜在客户并对这些潜在客户进行跟踪&#xff0c;企业将获得更高的销售额。想要做到这点&#xff0c;就使用CRM销售管理系统吧&#xff01;下面我们说说&#xff0c;CRM系统如何提高潜在客户质量&#xff1f; 能够…

车载娱乐系统之Android系统CarFramework流程

目录 一&#xff0c;背景介绍 1.1 Android Automotive与整个Android生态系统的关系 1.2 Android Automotive架构 二&#xff0c;CarService启动流程 三&#xff0c;CarService源码分析 四. Car API 使用方式 4.1 编译 Car API 4.2 使用 Car API 一&#xff0c;背景介…

基于Python开发的高德地图+58租房系统(源码+可执行程序+程序配置说明书+程序使用说明书)

一、项目简介 本项目是一套基于Python开发的高德地图58租房系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Python学习者。 包含&#xff1a;项目源码、项目文档等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xf…

一级浪涌保护器的应用解决方案

浪涌是指电力线路上出现的短暂的过电压或过电流&#xff0c;它们通常由雷击、开关操作、电力故障等原因引起&#xff0c;对电气设备和电子信息系统造成严重的损害。地凯科技浪涌保护器&#xff08;SPD&#xff09;是一种用于限制瞬态过电压和泄放电涌电流的装置&#xff0c;它至…

阿里云七代云服务器实例、倚天云服务器及通用算力型和经济型实例规格介绍

在目前阿里云的云服务器产品中&#xff0c;既有五代六代实例规格&#xff0c;也有七代和八代倚天云服务器&#xff0c;同时还有通用算力型及经济型这些刚推出不久的新品云服务器实例&#xff0c;其中第五代实例规格目前不在是主推的实例规格了&#xff0c;现在主售的实例规格是…

vue3中$refs使用调整

前言&#xff1a; vue3环境 在vue2环境中&#xff0c;可以直接通过this.$refs获取模块&#xff1b;在vue3环境中&#xff0c;通用以下两种方式获取&#xff1a; 1、通过声明ref进行获取&#xff1b; import { ref} from vue; const logoForm ref(); console.log(logoForm.va…