Nginx 负载均衡
1、 使用负载均衡的原因
当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。
2、 Nginx 介绍
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师所开发,其特点是占有内存少,并发能力强,nginx的并发能力确实在同类型的网页服务器中表现非常好。官方测试nginx能够支撑5万并发链接,并且CPU、内存等资源消耗却非常低,运行非常稳定。
当收到大量请求的时候nginx会协调服务器处理请求,合理的分配服务器资源,使得系统更加稳定高效。
很多大公司都在用。Nginx 官网的技术合作伙伴
云服务器合作伙伴
3、 负载均衡的调度算法
1. 轮询方式(round-robin)
调度器通过"轮询"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,每个请求按时间顺序逐一分配到不同的后端服务器,通过配合weight配置可以实现基于权重的轮询;如果后端服务器down掉,能自动剔除。
对应用程序服务器的请求以循环方式分发,假如来了十条请求,十台服务器被一个nginx控制,那么nginx会使十台服务器每台处理一条请求。
加权轮询 (1--10) weight 值越大,分配的几率越大。
有的服务器性能好,有的性能差,那么用加权的方式就可以使服务器资源合理利用。有两台服务器a、b,a的性能好,那么就可以给a加权,让a多处理几条请求,b少处理几条。
这种方式是Nginx 的默认配置方式。
配置方式如下
upstream backend {
server 192.168.0.11 weight=1;
server 192.168.0.12 weight=2;
}
使用场景:服务器的硬件配置一致时,我们可以采用该配置。
2. IP 哈希(ip_hash)
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题,早期的tomcat 单体应用得较多。
upstream backend {
ip_hash;
server 192.168.0.11 ;
server 192.168.0.12 ;
}
3. 哈希算法 (url_hash)
根据请求的url进行负载均衡,可以使用Nginx 的变量,可以实现一些复杂的算法, 比如按URL的hash结果来分配请求,使每个URL定向到同一个后端服务,URl_HASH 一般配合缓存服务一起使用,提升缓存命中率。
upstream backend {
hash $uri;
server 192.168.0.11 ;
server 192.168.0.12 ;
}
4. 最少连接(least_conn)
请求将被传递给当前拥有最少活跃连接的server,如果配置的服务器较少,则将转而使用基于权重的轮询算法。
在连接负载最少的情况下,nginx会尽量避免将过多的请求分发给繁忙的应用程序服务器,而是将新请求分发给不太繁忙的服务器,避免服务器过载
upstream backend {
least_conn;
server 192.168.0.11 weight=1;
server 192.168.0.12 weight=2;
server 192.168.0.13 weight=2;
}
今天的分享就到这里了,大家有没有好的方法呢 ,欢迎来留言区评论 我们一起交流学习 ,如果喜欢我的文章 欢迎点赞和转发。