当前位置: 首页 > article >正文

使用Nginx进行负载均衡

什么是负载均衡

Nginx是一个高性能的开源反向代理服务器,也可以用作负载均衡器。通过Nginx的负载均衡功能,可以将流量分发到多台后端服务器上,实现负载均衡,提高系统的性能、可用性和稳定性。

如下图所示:
在这里插入图片描述

Nginx负载均衡策略

Nginx内置负载均衡主要分为以下种类

轮询

轮询简单理解就是将请求在机器之间进行平均分配,在轮询这种方式中,也有分为两类轮询策略
1、普通轮询
可以理解为各个服务器的权重占比都为1,请求会轮流进入这些服务器
2、权重轮询
在轮询基础上分配服务器的权重占比。比如服务器1配置2,服务器2配置1,那么最终请求分配到两台机器的数量会趋近于服务器1:服务器2=2:1
具体配置方式如下



http {
	# 普通轮询配置
    # 定义转发分配规则
    upstream myapp1 {
        server srv1.com; # 要转发到的服务器,如ip、ip:端口号、域名、域名:端口号
        server srv2.com:8088;
        server 192.168.0.100:8088;
    }
	# 权重轮询配置
    # 定义转发分配规则
	upstream myapp1 {
		server srv1.com weight=1; # 该台服务器接受1/6的请求量
		server srv2.com:8088 weight=2; # 该台服务器接受2/6的请求量
		server 192.168.0.100:8088 weight=3; # 该台服务器接受3/6的请求量;
}


    server {
        listen 80; # nginx监听的端口

        location / {
        	# 使用myapp1分配规则,即刚自定义添加的upstream节点
        	# 将所有请求转发到myapp1服务器组中配置的某一台服务器上
            proxy_pass http://myapp1; 
        }
    }
}

iphash
对客户的请求的IP进行hash操作,根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的
这个方法确保了相同的客户端的请求一直发送到相同的服务器,这样每个访客都固定访问一个后端服务器。如用户需要分片上传文件到服务器下,然后再由服务器将分片合并,这时如果用户的请求到达了不同的服务器,那么分片将存储于不同的服务器目录中,导致无法将分片合并,该场景则需要使用ip hash策略。
需要注意的是,ip_hash不能与backup同时使用,另外当有服务器需要剔除,必须手动down掉,此模式适合有状态服务,比如session。
具体配置方式如下:

# 定义转发分配规则
upstream myapp1 {
	ip_hash; # #保证每个请求固定访问一个后端服务器
	server srv1.com;
	server srv2.com:8088;
	server 192.168.0.100:8088;
}

最少连接
轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果,适合请求处理时间长短不一造成服务器过载的情况。
具体配置方式如下:

# 定义转发分配规则
upstream myapp1 {
	least_conn; # 把请求分派给连接数最少的服务器
	server srv1.com;
	server srv2.com:8088;
	server 192.168.0.100:8088;
}

Nginx安装

具体可以看我之前的一篇文档:Nginx安装以及卸载教程


http://www.kler.cn/a/271404.html

相关文章:

  • DiffuEraser: 一种基于扩散模型的视频修复技术
  • 6.二分算法
  • 苍穹外卖——数据统计
  • 观察者模式和订阅发布模式的关系
  • AJAX笔记入门篇
  • 剑指offer 数组 持续更新中...
  • 【好玩的经典游戏】Docker环境下部署经典贪吃蛇小游戏
  • CommandInvokationFailure: Failed to update Android SDK package list. 报错的解决方法
  • mac打开exe文件的三大方法 mac怎么运行exe文件 mac打开exe游戏 macbookpro打开exe
  • ArrayList和LinkedList区别
  • Parade Series - Web Streamer Low Latency
  • 数字图像处理 使用C#进行图像处理九 实现傅里叶变换
  • Unity WebGL ios 跳转URL
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Web)下篇
  • macOS系统中通过brew安装MongoDB
  • 服务器机器学习环境搭建(包括AanConda的安装和Pytorch的安装)
  • [数据集][目标检测]零售柜零食检测数据集VOC+YOLO格式5422张113类
  • xcode15,个推推送SDK闪退问题处理办法
  • idea找不到或无法加载主类
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • JUnit 面试题及答案整理,最新面试题
  • ClickHouse:一款高效且强大的列式数据库管理系统
  • 用 Visual Studio 调试器中查看内存中图像
  • python 爬取人民新闻
  • Godot 学习笔记(1):环境配置
  • 面相对象基础