• nginx负载均衡


    Nginx :正向代理 反向代理 负载均衡是和反向代理使用

    1、Nginx有两种代理方式

    七层代理(http协议):代理的是http的请求和响应 客户端请求代理服务器 由代理服务器转发客户端的httpd请求 转发到内部的服务器(可以是单台也可以是一组)

    后端的webserver再把响应送达代理服务器 最后再到客户端(转发http协议)

    正向代理:客户端也是访问代理服务器 代理服务器转发请求 客户端只知道代理服务器的地址 后端的webserver的IP地址 客户端不知道

    反向代理:客户端访问的是代理服务器 代理服务器转发http请求 但是客户端不知道访问的是哪台机器

    四层代理(tcp/udp流量转发):基于tcp/ip协议层的转发代理方式 基于ip和端口号实现负载均衡或者正向代理 四层代理无法获取http请求中的URL信息 只能对TCP/UDP的数据包进行转发

    面试题:四层代理和七层代理直接的区别:

    七层代理走的是用户态 需要对http请求进行处理和解析 解析过程中 可以根据请求头和请求体的内容进行流量控制 内容过滤转发速度比较慢 但是提供的功能更高级 用户的体验更好

    四层代理基于IP地址和端口号 只负责将IP和端口转发到后端服务器 不对请求做任何处理 只是负责转发 而且四层转发走的是内核 四层转发速度较快 四层代理无法提供更高级的功能 只是转发

    2、选择场景 :

    七层代理 :需要对http请求进行控制和处理 只能选择七层代理(常见的代理方式)

    四层代理 :只需要转发tcp/udp数据包 可以选择四层 也可以选择七层

    七层可以对IP和端口进行转发 也可以对域名进行代理

    四层只能是IP和端口

    负载均衡算法:有些是无法在四层代理使用

    3、模块:

    七层代理只能写在http模块的全局配置当中 upstream 用于处理http请求 支持反向代理 负载均衡 缓存功能 在upstream模块中可以配置多个服务器

    四层代理 stream 只能写在全局模块当中的单独配置 stream代理无谓协议 只管流量

    正向代理 类似于VPN 科学上网 加速器

    企业架构都是反向代理 客户端通过代理服务器访问 但是后端有多台

    七层代理写法 http全局配置

    Upstream 自定义名 {

                  Server 192.168.1.3

                  Server 192.168.1.4

    }

    Location{

    Proxy_pass http://自定义名

    }

    负载均衡的算法 算法都是配置在代理里面的:

    1. rr(round robin)负载均衡最简单的算法 轮询 将请求轮流分配到后端服务器 是默认算法 可以不加 每发起一次都是新的请求 服务器上没有缓存 适用场景:服务器处理能力接近 而且对访问量比较小的网站适用
    2. weight 加权轮询 建立在默认轮询算法的基础之上 为后端服务器分配不同的权重 处理能力强的服务器分配的权重要高一些 轮询次数基本上按照权重分配的 服务器上也没有缓存 适用于中大型网站可以使用 权重高的服务器会被频繁的请求响应 权重低的可能闲置 会和负载均衡算法一起使用

    1. 最少连接数算法: 会把请求发送到连接数量较少的服务器上 可以单独使用 但是一般都是结合加权轮询一块使用 避免所以请求都发送到处理能力强的服务器 提高集群的稳定性 中大型网站日常使用可以满足

    1. ip_hash:iphash会根据客户端IP地址解析出一个hash值 然后将请求发送到对应的后端服务器 下一次用户再访问时 同一客户端的请求将会分配到之前访问的服务器上 第一次访问之后 后续访问缓存 如果后端服务器数量发生变化 可能会进行重新分配 ip_hash适用于高并发 请求不会跳转 请求的是缓存

    1. url_hash 根据请求url计算hash值 然后将请求发送到相应的后端服务器 相同的url地址请求会被分配到同一个服务器

    url_hash和ip_hash结合一起使用 适用高并发场景 访问之后第二次都是访问缓存 可以降低服务器压力

    1. 基于域名的反向代理

    Upstream ky32 {

    Server www.kgc.com

    Server www.benet.com

    }

    Location {

    Proxy_pass http://ky32

    Proxy_set_header HOST $host

    Proxy_set_header X-Real-IP $remote_addr

    }

    第一台主机

    第二台服务器

    第三台服务器

    四层反向代理 配置在全局模块中 可以使用加权轮询 最小连接数算法也可以实现负载均衡

    但是ip_hash url_hash不可以再stream中使用 四层不能对请求处理 只是转发数据包

    http七层代理可以处理请求地址和请求的url

    总结:

    四层转发和七层转发

    四层:基于tcp/udp协议的ip+端口 数据包转发 对请求没有任何操作和处理

    七层:基于http协议 对请求的内容进行处理 转发到后端服务器

    速度:四层速度快 内核态 不做任何处理 转发速度快

    七层走的是用户态 需要对内容进行处理 转发速度相对较慢

    正向代理和反向代理:

    正向代理:都是通过代理服务器访问 明确指向后端服务器 一般都是一对一

    反向代理:都是通过代理服务器访问 一个代理服务器会指定多台后端服务器供代理服务器进行转发请求 只有一对多才涉及负载均衡的算法问题

    1. 轮询 默认算法 可以不加
    2. 加权轮询 给后端服务器设置不同权重 通过权重分发客户端请求 权重高的轮询次数多 不绝对 weight=数字
    3. 最小连接数 会把请求转发到当前连接数较小的服务器 避免请求集中到高性能或高权重的服务器 可以和加权轮询一起使用 适用大部分场景
    4. Ip_hash 根据客户端请求的ip地址生成一个hash值 然后转发到后端服务器 下一次再访问 还是之前的服务器 而且还有缓存 需要把请求客户端地址 转发到固定的服务器 可以使用这个方法 高并发可以满足 如果后端服务器发生变化 请求的后端服务器也会发生变化(后端服务器数量变少了或增加 未必会发生变化)
    5. url_hash 根据请求的url地址生成hash值 然后转发到后端服务器 但是下一次访问如果请求的url不变 还是上一次访问的服务器 而且也有缓存 url地址发生变化或后端服务器数量发生变化 可能会变更后端服务器的地址

    配置方式:

    http七层:正向 反向

    正向:location{

    Proxy_pass http://192.168.1.3;

    }

    反向:http的全局配置中定义upstream模块

    负载均衡的算法配置中upstream模块中

    upstream Ky32{

    least_conn;

    ip_hash; hash

    $request_url consisten;

    server 192.168.1.4 weight=2;

    server 192.168.1.5 weight=3;

    #默认轮询  加权轮询

    }

    Sever块的location中 制定代理服务器的方法

    Location{

    Proxy_pass http://ky32;

    }

    四层:只能卸载全局配置中

    Stream{

    Upstream test{

    Server 192.168.1.3:80;

    Server 192.168.1.4:80;

    }

    Server {

    Listen 80;

    Proxy_pass http://test;

    }

    }

    正向代理 反向代理 默认轮询 加权轮询 最小连接数 ip_hash hash $request_uri consistent 基于域名 四层反向代理配合算法

  • 相关阅读:
    MC78L05ACDR2G线性稳压器芯片中文资料规格书PDF数据手册引脚图参数图片价格
    Java线程池简单使用及说明
    第十四章《多线程》第9节:ThreadLocal类
    通过关键词合并2张excel表格——Python代码实现
    Linux eBPF介绍(一)
    Syncovery for Mac v10.14.3激活版:文件备份和同步工具
    Java输入/输出之RandomAccessFile的功能和用法
    Frp实现外网访问内网服务
    【干货】Java函数式编程公式大全,收藏学习!
    java第七讲:类中的关键字
  • 原文地址:https://blog.csdn.net/dever233/article/details/133858255