Nginx主主負載均衡架構

2021-09-02 03:54:05 字數 4414 閱讀 7549

在和一些朋友交流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

一、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結果分配,這樣每...