Nginx的負(fù)載均衡設(shè)定(一)

一、簡(jiǎn)單需求

  • 1.使用nginx對(duì)請(qǐng)求進(jìn)行負(fù)載。負(fù)載分配到自身服務(wù)器和另外一臺(tái)服務(wù)器。

二、知識(shí)普及

  • 1、nginx的負(fù)載模塊及說(shuō)明
    來(lái)自官網(wǎng):
    nginx upstream 反向代理功能
  • 示例
http {
upstream backend  {
  server 192.168.1.111 weight=1 max_fails=5 fail_timeout=3;
  sever  192.168.1.44:88 weight=3 max_fails=5 fail_timeout=3;
  server 192.168.1.44 backup;
  server unix:/tmp/backend3;
} 
server {
  location / {
    proxy_pass  http://backend;
  }
}
}

  • 2、upstream 支持的負(fù)載均衡算法

輪詢(xún)(默認(rèn))。每個(gè)請(qǐng)求按時(shí)間順序逐一分配到不同的后端服務(wù)器,如果后端某臺(tái)服務(wù)器宕機(jī),故障系統(tǒng)被自動(dòng)剔除,使用戶(hù)訪問(wèn)不受影響。Weight 指定輪詢(xún)權(quán)值,Weight值越大,分配到的訪問(wèn)機(jī)率越高,主要用于后端每個(gè)服務(wù)器性能不均的情況下。

ip_hash。每個(gè)請(qǐng)求按訪問(wèn)IP的hash結(jié)果分配,這樣來(lái)自同一個(gè)IP的訪客固定訪問(wèn)一個(gè)后端服務(wù)器,有效解決了動(dòng)態(tài)網(wǎng)頁(yè)存在的session共享問(wèn)題。

fair。這是比上面兩個(gè)更加智能的負(fù)載均衡算法。此種算法可以依據(jù)頁(yè)面大小和加載時(shí)間長(zhǎng)短智能地進(jìn)行負(fù)載均衡,也就是根據(jù)后端服務(wù)器的響應(yīng)時(shí)間來(lái)分配請(qǐng)求,響應(yīng)時(shí)間短的優(yōu)先分配。Nginx本身是不支持fair的,如果需要使用這種調(diào)度算法,必須下載Nginx的upstream_fair模塊。

url_hash。此方法按訪問(wèn)url的hash結(jié)果來(lái)分配請(qǐng)求,使每個(gè)url定向到同一個(gè)后端服務(wù)器,可以進(jìn)一步提高后端緩存服務(wù)器的效率。Nginx本身是不支持url_hash的,如果需要使用這種調(diào)度算法,必須安裝Nginx 的hash軟件包。

  • 3.upstream 支持的狀態(tài)參數(shù)

在HTTP Upstream模塊中,可以通過(guò)server指令指定后端服務(wù)器的IP地址和端口,同時(shí)還可以設(shè)定每個(gè)后端服務(wù)器在負(fù)載均衡調(diào)度中的狀態(tài)。常用的狀態(tài)有:

down,表示當(dāng)前的server暫時(shí)不參與負(fù)載均衡。

backup,預(yù)留的備份機(jī)器。當(dāng)其他所有的非backup機(jī)器出現(xiàn)故障或者忙的時(shí)候,才會(huì)請(qǐng)求backup機(jī)器,因此這臺(tái)機(jī)器的壓力最輕。

max_fails,允許請(qǐng)求失敗的次數(shù),默認(rèn)為1。當(dāng)超過(guò)最大次數(shù)時(shí),返回proxy_next_upstream 模塊定義的錯(cuò)誤。

fail_timeout,在經(jīng)歷了max_fails次失敗后,暫停服務(wù)的時(shí)間。max_fails可以和fail_timeout一起使用。

注,當(dāng)負(fù)載調(diào)度算法為ip_hash時(shí),后端服務(wù)器在負(fù)載均衡調(diào)度中的狀態(tài)不能是weight和backup。

注意事項(xiàng):
1、upstream 配置時(shí)要放置在nginx的http區(qū)域內(nèi)
2、后端接收訪問(wèn)的real server 同樣用nginx解析的話(huà),需要設(shè)定日志格式;
并且在nginx配置時(shí),增加 proxy_set_header X-Real-IP $remote_addr;
3、

三、部署環(huán)境及說(shuō)明

  • 3.1 192.168.1.44 作為調(diào)度器,web主服務(wù)器,810端口作為backup;緩存服務(wù)器

  • 3.2 192.168.1.111 作為web服務(wù)器,img服務(wù)器、rabbitmq服務(wù)器和redis服務(wù)器;

  • 3.3 網(wǎng)站的分布式已經(jīng)解決,session共享用redis解決掉了,因此我這里使用輪詢(xún) weight模式來(lái)做;

四、部署shell

  • 晚上繼續(xù)修改
#!/bin/bash 
#!/bin/bash
##################################
#Nginx 安裝腳本與負(fù)載設(shè)定upstream 
#Make by :Magic
#TIME:2015-10
#Mail:308522800@qq.com
#使用方法 bash CheckNX.sh
###############################
splits="------------------------------------"
function confnginx ()
{
 sed -i '/http {/r 1.txt' 
 
}

function instanginx ()
{
 yum install nginx -y 
}

function userage ()
{
echo -e "userage\n:$0\n"
echo -e "請(qǐng)輸入y,n,其他輸入無(wú)效"
exit

}
echo -e "系統(tǒng)開(kāi)始檢測(cè)請(qǐng)等待... "
##check1返回不為0
nginx_check1=`ps -ef |grep nginx|grep -v "grep " |wc -l`
#echo "進(jìn)程檢測(cè):$nginx_check1"
##check2返回不等于1,nginx存在
nginx_check2=`whatis nginx |grep  "nothing appropriate" |wc -l`
#echo "版本檢測(cè):$nginx_check2"
#check3返回不等于1 ,nginx 存在
nginx_check3=`rpm -ql nginx |grep "is not installed" |wc -l`
#echo "Rpm包檢測(cè):$nginx_check3"
if [ $nginx_check1 -ne 0 ] || [ $nginx_check2 -ne 1  ] || [ $nginx_check3 -ne 1 ];then
  echo "Nginx process existence "
  echo -e "系統(tǒng)即將開(kāi)始配置,請(qǐng)確認(rèn)操作。建議最后在操作前備份自己的nginx.conf文件"
  read comit
  case "$comit" in 
  y)
  echo "Config the nginx.conf"
  confnginx
  ;;
  n)
  echo "程序準(zhǔn)備好了要退出??!"
  break
  ;;
  *)
  userage
  ;;
  esac

#獲取用戶(hù)確認(rèn)存在,開(kāi)始執(zhí)行nginx 配置
else 
  echo "Nginx is not existence !."

  
fi


upstream qa.test.com {
server 192.168.1.111 weight=2;
server 192.168.1.210 weight=1 max_fails=5 fail_timeout=3;
server 192.168.1.21:810 backup;

}
server {
listen 811;
server_name qa.test.com;
location / {
proxy_pass http://qa.test.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

五、參考網(wǎng)址

  • tengine

http://tengine.taobao.org/book/

  • nginx

http://nginx.org/en/docs/
http://nginx.org/en/docs/http/ngx_http_upstream_module.html
http://shouce.jb51.net/nginx/left.html *

六、

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容