如何通过nginx进行服务的负载均衡

news/2024/7/10 2:30:06 标签: nginx, 负载均衡, 运维
  1. 简单介绍
    1. 随着互联网的发展,业务流量越来越大并且业务逻辑也越来越复杂,单台服务器的性能及单点故障问题就凸显出来了,因此需要多台服务器组成应用集群,进行性能的水平扩展以及避免单点故障的出现。应用集群是将同一应用部署到多台机器上,组成应用集群,接收负载均衡器分发的请求,进行业务处理并返回响应数据。负载均衡器可以将用户请求根据对应的负载均衡算法分发到应用集群中的一台服务器进行处理。
  2. 我们可以通过nginx作为负载均衡器,实现负载均衡的功能
    1. 首先我们需要准备Linux系统,并启动nginx服务,并在服务器上启动两个java web的spring boot项目,其中一个web服务的端口是8080,另一个web服务的端口是8081,并将服务正常启动
    2. nginx中配置负载均衡
      1. 打开nginx的配置文件nginx.conf并增加如下配置信息
        1.     # upstream指令可以定义一组服务器
              upstream study-balance-server {	
                  server 192.168.xxx.xxx:8080;
                  server 192.168.xxx.xxx:8081;
              }
          
              server {
          
                  location /study-balance/ {
                      # 反向代理配置,将请求转发到指定的服务
                      proxy_pass http://study-balance-server;
                  }
          
              }
      2. 重新加载nginx配置文件
        1. sudo ./nginx -t
          
          
          sudo ./nginx -s reload
      3. 浏览器测试访问
        1. 访问查看web项目的日志信息或者其他标记可以区分当前项目访问的是那台端口的服务:http://服务器ip地址/study-balance/
        2. 本示例中通过访问时日志的打印时间顺序可以知道负载均衡已经正常启动
    3. 负载均衡的策略
      1. nginx默认策略是轮询,详细信息如下
      2. 名称说明特点
        轮询默认方式
        weight权重方式根据权重分发请求,权重大的分配到请求的概率大
        ip_hash依据ip分配方式根据客户端请求的IP地址计算hash值, 根据hash值来分发请求, 同一个IP发起的请求, 会发转发到同一个服务器上
        least_conn依据最少连接方式哪个服务器当前处理的连接少, 请求优先转发到这台服务器
        url_hash依据url分配方式根据客户端请求url的hash值,来分发请求, 同一个url请求, 会发转发到同一个服务器上
        fair依据响应时间方式优先把请求分发给处理请求时间短的服务器
      3. 示例权重配置
        1. # upstream指令可以定义一组服务器
          upstream study-balance-server {	
              server 192.168.xxx.xxx:8080 weight=10;
              server 192.168.xxx.xxx:8081 weight=5;
          }
        2. 配置的weight权重是相对的,在上述的配置中,效果就是在大数据量的请求下,最终8080接收的请求数是8081的两倍
      4. 示例依据ip分配方式
        1.     # upstream指令可以定义一组服务器
              upstream study-balance-server {	
                  ip_hash;
                  server 192.168.xxx.xxx:8080;
                  server 192.168.xxx.xxx:8081;
              }
        2. 指定负载均衡器按照基于客户端IP的分配方式,这个方法确保了相同的客户端的请求一直发送到相同的服务器,以保证session会话。这样每个访客都固定访问一个后端服务器,可以解决session不能跨服务器的问题

http://www.niftyadmin.cn/n/5216232.html

相关文章

qt 容器QStringList的常见使用

容器 QStringList是一个字符串链表,里面存放的是QString类型的元素.下面是QStringList链表的一些常见用法. 1.在QStringList中添加元素. QStringList weekList;weekList<<"星期一"<<"星期二"<<"星期三"; 2.在链表尾部添加元…

大数据学习(24)-spark on hive和hive on spark的区别

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主哦&#x1f91…

第六题-红和蓝【第六届传智杯程序设计挑战赛解题分析详解复盘】(JavaPythonC++实现)

🚀 欢迎来到 ACM 算法题库专栏 🚀 在ACM算法题库专栏,热情推崇算法之美,精心整理了各类比赛题目的详细解法,包括但不限于ICPC、CCPC、蓝桥杯、LeetCode周赛、传智杯等等。无论您是刚刚踏入算法领域,还是经验丰富的竞赛选手,这里都是提升技能和知识的理想之地。 ✨ 经典…

Vue+SpringBoot项目前端如何获取本地磁盘路径的照片

一、问题 今日项目中遇到的问题&#xff1a; 在页面想要展示本地磁盘路径的照片&#xff0c;但是一直无法显示出来 原因&#xff1a;可能是vue无法直接读取本地磁盘的照片&#xff08;本人盲猜&#xff09; 1.解决思路 1.后端进行静态资源映射 2.前端调用 2.实现步骤一 在后端的…

RabbitMQ之延迟消息实战

RabbitMQ之延迟消息实战 使用死信交换机实现延迟消息 使用死信交换机的过期时间以及没有消费者进行消费&#xff0c;时间到了就会到死信队列中&#xff0c;由此可以实现延迟消息使用延迟消息插件 前提&#xff1a;需要mq配置插件 延时信息案例实战 把一个30分钟的延迟消息可以…

【Java】实现一个自己的定时器

上文讲了怎样使用Java自带的定时器【Java】定时器的简单应用 这篇博客就来讲如何来编写一个自己实现的定时器 1、代码框架 由定时器的使用方法得知&#xff0c;我们在使用定时器的时候会添加一个任务timerTask类&#xff0c;而timer类则是我们行使任务的类&#xff0c;因此可…

MyBatis-Plus简介和入门操作

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

皮尔逊相关性分析的matlab实现,简介和实例

皮尔逊相关性分析&#xff08;Pearson correlation analysis&#xff09;是一种常用的统计方法&#xff0c;用于衡量两个变量之间的线性关系强度和方向。它通过计算两个变量之间的协方差和标准差来衡量它们之间的相关性。皮尔逊相关系数的取值范围为 -1 到 1&#xff0c;其中 -…