nginx负载均衡一般在不同的服务器,那条件有限,就用不同的端口代替不同的服务,后台启动4个不同端口的服务,然后nginx配置如下:
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#打开注释
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'
#添加一条我们的需要的日志格式,以便测试负载均衡
'$upstream_addr "$upstream_status" ${upstream_response_time}';
access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
#后端服务器池
upstream babytun{
#通过不同的端口访问
server 192.168.0.101:8001;
server 192.168.0.101:8002;
server 192.168.0.101:8003;
server 192.168.0.101:8004;
}
server{
#nginx通过80端口提供服务
listen 80;
#使用babytun服务器池进行后端处理
location /{
proxy_pass http://babytun;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
访问配置好的路径,没有添加任何策略的话,默认就是轮询,就是从8001至8004,再继续从从8001至8004,只要继续访问就反复这样走,可以参考日志
接下来就使用最少连接策略,nginx本身服务有一个计数器,用来计算哪一个服务干活最少,然后让干活最少的来接受请求
暂时在一台服务器测试不出来,还是会像轮询一样访问,但是集群并发情况就会暗自最小连接测试,我们来看一下最少连接策略怎么配置
upstream babytun{
#通过不同的端口访问
#最少连接策略
least_conn;
server 192.168.0.101:8001;
server 192.168.0.101:8002;
server 192.168.0.101:8003;
server 192.168.0.101:8004;
}
server{
#nginx通过80端口提供服务
listen 80;
#使用babytun服务器池进行后端处理
location /{
proxy_pass http://babytun;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
ip hash -ip绑定策略 :记录客户端的ip,然后每一次相同的ip都进某一个相同ip请求的后端服务器(一般用在低并发,重业务的系统情况下,高并发不推荐使用)下面分享一下ip hash的配置
upstream babytun{
#通过不同的端口访问
ip_hash;#ip hash 模式
server 192.168.0.101:8001;
server 192.168.0.101:8002;
server 192.168.0.101:8003;
server 192.168.0.101:8004;
}
看一下日志记录,我们本身就是一个服务器,所以日志一直都是访问某一个端口就一直访问啦
Weighted-权重策略:权重就是一个服务器处理请求的比例,有的八核有的2核等等,当权重值越好,那就会让那个更好的服务器多处理 ,下面看下配置weight就是权重策略的配置
upstream babytun{
#通过不同的端口访问
server 192.168.0.101:8001 weight=5;#8001的端口访问的次数更多
server 192.168.0.101:8002 weight=2;
server 192.168.0.101:8003 weight=1;
server 192.168.0.101:8004 weight=2;
}
根据日志查看,访问8001的有9次,8002的有4次,8003有1次,8004有4次,这个就是按权位比重来测试的访问不同的端口情况
nginx故障发现: nginx心跳检查机制 后端服务器可能有某一个服务器挂掉了,或者关闭了,那么就需要一些操作,需要把挂掉的服务器剔除掉 在nginx中,max_fails:代表最大失败次数,建议实际操作不要超过3次 max-timeout:代表单次连接超时时间,建议实际操作中连接超时不超过60秒 然后每次访问,访问到挂掉的端口,就一直请求,直到超时时间到了,还没有请求成功就可以转发另一个后端服务器就可以了,nginx故障机制的配置文件如下
upstream babytun{
#通过不同的端口访问
server 192.168.0.101:8001;
#最多失败1次 连接2秒就要切换其他服务器
server 192.168.0.101:8002 max_fails=1 fail_timeout=2s;
server 192.168.0.101:8003;
server 192.168.0.101:8004;
}
为了检验,把8002的端口关闭,然后访问端口,再看下日志
在nginx故障机制很重要,为了防止访问某个服务器下的接口会出现宕机情况,一般采取必然的手段,今天就说这些