1、Nginx负载均衡介绍
反向代理和负载均衡概念概述
严格来说,Nginx仅用作反向代理。这个反向代理功能的作用就是负载均衡集群,所以本文将其称为Nginx负载均衡。那么反向代理和负载均衡有什么区别呢?
典型的负载均衡软件,比如著名的LVS,实际上只是起到转发和下发请求数据包的作用(也可能重写数据包)。 DR模式的一个明显特点是,从负载均衡器下的节点服务器来看,接收到的请求仍然来自于访问负载均衡器的客户端的实际用户。反向代理则不同。反向代理收到访问用户的请求后,会代表用户重新向代理下的节点服务器发起请求,最终将数据返回给客户端用户。从节点服务器的角度来看,被访问的节点服务器客户端用户是反向代理服务器,而不是实际的网站访问用户。也就是说,在LVS等负载均衡转发用户请求的数据包的同时,Nginx反向代理接收到用户的请求,并代表用户将请求重新启动到代理下的节点服务器。用户。
2、Nginx负载均衡组件模块
实现Nginx 负载均衡有两个主要组件:
ngx_http_upstream_模块
负载均衡模块可以实现网站负载均衡功能和节点健康检查。
ngx_http_proxy_模块
代理模块。用于将请求转发到服务器节点或上游服务器池。
2.1、upstream模块
(1)上游模块介绍
upload模块允许Nginx定义一个或多个节点服务器组,并通过proxy_pass代理方法将网站请求定向到相应upstream组的预定义名称。
代理路径http://服务器池
其中,server_pools为上游节点的服务器组名称。
(2) 对于上游配置
示例1:基本上游配置案例:
上游服务器池{
#upstream 是必需的关键字,接下来的server_pools 是上游集群组的名称。该名称是可自定义的,将在拨打电话时使用。
服务器192.168.1.251:80权重=5;
服务器192.168.1.252:80权重=10;
服务器192.168.1.253:80权重=15;
# server关键字是固定的,后面可以跟域名或者IP。如果不指定端口,则默认为80 端口。重量代表重量。值越高,分配的请求就越多。
}
示例2:更完整的上游配置案例:
上游博客__pools {
server 192.168.0.223; #带有该标签的行对应下游行
server 192.168.0.224:80weight=1 max_fails=1 failed_timeout=10s; #这一行与上一行有相同的标签。这行多余的部分是默认设置,所以不写也没有问题。
服务器192.168.0.225:80权重=1 max_fails=2失败超时=20秒备份。
# 你可以在服务器端添加很多参数。参数的具体作用见下文。
}
(3) 上行模块参数
服务器
负载后面的RS配置可以是IP或域名。
重量
请求服务器权重。默认值为1。该值越高,接受请求的百分比就越高。
最大失败次数
nginx 尝试连接到后端主机但失败的次数。
该值必须与三个参数结合使用:proxy_net_upstream、fastcgi_next_upstream 和memcached_next_upstream。
当nginx从后端服务器接收到这三个参数定义的状态码时,它会将请求转发到健康的后端服务器(404、502、503等)。
失败超时
max_fails 定义的失败次数后检查之间的时间间隔。默认值为10 秒。
备份
在热备用配置中,如果所有主服务器都出现故障,则该服务器将被标记为备份服务器,并且请求将定向到它。
在下面
表示该服务器永远不可用,可以与ip_hash 一起使用
例子:
上游web_pools {
服务器linux.example.com 权重=5;
服务器127.0.0.1:8080 max_fail=5fail_timeout=10s;
# 如果连续检查5次失败,则间隔10秒再次检查。
服务器linux.example.com:8080 备份。
# 指定备份服务器。功能:如果以上所有服务器均不可达,则将请求转发到该服务器。
}
2.2、http_proxy_module模块
(1) proxy_pass指令概述
proxy_pass 指令属于ngx_http_proxy_module 模块,允许您将请求转发到另一台服务器。在实际的反向代理操作中,会匹配通过location函数指定的URI,并将与匹配的URI匹配的传入请求扔到通过proxy_pass定义的上游节点池。
location内容,参考:一篇彻底理解nginx位置指令的文章
(2) proxy_pass使用示例
位置/网络/{
代理路径http://127.0.0.1/abc/;
}
将与URI web 匹配的请求抛出到http://127.0.0.1/abc/。
(3)http代理模块参数
代理设置标头
设置http请求头项并传递给后端服务器节点。例如,您可以启用代理后端中的服务器节点来检索访问客户端的用户的真实IP地址。
客户端主体缓冲区大小
用于指定客户端请求的主题缓冲区大小。
代理连接超时
反向代理与后端节点服务器连接的超时时间,即发起握手之前等待响应的超时时间。
代理发送超时
代理后端服务器的数据返回时间。这意味着后端服务器必须在规定的时间内完成所有的数据传输。如果没有,nginx 将断开连接。
代理读取超时
设置nginx从代理后端服务器检索信息的时间。即连接建立成功后,nginx等待后端服务器的响应时间。这是nginx排队的时间。后台正在等待处理。
代理缓冲区大小
设置缓冲区大小。默认情况下,缓冲区大小与proxy_buffers 指令中设置的大小相同。
代理缓冲区
设置缓冲区的数量和大小。 nginx从代理后端服务器检索到的响应信息放置在缓冲区中。
proxy_busy_buffers_size
用于设置系统非常繁忙时可以使用的proxy_buffer的大小。官方推荐的大小是proxy_bufer*2。
proxy_temp_file_write_size
指定临时代理缓存文件的大小
3、Nginx负载均衡调度算法
(1)rr轮询(默认)
默认调度算法根据客户端请求将服务器一次分配到不同的后端服务器,并自动从节点服务器池中删除宕机的服务器。
上游服务器池{
服务器192.168.1.251;
服务器192.168.1.252;
}
注意:对于性能参差不齐的服务器集群,该算法容易出现资源分配不合理等问题。
(2)wrr加权轮询(weighting)
基于rr轮询算法,对用户访问按比例添加权重。权重值越高,转发的请求就越多。
上游服务器池{
服务器192.168.1.251权重=5;
服务器192.168.1.252权重=10;
}
加权轮询用于服务器性能不同的集群,使资源分配更加合理。
(3) ip_hash(会话持久化)
每个请求根据访问IP哈希结果进行分配,每个访问者对后端服务器有固定的访问权限,解决了非会话共享的问题。
上游服务器池{
ip_哈希;
服务器192.168.1.251;
服务器192.168.1.252;
}
会话不共享。这意味着,假设用户已经登录,此时发送的请求将被分配到服务器A,但如果服务器A突然崩溃,用户的请求将被转发到服务器B。但由于会话不是共享的,B无法直接读取用户的登录信息来进行其他操作。
(4)公平性(动态调度算法)
根据后端节点服务器的响应时间分配请求,响应时间较短的优先。
上游服务器池{
服务器192.168.1.251;
服务器192.168.1.252;
公平的;
}
虽然这是一种比较智能的调度算法,但是Nginx本身并不支持公平的调度算法。如果需要使用公平调度,则需要下载Nginx相关模块upstream_fair。
为了成为运维面试路上的好助手,我们整理了上百道【运维技术栈面试题】,让您能够坦然面对面试,拿到高薪工作offer!
这些面试题涵盖了从Shell、MySQL到K8s等云原生技术栈,适合运维行业新人以及运维行业新人的面试需求。升职或换工作以增加薪水。
本次访谈集内容为
174 运维工程师面试题128 k8s 面试题108 shell 脚本面试题200 Linux 面试题51 Docker 面试题35 Jenkis 面试题78 MongoDB 面试题17 ansible 面试题60 dubbo 面试题53 Kafka 面试题18 mysql 面试题40 nginx 面试题77 Redis 面试题Zookeeper 题28
总共1000多道面试题,内容全面且有价值。
174 道运营工程师面试问题
1.什么是运维?
2、运维人员在工作场所经常需要与操作人员进行交互。运营人员做什么工作?
3. 给定300台服务器,如何管理它们?
4. 简要说明RAID0和Raid1raid5这两种工作模式的工作原理和特点。
5、LVS、Nginx、HAproxy有什么区别,工作中如何选择?
6. Squid、Varinsh、Nginx 有什么区别,你在工作中如何选择?
7.Tomcat和Resin有什么区别?
8.什么是中间件?
9. Tomcat 的三个端口8005、8009、8080 是什么意思?
10.什么是CDN?
11.什么是网站灰度发布?
12、请简单说明一下DNS域名解析的过程。
13.什么是RabbitMQ?
14.Keepalived如何工作?
15.描述LVS工作流程的三种模式。
16、mysql的innodb如何识别锁定问题以及mysql如何减少主从复制延迟?
4. 简要说明RAID0和Raid1raid5这两种工作模式的工作原理和特点。
5、LVS、Nginx、HAproxy有什么区别,工作中如何选择?
6. Squid、Varinsh、Nginx 有什么区别,你在工作中如何选择?
7.Tomcat和Resin有什么区别?
8.什么是中间件?
9. Tomcat 的三个端口8005、8009、8080 是什么意思?
10.什么是CDN?
11.什么是网站灰度发布?
12、请简单说明一下DNS域名解析的过程。
13.什么是RabbitMQ?
14.Keepalived如何工作?
15.描述LVS工作流程的三种模式。
16、mysql的innodb如何识别锁定问题以及mysql如何减少主从复制延迟?
17.如何重置mysql root密码?
#Nginx负载均衡原理及配置example_proxy_connect_timeout 备份相关内容以上有关源网络的信息仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92154.html