【Nginx】Nginx负载均衡
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
负载均衡通过反向代理来实现
Nginx的七层代理和四层代理
七层是最常用的反向代理方式只能配置在nginx配置文件的http模块当中 配置的方法名称为upstream模块不能写在server中也不能写在location中在http模块当中是独立的一个配置
七层代理代理的是http的请求和响应
客户端————发起http请求————七层代理代理服务器————代理服务器转发http请求到内部的一组服务器web集群
过程中客户端并不知道请求的是代理服务器还是内部服务器而且通过代理服务器隐藏了内部服务器的ip
实际上客户端访问的是代理服务器请求通过代理服务器转发给web服务器web服务器响应
四层代理
是基于tcp/ip协议层的代理转发方式可以实现基于IP地址和端口进行负载均衡转发
四层代理无法获取http请求当中的URL信息只能对tcp/udp数据包进行转发也就是对流量转发
配置方法streamstream不能配置在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