Nginx主主負載均衡架構

2021-09-05 07:43:40 字數 4645 閱讀 2009

在和一些朋友交流

nginx+keepalived

技術時,我雖然已成功多次實

nginx+keepaived

專案方案,但這些都是用的單主

nginx

在工作,從

nginx

長期只是處於備份狀態,所以我們想將二台

nginx

負載均衡器都處於工作狀態,其實用

nginx+keepalived

一般為了維護方便,企業**的伺服器都在自己的內部機房裡,只開放了

keepalived

的vip

位址的兩個埠80、

443,通過

juniper ssg550

防火牆對映出去,外網

dns對應對映後的公網

ip。此架構的防火牆及網路安全說明如下:

此系統架構僅對映內網

vip的80及

443埠於外網的

juniper ssg550

防火牆下,其他埠均關閉,內網所有機器均關閉

iptables

防火牆;外網

dns指向即通過

juniper ssg550

對映出來的外網位址。

nginx

負載均衡作伺服器遇到的故障一般有:

1.伺服器網線鬆動等網路故障;

2.伺服器硬體故障發生損壞現象而

crash

;3.nginx

服務程序死掉(這種情況理論上會遇到,但事實上生產環境下的

linux

伺服器沒有出現過這種情況,足以證明了

nginx

作為負載均衡器

/反向**伺服器的穩定性,我們可以通過技術手段來解決這一問題)。

測試實驗環境:

主nginx

之一:192.168.1.5

主nginx

之二:192.168.1.6

web伺服器一:

192.168.1.17

web伺服器二:

192.168.1.18

vip192.168.1.8

vip192.168.1.9

一、nginx

和keepalived

,我這裡附上

nginx.conf

配置檔案,如下所示:

二、配置keepalived檔案,我這裡簡單說下原理,其實也就是通過keepalived生成二個例項,二台nginx互為備份,即第一台是第二台機器的備機,而第二台機器也是第一台的備機,而生成的二個vip位址分別對應我們**這樣大家在公網上可以通過dns輪詢來訪問得到我們的**,任何一台nginx機器如果發生硬體損壞,keepalived會自動將它的vip位址切換到另一台機器,不影響客戶端的訪問,這個跟我們以前的lvs+keepalived多例項的原理是一樣的,相信大家也能明白。

主nginx機器之一的keepalived.conf配置檔案如下:

! configuration file for keepalived

global_defs

notification_email_from [email protected]

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id lvs_devel

}vrrp_instance vi_1

virtual_ipaddress

}vrrp_instance vi_2

virtual_ipaddress

}

主nginx之二的keepalivd.conf配置檔案如下:

! configuration file for keepalived

global_defs

notification_email_from [email protected]

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id lvs_devel

}vrrp_instance vi_1

virtual_ipaddress

}vrrp_instance vi_2

virtual_ipaddress

}

二台機器的監控nginx的程序指令碼,指令碼內容如下:

#!/bin/bash

while :

donginxpid=`ps -c nginx --no-header | wc -l`

if [ $nginxpid -eq 0 ];then

/usr/local/nginx/sbin/nginx

sleep 5

nginxpid=`ps -c nginx --no-header | wc -l`

echo $nginxpid

if [ $nginxpid -eq 0 ];then

/etc/init.d/keepalived stop

fifi sleep 5

done

我們分別在二台主nginx上執行,命令如下所示:

nohup sh /root/nginxpid.sh &
四、正常啟動二台主nginx的nginx和keealived程式後,二台機器的正常ip顯示應該如下所示:

這台是ip為192.168.1.5的機器的ip addr命令顯示結果:

1: lo: mtu 16436 qdisc noqueue

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

2: eth0:

mtu 1500 qdisc pfifo_fast qlen 1000

link/ether 00:0c:29:99:fb:32 brd ff:ff:ff:ff:ff:ff

inet 192.168.1.5/24 brd 192.168.1.255 scope global eth0

inet 192.168.1.8/32 scope global eth0

另外一台ip為192.168.1.6的機器用ip addr命令顯示結果如下:

1: lo: mtu 16436 qdisc noqueue

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: eth0:

mtu 1500 qdisc pfifo_fast qlen 1000

link/ether 00:0c:29:7d:58:5e brd ff:ff:ff:ff:ff:ff

inet 192.168.1.6/24 brd 192.168.1.255 scope global eth0

inet 192.168.1.9/32 scope global eth0

inet6 fe80::20c:29ff:fe7d:585e/64 scope link

valid_lft forever preferred_lft forever

3: sit0: mtu 1480 qdisc noop

link/sit 0.0.0.0 brd 0.0.0.0

五、測試過程如下:

1)我們要分別在二台主nginx上用killall殺掉nginx程序,然後在客戶端分別訪問192.168.1.8和192.168.1.9這二個ip(模擬dns輪詢)看能否正常訪問web伺服器。

2)嘗試重啟192.168.1.5的主nginx負載均衡器,測試過程如上;

3)嘗試重啟192.168.1.6的主nginx負載均衡器,測試過程如下;

4)嘗試分別關閉192.168.1.5和192.168.1.6的機器,測試過程如上,看影響**的正常訪問不?

六、目前投入生產要解決的問題:

1)cacti和nagios等監控服務要重新部署,因為現在客戶機是分別訪問二台負載均衡器;

2)日誌收集要重新部署,現在訪問日誌是分布在二台負載均衡器上;

3)要考慮google收錄等seo的問題;

4)證書的問題,二台機器都需要新增的;

5)其它問題暫時沒有想到,待補充。

Nginx主主負載均衡架構

在和一些朋友交流nginx keepalived技術時,我雖然已成功多次實nginx keepaived專案方案,但這些都是用的單主nginx在工作,從nginx長期只是處於備份狀態,所以我們想將二台nginx負載均衡器都處於工作狀態,其實用nginx keepalived也很容易實現。此方法適用場...

Nginx主主負載均衡

nginx主機配置 keepalived的實現原理 keepalived啟用兩個例項,兩台nginx主機互為備份。生成的兩個vip分別都指向目標 比如www.bee.2.com。另,採用dns輪詢訪問該 configuration file for keepalived global defs no...

nginx負載均衡及主備配置

先負載均衡 nginx的負載均衡有4種模式 1 輪詢 預設 每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。2 weight 指定輪詢機率,weight和訪問比率成正比,用於後端伺服器效能不均的情況。2 ip hash 每個請求按訪問ip的hash結果分配,這樣每...