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

NGINX--HTTPTCP负载均衡

一、HTTP负载均衡

1、基本介绍

在多应用实例中,通常可以用nginx来做负载均衡器来分发流量,以达到提高应用吞吐量、降低时延、调优性能、提供容错性等。

2、http负载均衡最简单的配置如下

http {
    upstream myapp1 {
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }
    upstream myapp2 {
        server srva1.example.com;
        server srva2.example.com;
        server srva3.example.com;
    }

    server {
        listen 80;
        location / {
            proxy_pass http://myapp1;
        }
    }
}

3、nginx中支持的负载均衡的方法

1、 round-robin 轮询,默认的负载均衡的方法,轮询分发给不同的服务,如果不设置权重的话,会均发给下游服务
2、 least-connected 下一个请求会分发给有最少活跃连接的服务
3、 ip-hash 一个hash函数, 会计算下一个请求会分配给到哪一个服务器
使用方法如下:

upstream myapp1 {
        ip-hash
        server ip1;
        server ip2;
        server ip3;
}

upstream myapp2 {
        least_conn;
        server ip1;
        server ip2;
        server ip3;
}
//轮询实现
upstream myapp3 {
		
		server ip1;
		server ip2;
		server ip3;
}

4、权重的设置(weight)

在以round-robin(轮询)方法实现的负载均衡中,如果不设置weight(权重),nginx会将请求均发给下游服务。nginx也提供了一种权重设置方法,如下:

upstream myapp3 {
		server ip1 weight=3 ;
		server ip2;
		server ip3;
}

如上配置所示,当有5个请求进来的时候,nginx会将3个请求发给ip1,一个请求发给ip2,另一个请求发给ip3。即60%的流量请求发给ip1,20%的流量请求发给ip2,20%的流量请求发给ip3

五、健康检查(Health checks)及语法介绍

http {
    upstream dynamic {
    zone upstream_dynamic 64k;

    server backend1.example.com      weight=5;
    server backend2.example.com:8080 fail_timeout=5s slow_start=30s;
    server 192.0.2.1                 max_fails=3;
    server backend3.example.com      resolve;
    server backend4.example.com      service=http resolve;

    server backup1.example.com:8080  backup;
    server backup2.example.com:8080  backup;
    }
    server {
        location / {
            proxy_pass http://dynamic;
            health_check;
        }
    }
}

Syntax: server address [parameters];
Default: —
Context: upstream

二、TCP负载均衡

1、简介

该ngx_stream_core_module模块是从1.9.0版本才被引入进来,该模块并不被默认安装,所以如果要使用该模块的功能,在编译的时候需要加上 --with-stream 配置参数

configure   ...  --with-stream  ...

2、TCP负载均衡最简单的配置

worker_processes auto;

error_log /var/log/nginx/error.log info;

events {
    worker_connections  1024;
}

stream {
    upstream backend {
        hash $remote_addr consistent;

        server backend1.example.com:12345 weight=5;
        server 127.0.0.1:12345            max_fails=3 fail_timeout=30s;
        server unix:/tmp/backend3;
    }

    upstream dns {
       server 192.168.0.1:53535;
       server dns.example.com:53;
    }

    server {
        listen 12345;
        proxy_connect_timeout 1s;
        proxy_timeout 3s;
        proxy_pass backend;
    }

    server {
        listen 127.0.0.1:53 udp reuseport;
        proxy_timeout 20s;
        proxy_pass dns;
    }

    server {
        listen [::1]:12345;
        proxy_pass unix:/tmp/stream.socket;
    }
}

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

相关文章:

  • 无需昂贵GPU:本地部署开源AI项目LocalAI你在消费级硬件上运行大模型
  • 基于python Numpy的24位音频数据读取实例解析
  • Playwright vs Selenium:全面对比分析
  • MySQL 深度分页:挑战与优化指南
  • 深度学习助力网络故障定位:提升运维效率的新利器
  • 前端学习网络
  • 里氏替换原则(Liskov Substitution Principle,LSP):面向对象设计的基本原则
  • Python实现windows自动关机
  • YARN 架构组件及原理
  • 基于 Python 和 OpenCV 的人脸识别上课考勤管理系统
  • (leetcode算法题)239. 滑动窗口最大值
  • MoMA: 基于多头注意力的动量对比学习知识蒸馏,用于组织病理学图像分析|文献速递-视觉大模型医疗图像应用
  • 安卓studio生成apk步骤
  • 有限元分析学习——Anasys Workbanch第一阶段笔记(9)带孔矩形板与L型支架案例的对称平面处理方案
  • 如何学习Vue设计模式
  • 应急响应之入侵排查(下)
  • VSCode 更好用的设置
  • 2025-1-9 QT 使用 QXlsx库 读取 .xlsx 文件 —— 导入 QXlsx库以及读取 .xlsx 的源码 实践出真知,你我共勉
  • el-date-picker 禁用一个月前、一个月后(当天之后)的时间 datetimerange
  • ssh链接飞牛NAS的时候出现WARNING提示无法正常登录!按照这个可以解决