【Nginx】Nginx负载均衡

负载均衡:通过反向代理来实现

Nginx的七层代理和四层代理:

七层是最常用的反向代理方式,只能配置在nginx配置文件的http模块当中 ;配置的方法名称为:upstream模块,不能写在server中也不能写在location中,在http模块当中是独立的一个配置

七层代理:代理的是http的请求和响应

客户端------------发起http请求------------七层代理(代理服务器)------------代理服务器转发http请求到内部的一组服务器(web集群)

过程中客户端并不知道请求的是代理服务器还是内部服务器,而且通过代理服务器隐藏了内部服务器的ip

实际上,客户端访问的是代理服务器;请求通过代理服务器转发给web服务器,web服务器响应;

四层代理:

是基于tcp/ip协议层的代理转发方式;可以实现基于IP地址和端口进行负载均衡转发

四层代理无法获取http请求当中的URL信息,只能对tcp/udp数据包进行转发;也就是对流量转发

配置方法:stream;stream不能配置在http模块中,配置在全局当中,是属于一个独立的模块,不属于其他任何模块

1.四层代理和七层代理的区别(面试***)

四层代理是基于IP地址和端口号进行的,只负责转发请求,速度较快

四层代理不能进行流量控制,也没办法对内容进行过滤

七层代理是通过http请求,四层走的是tcp/udp的数据包,转发的是流量

七层代理的特点:基于http协议进行;可以对请求进行深入地解析和处理(流量控制、内容的过滤)

四层:适用于需要高效处理大量连接请求的场景: TCP 和 UDP 协议的负载均衡;

七层:适用于对请求进行精确处理和控制的场景:Web 应用程序的负载均衡

2.四层和七层哪个速度更快(面试)

四层代理相比七层更快;

四层只是流量转发,不能对请求进行解析和控制;快

四层代理是通过内核转发的流量;快

七层代理,需要对请求进行处理和解析;慢

七层的 访问控制、流量处理 是通过用户态进行的;慢

七层代理可以提供更高级的服务和用户体验

正向代理:

正向代理是面向客户端的;当客户端的IP地址被web服务器禁止访问后,(客户端)可以通过代理服务器去访问web服务器;

web服务器只会知道是代理服务器的ip访问的它,而不知道是客户端

proxy_pass    #配置代理服务器访问的地址;只能写在location模块中

应用:
    正向代理更多的用在公司内网,公司内员工的主机都通过一个代理服务器访问互联网,

    而互联网上被访问的服务器,只知道代理服务器的ip,不知道公司内员工的ip,主要作用:加速,翻墙

反向代理:***

客户端直接访问代理服务器

两者都是通过客户端访问代理服务器,代理服务器转发请求或者流量到后端服务器,后端的web服务器会有多台,用户并不知道最终访问的是哪一台服务器

负载均衡具有:高可用、可扩展、提高可维护性

工作中你是怎么做反向代理的(面试*)

反向代理就是负载均衡,根据场景的并发量来确定负载均衡的算法

并发量小:可以使用默认轮询,配合最小连接数使用即可

高并发:ip_hash或者url_hash来实现,访问一次之后,就不会再切换后端web服务器,下一次访问的就是缓存,速度快、后台web服务器的请求压力也会变小

upstream 基于http实现负载均衡;反向代理;

特点:
http请求的负载均衡方式
没有缓存
默认为轮询算法
1.轮询算法(rr)

会将请求轮流分配给后端服务器,轮询算法适用于 web服务器 处理能力相近的情况;默认算法,可以不加

vim /usr/local/nginx/conf/nginx.conf

    #gzip on;
    upstream ky30 {
        server 192.168.220.20;
        server 192.168.220.30;
    #指定通过代理服务器10,会把http的请求转发到20或者30上
    }



    location / {
        root    html;
        index   index.html index.htm;
        proxy_pass http://ky30;
    }

2.加权轮询算法

建立在轮询算法的基础之上,通过给不同的web服务器分配权重,让处理能力更强的服务器可以分配到更多的请求;

虽然配置了权重值,但是轮询的结果未必准确

vim /usr/local/nginx/conf/nginx.conf

    #keepalive_timeout 0;
    keepalive_timeout 65;

    #gzip on;
    upstream ky30 {
        server 192.168.220.20 weight=2;
        server 192.168.220.30 weight=3;
    #通过代理服务器10,转发http请求时,网权重高的服务器上转发的次数会更多,权重少的转发就少
    }
3.ip_hash算法

会根据IP地址计算出一个hash值,使用ip_hash算法,同一个客户端的请求会被分配到同一个后端服务器,可以保证会话的稳定性;

如果后端服务器的数量发生变化,hash值会重新计算,请求的服务器也会发生变化

4.最少连接数算法least_conn

可以轮询,会将请求发送到当前连接数最少的web服务器

主要适用于后端服务器处理 任务耗时不同 的情况,避免了所有请求集中在处理能力更强的后端服务器上,可以和加权轮询配合使用

5.url_hash算法

根据uri 地址计算hash值;使用url_hash,相同请求的uri会分配到同一个后端web服务器

vim /usr/local/nginx/conf/nginx.conf

    #gzip on;
    upstream ky30 {
        hash $request_uri consistent;
        server 192.168.220.20 weught=2;
        server 192.168.220.30 weight=3;

    }
负载均衡的核心就是各类算法

小场景:并发量很小,默认算法就可以满足适应条件

中等:后端web服务器的处理能力有差异:加权轮询,和最小连接数配合使用

大型并发:使用ip_hash或者url_hash;第一次请求之后会有本地缓存,可以提高后续访问速度,因为hash算法的原因,请求的后台web服务器不会发生变化;减轻了后台服务器的请求压力

ip_hash;后端服务器数量发生变化,请求的服务器也会发生变化

url_hash;请求的地址发生变化,请求的服务器也可能会发生变化

stream

默认不带轮询;可以使用的轮询方式

算法:除不支持url_hash外,其他与upstream相同

实验

1.七层:

http IP地址

http 域名

2.四层:

stream

相关推荐
看星猩的柴狗30 分钟前
密码学原理技术-第二章-Stream Ciphers
服务器·网络·密码学
苹果醋31 小时前
Vue3响应式数据: 深入分析Ref与Reactive
java·运维·spring boot·mysql·nginx
存储服务专家StorageExpert2 小时前
墙裂推荐:console, CLI命令行和日志使用字体-Cascadia
运维·服务器·netapp存储·存储维护·emc存储
菜鸟康3 小时前
Linux系统编程——理解系统内核中的信号捕获
linux·运维·服务器
张明奇-琦玉3 小时前
Boost之log日志使用
linux·服务器·算法
MaoSource4 小时前
Debian 12.0安装nginx
服务器·nginx·debian
Channing Lewis4 小时前
salesforce Portal User Visibility and Site User Visibility
运维·服务器·salesforce
zr5268554475 小时前
IEC103 转 ModbusTCP 网关(三格电子)
运维·服务器·网络
是程序喵呀6 小时前
Nginx 进阶详解
运维·nginx
阿7_QuQ6 小时前
mac远程控制另一台mac怎么操作?
运维·服务器·macos