nginx 負載均衡配置

2021-07-29 18:43:33 字數 4091 閱讀 9497

下面一段話摘自網路:

(1).正向**的概念 

正向**,也就是傳說中的**,他的工作原理就像乙個跳板,簡單的說,我是乙個使用者,我訪問不了某**,但是我能訪問乙個**伺服器,這個**伺服器呢,他能訪問那個我不能訪問的**,於是我先連上**伺服器,告訴他我需要那個無法訪問**的內容,**伺服器去取回來,然後返回給我。從**的角度,只在**伺服器來取內容的時候有一次記錄,有時候並不知道是使用者的請求,也隱藏了使用者的資料,這取決於**告不告訴**。 

結論就是,正向** 是乙個位於客戶端和原始伺服器(origin server)之間的伺服器,為了從原始伺服器取得內容,客戶端向**傳送乙個請求並指定目標(原始伺服器),然後**向原始伺服器轉交請求並將獲得的內容返回給客戶端。客戶端必須要進行一些特別的設定才能使用正向**。

(2).反向**的概念 

繼續舉例: 

例使用者訪問 但www.test.com上並不存在readme頁面,他是偷偷從另外一台伺服器上取回來,然後作為自己的內容返回使用者,但使用者並不知情。這裡所提到的 www.test.com 這個網域名稱對應的伺服器就設定了反向**功能。

結論就是,反向**正好相反,對於客戶端而言它就像是原始伺服器,並且客戶端不需要進行任何特別的設定。客戶端向反向**的命名空間(name-space)中的內容傳送普通請求,接著反向**將判斷向何處(原始伺服器)轉交請求,並將獲得的內容返回給客戶端,就像這些內容原本就是它自己的一樣。

反向**負載均衡

反向**伺服器的核心工作便是** http請求,因此它工作在

層面,也就是

tcp七層結構中的應用層(第七層),所以基於反向**的負載均衡也稱為七層負載均衡,實現它並不困難,目前幾乎所有主流的

web伺服器都熱衷於支援基於反向**的負載均衡

負載均衡配置

nginx 的 upstream預設是以輪詢的方式實現負載均衡,這種方式中,每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。

另外一種方式是ip_hash:每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問乙個後端伺服器,可以解決session的問題。 

準備三颱配置都一致的伺服器,都裝上nginx (192.168.1.8,192.168.1.9,192.168.1.10

)三颱機器 在192.168.1.8上配置如下操作就可以實現簡單的負載均衡

負載均衡配置示例:

upstream test.com

server

}

在用nginx做反向**集群的時候,為了保證單點故障,所以這裡引入keepalived

keepalived

:一款用來檢測服務狀態存活性的軟體,常用來做高可用

keepalived 安裝

> cd keepalived-1.3.4

> ./configure --prefix=/usr/local/keepalived

> make && make install

複製/sbin/keepalived到/usr/sbin下

cp /usr/local/keepalived/sbin/keepalived  /usr/sbin/

keepalived缺省會讀取/etc/keepalived/keepalived.conf配置檔案

> mkdir /etc/keepalived

> cp /usr/local/keepalived/etc/keepalived/keepalived.conf  /etc/keepalived/keepalived.conf

複製sysconfig檔案到/etc/sysconfig下

cp /usr/local/keepalived/etc/sysconfig/keepalived  /etc/sysconfig/

複製啟動指令碼到/etc/init.d下

> cd /usr/local/src/keepalived-1.3.4  

#注意這裡是原始碼路徑

> cp ./keepalived/etc/init.d/keepalived  /etc/init.d/

> chmod 755 /etc/init.d/keepalived配置

master:

! configuration file for keepalived

global_defs

vrrp_instance vi_1

virtual_ipaddress

}

backup:

! configuration file for keepalived

global_defs

vrrp_instance vi_1

virtual_ipaddress

}

主和backup的配置只是差了優先順序

先後在主、從伺服器上啟動keepalived: /etc/init.d/keepalived start

在主伺服器上檢視是否已經繫結了虛擬ip:ip addr

停止主伺服器上的keepalived: /etc/init.d/keepalived stop

然後在從伺服器上檢視是否已經繫結了虛擬ip:

啟動主伺服器上的keepalived,看看主伺服器能否重新接管虛擬ip

經過前面的配置,如果主伺服器的keepalived停止服務,從伺服器會自動接管vip對外服務;一旦主伺服器的keepalived恢復,會重新接管vip。 但這並不是我們需要的,我們需要的是當nginx停止服務的時候能夠自動切換。

keepalived支援配置監控指令碼,我們可以通過指令碼監控nginx的狀態,如果狀態不正常則進行一系列的操作,最終仍不能恢復nginx則殺掉keepalived,使得從伺服器能夠接管服務。

如何監控nginx的狀態

最簡單的做法是監控nginx程序,更靠譜的做法是檢查nginx埠,最靠譜的做法是檢查多個url能否獲取到頁面。

如何嘗試恢復服務

如果發現nginx不正常,重啟之。等待3秒再次校驗,仍然失敗則不再嘗試。

根據上述策略很容易寫出監控指令碼。這裡使用nmap檢查nginx埠來判斷nginx的狀態,記得要首先安裝nmap。監控指令碼如下:

#!/bin/bash

# check nginx server status

nginx=/usr/local/nginx/sbin/nginx

port=80

nmap localhost -p $port | grep "$port/tcp open"

#echo $?

if [ $? -ne 0 ];then

$nginx -s stop

$nginx

sleep 3

nmap localhost -p $port | grep "$port/tcp open"

[ $? -ne 0 ] && /etc/init.d/keepalived stop

fi

不要忘了設定指令碼的執行許可權,否則不起作用。

假設上述指令碼放在/opt/chk_nginx.sh,則keepalived.conf中增加如下配置:

主keepalived

例子:

! configuration file for keepalived

更進一步,為了避免啟動keepalived之前沒有啟動nginx , 可以在/etc/init.d/keepalived的start中首先啟動

nginx:

start()

retval=$?

echo

[ $retval -eq 0 ] && touch /var/lock/subsys/$prog

}

nginx負載均衡配置

curl nginx upstream fair.zip unzip nginx upstream fair.zip cd nginx 1.6.2 檢視當前nginx 編譯引數 nginx v 輸出 configure arguments prefix usr local nginx configu...

Nginx負載均衡配置

負載均衡是我們大流量 要做的乙個東西,下面我來給大家介紹在nginx伺服器上進行負載均衡配置方法,希望對有需要的同學有所幫助哦。負載均衡 先來簡單了解一下什麼是負載均衡,單從字面上的意思來理解就可以解釋n臺伺服器平均分擔負載,不會因為某台伺服器負載高宕機而某台伺服器閒置的情況。那麼負載均衡的前提就是...

Nginx負載均衡配置

nginx安裝請參考 nginx原始碼安裝 nginx負載均衡是通過upstream模組來實現的,內建實現了三種負載策略,配置還是比較簡單的。官網負載均衡配置說明 省略其它配置 根據伺服器的響應時間來分配請求,響應時間短的優先分配,即負載壓力小的優先會分配。由於fair模組是第三方提供的,所以在編譯...