Nginx实现负载均衡

nginx实现负载均衡

一、nginx负载均衡

负载均衡的作用

负载均衡的作用是为了解决单个节点压力过大,造成Web服务响应过慢的问题。

以轮询为例,如下是nginx.conf完整代码
worker_processes  1;

events {
    worker_connections  1024;
}

http {
   upstream  server {
       server    localhost:10001;
       server    localhost:10002;
   }

server {
   listen       10000;
   server_name  localhost;
   
   location / {
    proxy_pass http://server;
    proxy_redirect default;
   		}
   }
}

负载均衡策略

  • 轮询

    轮询方式是Nginx负载默认的方式,顾名思义,所有请求都按照时间顺序分配到不同的服务上,如果服务Down掉,可以自动剔除,如下配置后轮训10001服务和10002服务。

    upstream  server {
           server    localhost:10001;
           server    localhost:10002;
    }
    
  • iphash

    每个请求都根据访问ip的hash结果分配,经过这样的处理,每个访客固定访问一个后端服务,如下配置(ip_hash可以和weight配合使用)。

    upstream  server {
           ip_hash; 
           server    localhost:10001 weight=1;
           server    localhost:10002 weight=2;
    }
    
  • 最小连接数

    将请求分配到连接数最少的服务上。

    upstream  server {
     	   least_conn;  
           server    localhost:10001 weight=1;
           server    localhost:10002 weight=2;
    }
    
  • 最小相应时间

    按后端服务器的响应时间来分配请求,响应时间短的优先分配。

    upstream  server {
     	   fair;  
           server    localhost:10001 weight=1;
           server    localhost:10002 weight=2;
    }
    
  • url_hash

    使用url_hash,可以使得同一个url到达同一台服务器。

    upstream  server {
     	   hash $request_uri;  
           server    localhost:10001;
           server    localhost:10002;
    }
    

备注:最小相应时间和rul_hash策略属于第三方策略,需要第三方模块的支持。

upstream 参数

参数描述
service反向服务地址+端口
weight权重
max_fails失败多少次 认为主机已挂掉则,踢出
fail_timeout踢出后重新探测时间
backup备用服务
max_conns允许最大连接数
slow_start当节点恢复,不立即加入
down停掉当前服务
  • weight (权重)

    指定每个服务的权重比例,weight和访问比率成正比,通常用于后端服务机器性能不统一,将性能好的分配权重高来发挥服务器最大性能,如下配置后10002服务的访问比率会是10001服务的二倍。

    upstream  server {
           server    localhost:10001 weight=1;
           server    localhost:10002 weight=2;
    }
    
  • max_conns

    可以根据服务的好坏来设置最大连接数,防止挂掉,比如1000,我们可以设置800。

    upstream server {
        server    localhost:10001 max_conns=800;
        server    localhost:10002 max_conns=1000;
    }
    
  • max_fails、 fail_timeout

    max_fails:失败多少次 认为主机已挂掉则踢出。

    max_fails=3 fail_timeout=30s代表在30秒内请求某一应用失败3次,认为该应用宕机,后等待30秒,这期间内不会再把新请求发送到宕机应用,而是直接发到正常的那一台,时间到后再有请求进来继续尝试连接宕机应用且仅尝试1次,如果还是失败,则继续等待30秒…以此循环,直到恢复。

    upstream server {
        server    localhost:10001 max_fails=1  fail_timeout=30;
        server    localhost:10002;
    }
    
  • **backup、down **

    backup:当配置的所有服务挂掉后,备份服务开始工作。

    down:停掉当前服务

    upstream server {
        server    localhost:10001 down;
        server    localhost:10002 backup;
    }
    
  • slow_start

    设置服务器权重从0恢复到表中值的时间

    upstream server {
        server    localhost:10001 weight=6 slow_start=60s;
        server    localhost:10002;
    }
    

二、nginx负载均衡 + ssl证书

如果nginx使用https访问需要提前安装ssl模块。

查看是否安装ssl模块

/usr/local/nginx/sbin/nginx -V

出现configure arguments: --with-http_ssl_module表示已经安装。

如果安装的时候没有编译ssl模块,可以补装ssl模块。

  1. 在解压目录下重新添加ssl模块 ./configure --with-http_ssl_module

  2. 执行make命令,命令执行完成后可以在解压目录下objs文件夹中,看到一个nginx的文件,这个新版本的nginx。

  3. 先备份nginx ,之后将新版本的nginx覆盖之前的即可。

    # 备份nginx
    cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
    # 覆盖nginx
    cp objs/nginx /usr/local/nginx/sbin/nginx
    

申请ssl证书,将ssl证书中的1_www.xxxxx.com_bundle.crt文件和 2_www.xxxxx.com.key文件复制到 /etc/nginx/cert/ 文件夹下。

upstream  server {
       server    localhost:10001;
       server    localhost:10002;
} 
# https
server {  
        listen       11000;  
        server_name  www.xxxxx.com;
        # 开启ssl
		ssl	on;
		# 指定crt文件所在路径
        ssl_certificate "/etc/nginx/cert/1_www.xxxxx.com_bundle.crt";
        # 指定key文件所在路径
        ssl_certificate_key "/etc/nginx/cert/2_www.xxxxx.com.key";
        
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;		
        location / {  
            proxy_pass   https://server;  
            index  index.html index.htm;
        }  
    }
# http
server {
       listen       10000;
       server_name  localhost;

       location / {
        proxy_pass http://server;
        proxy_redirect default;
      }
    }

三、nginx负载均衡 + webstock

如果nginx负载均衡支持webstock需要在location中单独的配置。

upstream  server {
       server    localhost:10001;
       server    localhost:10002;
} 
# 支持webstock
server {
       listen       10000;
       server_name  localhost;

       location / {
        proxy_pass http://server;
        #webstock配置。
        proxy_redirect default;
        proxy_set_header Host $host;
		proxy_set_header X-Real_IP $remote_addr;
		proxy_set_header X-Forwarded-For $remote_addr:$remote_port;
		proxy_http_version 1.1;
		proxy_set_header Upgrade $http_upgrade;   # 升级协议头
		proxy_set_header Connection upgrade;
		proxy_read_timeout 6000s; #超时时间 10分钟
      }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值