如何通过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.mfbz.cn/a/191755.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

上海亚商投顾:北证50指数大涨 逾百只北交所个股涨超10%

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 沪指11月24日震荡调整,深成指、创业板指盘中跌超1%。北证50指数大涨超6%,北交所个股持…

虚拟化逻辑架构: LBR 网桥基础管理

目录 一、理论 1.Linux Bridge 二、实验 1.LBR 网桥管理 三、问题 1.Linux虚拟交换机如何增删 一、理论 1.Linux Bridge Linux Bridge(网桥)是用纯软件实现的虚拟交换机,有着和物理交换机相同的功能,例如二层交换&#…

redis key

不管是:规则,还是其他规则,定义好就可以了。其实没有太多要求的。 1)冒号分割类似那种yaml在客户端显示树结构 2)其他分割类似那种properties在客户端显示列表结构

数组栈的实现

1.栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作 进行数据插入和删除操作的一端称为栈顶,另一端称为栈底 栈中的数据元素遵守后进先出LIFO,(Last In First Out)的原则 压栈&…

【赠书第8期】工程效能十日谈

文章目录 前言 1 工程效能十日谈 1.1 制定清晰的目标和计划 1.2 引入先进的技术和工具 1.3 建立有效的沟通机制 1.4 灵活应对变化 1.5 确保资源充足 1.6 进行有效的风险管理 1.7 进行持续的监控和评估 1.8 优化团队合作 1.9 注重质量管理 1.10 进行项目总结和反思 …

PyEcharts-Faker的介绍

1 PyEcharts-Faker from pyecharts.faker import Faker方法属性说明对应内容Faker.clothes[“衬衫”, “毛衣”, “领带”, “裤子”, “风衣”, “高跟鞋”, “袜子”]Faker.values()[106, 111, 145, 33, 20, 138, 141]Faker.drinks[“可乐”, “雪碧”, “橙汁”, “绿茶”,…

【管理运筹学】背诵手册(六)| 图与网络分析(基本概念、最小支撑树问题、最短路问题)

六、图与网络分析 基本概念、术语 某个边的两个端点相同,称为环;两点之间有多于一条的边,成为多重边。一个无环、无多重边的图称为简单图,无环但允许有多重边的图称为多重图。 次:以 v i v_i vi​ 为端点的边的数目…

Redis序列化操作

目录 1.protostuff 的 Maven 依赖 2.定义实体类 3.序列化工具类 ProtostuffSerializer 提供了序列化和反序列化方法 4.测试 利用 Jedis 提供的字节数组参数方法,如: public String set(String key, String value) public String set(byte[] key…

IDEA DeBug

文章目录 01_Debug简介和意义02_IDEA中的Debug步骤03_跳转到当前代码执行的行04_步过调试的使用05_步入调试的使用06_强制步入调试的使用07_步出调试的使用08_回退断点调试的使用09_运行到光标处10_计算表达式11_条件断点12_多线程调试 01_Debug简介和意义 什么是程序DeBug&am…

人力资源管理后台 === 主页模块

目录 1.获取用户资料在Vuex中共享 2.显示用户头像和用户名 3.处理头像为空的场景 4.处理token失效的问题 5.调整下拉菜单,实现退出登录 6.修改密码功能实现 6.1-修改密码-弹出层 6.2-修改密码-表单结构 6.3-修改密码-表单校验 6.4-修改密码-确定和取消 7.…

设计模式精讲:掌握单例模式的实现与优化

掌握单例模式的实现与优化 一、引言:如何学习设计模式?二、前置知识:对象的创建的销毁2.1、拷贝构造2.2、拷贝赋值构造2.3、移动构造2.4、移动赋值构造 三、单例模式的定义四、单例模式的实现与优化4.1、版本一4.2、版本二4.3、版本三4.4、版…

均匀球形分布的随机三维单位向量

生成具有均匀球形分布的随机三维单位向量[参考] import numpy as np import matplotlib.pyplot as plt def random_three_vector():"""Generates a random 3D unit vector (direction) with a uniform spherical distributionAlgo from http://stackoverflow.c…

论文阅读:C2VIR-SLAM: Centralized Collaborative Visual-Inertial-Range SLAM

前言 论文全程为C2VIR-SLAM: Centralized Collaborative Visual-Inertial-Range Simultaneous Localization and Mapping,是发表在MDPI drones(二区,IF4.8)上的一篇论文。这篇文章使用单目相机、惯性测量单元( IMU )和UWB设备作为…

Node——npm包管理器的使用

Node.js使用npm对包进行管理,其全称为Node Package Manager,开发人员可以使用它安装、更新或者卸载Node.js的模块 1、npm包管理器基础 1.1、npm概述 npm是Node.js的标准软件包管理器,其在2020年3月17日被GitHub收购,而且保证永…

1.9 字符数组

1.9 字符数组 一、字符数组概述二、练习 一、字符数组概述 所谓字符数组&#xff0c;就是char类型的数组&#xff0c;比如 char a[]&#xff0c;是C语言中最常用的数组类型&#xff0c;先看一个程序 #include <stdio.h> #define MAXLINE 1000 //最大行长度限制 int get…

软件介绍02- flameshot截图软件(linux系统可用)

1 软件介绍 在Windows和mac平台一直都使用着snipaste截图&#xff0c;非常好用&#xff0c;又能够钉图。遗憾是并没有开发linux版本&#xff0c;真不知道为什么。 好在终于找到一款截图软件&#xff0c;flameshot截图软件&#xff0c;可以平替snipaste。 下载网址&#xff1a;…

什么是好的FPGA编码风格?(3)--尽量不要使用锁存器Latch

前言 在FPGA设计中&#xff0c;几乎没人会主动使用锁存器Latch&#xff0c;但有时候不知不觉中你的设计莫名其妙地就生成了一堆Latch&#xff0c;而这些Latch可能会给你带来巨大的麻烦。 什么是锁存器Latch&#xff1f; Latch&#xff0c;锁存器&#xff0c;一种可以存储电路…

【Linux】进程间通信

进程间通信 1. 进程间通信介绍1.1 进程间通信目的1.2 进程间通信发展1.3 进程间通信分类1.4 进程间通信的本质理解 2. 管道3. 匿名管道3.1 pipe()函数3.2 站在文件描述符角度-深度理解管道3.3 站在内核角度-管道本质3.4 匿名管道使用步骤3.4 管道读写规则3.5 管道的读与写的五种…

复数的乘幂与方根

1、乘积与商 设 几何意义&#xff1a; &#xff1a;逆时针旋转一个角度&#xff0c;并伸长倍 &#xff1a;顺时针旋转一个角度&#xff0c;并伸长倍 *特别&#xff1a;不存在 :对实行了一次旋转变换&#xff0c;且长度不变&#xff0c;旋转角为 例题&#xff1a; 2、幂与…

windows下docker环境搭建与运行实战

背景 学习docker使用&#xff0c;需要环境&#xff0c;今天主要的目标是在windows环境下安装docker环境。 为什么要这么搞&#xff0c;主要是企业内部服务器&#xff0c;都是跟公网隔离的&#xff0c;没有访问公网权限&#xff0c;所以镜像什么的&#xff0c;从公网拉取完全没…