在和一些朋友交流
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主nginx之二的keepalivd.conf配置檔案如下: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
}
! configuration file for keepalived二台機器的監控nginx的程序指令碼,指令碼內容如下: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
}
#!/bin/bash我們分別在二台主nginx上執行,命令如下所示: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
nohup sh /root/nginxpid.sh &四、正常啟動二台主nginx的nginx和keealived程式後,二台機器的正常ip顯示應該如下所示:
這台是ip為192.168.1.5的機器的ip addr命令顯示結果:
1: lo: mtu 16436 qdisc noqueue另外一台ip為192.168.1.6的機器用ip addr命令顯示結果如下: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
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結果分配,這樣每...