安裝LVS-DR環境 vip:192.168.12.100 lvs-director:192.168.12.4 nginx1:192.168.12.2 nginx2:192.168.12.3html
###What did you do today前端
yum install ipvsadmnginx
ipvsadm -h 後端
在192.168.12.2和192.168.12.3上安裝nginx,此處略。能夠查看我FastDFS系列博客。bash
進入/usr/local/nginx/conf/目錄下,建立nginx-lvs.conf服務器
http { include mime.types; default_type application/octet-stream; sendfile on; server { listen 80; server_name localhost; location / { root html; index index.html index.htm; }
}網絡
在Director Server進行配置(192.16812.4)session
ifconfig eth0:0 192.168.12.100 broadcast 192.168.12.100 netmask 255.255.255.255 up app
route add -host 192.168.12.100 dev eth0:0 負載均衡
echo "1" > /proc/sys/net/ipv4/ip_forward
ipvsadm --clear
ipvsadm -A -t 192.168.12.100:80 -s rr
ipvsadm -a -t 192.168.12.100:80 -r 192.168.12.2:80 -g ipvsadm -a -t 192.168.12.100:80 -r 192.168.12.3:80 -g
ipvsadm
在LVS的DR和TUN模式下,用戶的訪問請求到達真實服務器後,是直接返回給用戶的,而再也不通過前端的Director Server。所以,就須要在每一個Real Server節點上增長虛擬vip地址,這樣數據才能直接返回給用戶。
接着咱們就須要在Real Server上進行配置。(192.168.12.二、192.168.12.3)
ifconfig lo:0 192.168.12.100 broadcast 192.168.12.100 netmask 255.255.255.255 up /sbin/route add-host 192.168.12.100 dev lo:0
arp_ignore:定義接收到arp請求時的響應級別 0 - 只要本地配置有相應的地址,就給予響應。 1 - 哪一個接口上接受arp請求,就從哪一個端口響應。DR模式使用
arp_announce:定義將本身地址向外通告時的通告級別 0 - 將本地任何接口上的任何地址向外通告。 1 - 試圖僅向目標網絡通告與其網絡匹配的地址。 2 - 僅向與本地接口上地址匹配的網絡進行通告。DR模式使用
sysctl -p使修改生效!
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce sysctl -p
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
注意事項:
- 測試時須要在nginx的http中設置keepalive_timeout 0; 取消使用http持久鏈接模式,保證每次客戶端發送請求都須要向服務端簡歷鏈接,這樣作是爲了測試效果更加明顯,每次刷新界面都要通過lvs負載轉發。 2.lvs進行負載轉發須要保證lvs負載端口要和nginx服務的端口保持一致,這裏是80 3.在nginx中keepalive_timeout的默認值是75s,默認使用http持久鏈接模式,可以使客戶端到服務器端的鏈接持續有效,當出現對服務器的後繼請求時,可避免創建或從新創建鏈接。生產環境建議keepalive_timeout不要設置爲0
修改192.168.12.2和192.168.12.3下/usr/local/nginx/html/目錄中index.html的內容,使其個性化。
第一次請求192.168.12.100
第二次請求192.168.12.100
假設我停到nginx1
咱們再次訪問192.168.12.100,仍是能夠的!由於lvs採用輪詢策略,若是其中一個nginx請求不可達,那麼久請求另外一個nginx!
爲了方便配置啓動lvs,咱們能夠將Director Server 和 RealServer配置過程封裝到Shell腳本中。
在Director Server進行配置
#!/bin/sh
# 定義虛擬ip
VIP=192.168.12.100
# 定義realserver,並已空格分開,根據需求修改
RIPS="192.168.12.2 192.168.12.3"
# 定義提供服務的端口
SERVICE=80
# 調用init.d腳本的標準庫
. /etc/rc.d/init.d/functions
case $1 in
start)
echo "Start LVS of DR Mode"
# 開啓ip轉發
echo "1" > /proc/sys/net/ipv4/ip_forward
# 綁定虛擬ip
ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
route add -host $VIP dev eth0:0
# 清除lvs規則
ipvsadm -C
# 添加一條虛擬服務器記錄
# -p指定必定的時間內將相同的客戶端分配到同一臺後端服務器
# 用於解決session的問題,測試時或有別的解決方案時建議去掉
ipvsadm -A -t $VIP:$SERVICE -s rr
# 添加真實服務器記錄
for RIP in $RIPS
do
echo $RIP:$SERVICE;
ipvsadm -a -t $VIP:$SERVICE -r $RIP:$SERVICE -g
done
# 設置tcp tcpfin udp的超時鏈接值
ipvsadm --set 30 120 300
ipvsadm
;;
stop)
echo "Stop LVS DR"
ifconfig eth0:0 down
ipvsadm -C
;;
*)
echo "Usage:$0 {start ¦ stop}"
exit 1
esac
複製代碼
chmod +x /etc/init.d/lvsdr 啓動: service lvsdr start 中止: service lvsdr stop
在RealServer上進行配置
#!/bin/sh
VIP=192.168.12.100
. /etc/rc.d/init.d/functions
case $1 in
start)
echo "lo:0 port starting"
# 爲了相應lvs調度器轉發過來的包,需在本地lo接口上綁定vip
ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
# 限制arp請求
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
;;
stop)
echo "lo:0 port closing"
ifconfig lo:0 down
echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
echo "Usage: $0 {start ¦ stop}"
exit 1
esac
複製代碼
chmod +x /etc/init.d/lvsdr 啓動: service lvsdr start 中止: service lvsdr stop
###Summary
明天擼LVS四層+Nginx七層負載均衡!