nginx负载均衡

因业务压力变大,所以需要用ngix做一下负载均衡,因受逻辑限制,所以同一IP得请求需要打到同一个后端上

配置如下:

upstream upstream_name{
  ip_hash;
  server 127.0.0.1:8191 weight=4 max_fails=2 fail_timeout=30s;
  server 127.0.0.1:8193 weight=2 max_fails=2 fail_timeout=30s;
}

  然后修改proxy_pass为

proxy_pass       http://upstream_name;

  weight:默认为1.weight越大,负载的权重就越大,比如上述配置中,如果收到6个请求,8191会处理4个,8193会处理两个

  max_fails:允许请求失败的次数默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。

  fail_timeout:max_fails次失败后,暂停的时间。上面两个参数得解释是:30秒内请求某一应用失败3次,认为该应用宕机,后等待30秒,30秒内不会再把新的请求发送到宕机的应用,而是直接发到正常的那一台,时间到后再有请求进来继续尝试连接宕机应用且仅尝试1次,如果还是失败,则继续等待30秒,循环往复,直到恢复。

另外还有一下参数:

  down:表示单前的server暂时不参与负载,比如8191不再使用,可以修改为 server 127.0.0.1:8191 down;

  backup:备用服务器, 其它所有的非backup机器down或者忙的时候,请求backup机器,所以这台机器压力会最轻。

特别注意:

  如果项目中存在定时任务,需要设置主从,主服务处理定时任务,副服务器中将定时任务拿掉,防止任务重复

除 ip_hash 外,nginx还有其他几种,包括 url_hash 等形式,url_hash :按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存服务器时比较有效。

upstream resinserver{
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
    hash $request_uri;
    hash_method crc32;
}

在upstream中加入hash语句,hash_method是使用的hash算法。