Nginx负载均衡策略配置
负载均衡顾名思义可以理解问一种平衡策略,可以用来分发客户端请求的不同的服务器节点从而减轻单台服务的压力,提高了性能也保障了可靠性,因此当多个几点同时工作时,即使有一个节点不可用,那么我们还有其他节点可以使用,从而提高了系统的健壮性。
可以实现负载均衡的方式有很多,这里主要介绍nginx的负载均衡策略,常见的nginx负载均衡策略一般有轮询,加权,ip_hash,最少连接数这几种。
Nginx负载均衡配置语法
配置34.131和34.132节点作为负载均衡的流量节点,配置为用户访问流量的入口,也就是说用户在浏览器访问http://的时候,nginx会通过负载均衡策略分发流量到34.131和34.132节点。
upstream {item} {
server 192.168.34.131:80;
server 192.168.34.132:80;
}
server{
listen 80;
server_name {item};
location / {
proxy_pass http://{item};
}
}
下面代码快演示nginx通过upstream模块配置的负载均衡策略,当客户端访问test.com的时候会分发流量到192.168.34.131:80和192.168.34.132:80节点
upstream test.com {
server 192.168.34.131:80 weight=4 max_fails=5 fail_timeout=300s;
server 192.168.34.132:80 weight=3 max_fails=5 fail_timeout=300s;
}
server{
listen 80;
server_name test.com;
location / {
proxy_pass http://test.com;
}
}
负载均衡策略
轮询
默认轮询,如果你是直接复制上面的upstream的话你使用的就是默认轮询方式,请求会随机派发到你配置的服务器上
权重分配
配置方式:
upstream item {
#item名字可以自定义
server 192.168.34.130:81 weight=1;
server 192.168.34.137:80 weight=2;
}
weight: 权重(的值越高被派发请求的概率也就越高,可以根据服务器配置的不同来设置)
max_fails: 失败多少次踢出队列;例如max_failes=5
fail_timeout: 在达到max_fails的次数踢出队列后重新尝试探测请求的时间;例如fail_timeout=60s
哈希分配
在web系统中如果应用了负载均衡,例如用户在某台服务器上登录了,那么当用户第二次请求到来的时候,因为系统做了负载均衡,每次请求都有可能分发给服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,登录信息可能会丢失,这样的方式肯定是不可取的。我们可以采用ip_hash的方式解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。
upstream item {
#item名字可以自定义
ip_hash;
server 192.168.34.130:81;
server 192.168.34.137:80;
}
hash分配根据客户端IP来分配服务器,例如第一次访问请求被派发给了192.168.34.130这台服务器,那么后面请求就都会发送这台服务器上,这样的话可以解决session共享的问题。
最少连接分配
upstream item {
#item名字可以自定义
least_conn;
server 192.168.34.130:81;
server 192.168.34.137:80;
}
根据添加的服务器列表判断哪台服务器分的连接最少就将请求给这台服务器。
完整示例
以下示例展示了负载均衡配置展示
前端test.com域名会分发流量给34.13x:8090这几个服务
后端testapi.com域名会分发流量给34.13x:80这几个服务
同时记录下各自的log在/var/log/nginx目录下的test.log和testapi.log
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
upstream test.com {
server 192.168.34.131:8090 weight=4 max_fails=5 fail_timeout=300s;
server 192.168.34.132:8090 weight=3 max_fails=5 fail_timeout=300s;
server 192.168.34.133:8090 weight=3 max_fails=5 fail_timeout=300s;
}
server{
listen 80;
server_name test.com;
location / {
proxy_pass http://test.com;
}
access_log /var/log/nginx/test.log;
}
upstream testapi.com {
server 192.168.34.131:80 weight=4 max_fails=5 fail_timeout=300s;
server 192.168.34.132:80 weight=3 max_fails=5 fail_timeout=300s;
server 192.168.34.133:80 weight=3 max_fails=5 fail_timeout=300s;
}
server{
listen 80;
server_name testapi.com;
location / {
proxy_pass http://testapi.com;
}
access_log /var/log/nginx/testapi.log;
}
}