目前你們用LVS+Keepalived + APP 架構都是 2臺LVS +Keepalived 而後後端跟着 應用設備html
然而針對小客戶來講, 2臺LVS日常沒什麼壓力 還有一臺備着(雖然能夠跑雙主,但對小用戶模式意義不大) 想讓咱們充分利用起來 能不能把後端應用 也部署都LVS上linux
這樣的話 架構就是後端
#下面講解2臺設備分別部署application+LVS+keepalived 實現高可用跟設備都在服務(沒有空閒設備)服務器
架構圖 以下:架構
原理說下吧 (#DR模式)app
其實這個跟咱們日常部署LVS+Keepalived沒什麼區別 運維
當時若是整個過程你按照之前的那種部署思路 發現部署完以後 總有那麼一臺real-server不能服務(我實驗過 把備機的keepalived stop就行了) 之前也一直糾結這個tcp
緣由跟解決方法以下:(摘自 扶凱博客)oop
當客戶端發送數據包給 VIP .好比咱們的 Director1 (Master 主)這個接口正在工做,這時 LVS 能接收到這個包,而後根據 keepalived 的配置進行 load balance .這時 Director1 會使用 LVS-DR 的功能給包路由給本身或者 Director2 (Backup).
這時有個問題.在這個例子中由於咱們使用了 keepalived .這時 Director2 這臺是一臺 VIP 的備份服務器.這時 keepalived 默認會當即啓動使用 ipvsadm 的規則來配置這臺服務器怎麼樣作備份的處理.來使得更快的故障轉移.因此這時這些規則這臺備份的 Director2 主機都會存在.
這就有問題了.當從 Director1 (Master 主),好比使用 rr .會轉發大約 50% 的包從 Director1 到 Director2 (Backup)的 3306 的端口.這時由於 Director2 由於這些 LVS-DR 的配置規則會接着給這些包,在作一次 load balance .又發回去給 Director1.這時會產生一個死的循環.
隨着時間的推移,不但不能正常的處理鏈接,您的服務器也會崩潰,在他們中間或後端不斷的反覆鏈接測試
解決方案: 給進入 eth0 的包打包 mark 的標記,當數據包是發給 VIP:80 而且 MAC 不其它 LVS 服務器的話. 才作個 mark ,這樣纔會對指定的 fwmark 進行 loadbalance 放入到 LVS 中處理.只要數據包是從任意其它的 MAC 地址(非 LVS 的轉發)會被髮往 VIP:port, 會不在進行 loadbalanced 而是直接轉給後面監聽的 demon 程序進行應用的處理.實際就是咱們使用 iptables 來對進入的流量設置 MARK.而後配置 keepalived 只處理有 MARK 過的流量.不在使用之前綁定 VIP 和端口
下面咱們來給指定的包打標籤吧 (利用iptables)命令以下
在LVS 1上執行
而後改下LVS2 的keepalived配置文件 #備
vrrp_instance VIP_1 {
interface eth0
state BACKUP
virtual_router_id 55
priority 80
virtual_ipaddress {
192.168.20.160
}
notify_master 「/etc/init.d/rlsv.sh stop」 ##切到主 後執行的腳本
notify_backup 「/etc/init.d/rlsv.sh start」 ##切到備 後執行的腳本
}
virtual_server fwmark 4 80 { ###fwmark 4 爲剛纔用iptables打的標籤
delay_loop 3
lb_algo rr
lb_kind DR
protocol TCP
sorry_server 127.0.0.1 8080
real_server 192.168.20.135 8080 {
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.20.136 8080 {
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
最後都是啓動keepalived 測試
備註:
這裏有個問題 若是keepalived切到備份後(這個切換觸發條件 有點糾結 我手動把keepalived down了 可是沒執行 MASTER 上的notify_backup 「/etc/init.d/real-server start」 和 notify_fault 「/etc/init.d/real-server start」 命令 ) 那這個時候就有問題了 當時若是是機器down了 那沒事 當時若是是keepalived服務down了 機器沒down 那 也只能一臺在服務(這個很糾結) 全部得重點保障 主的keepalived一直正常 那整個平臺 設備利用率最高了, 但在此處我想說明一下,其實在MASTER上當keepalived若是DOWN了,能夠寫腳本檢測keepalived的狀況,而後啓動rlsv.sh的腳本,當keepalived若是up以後,rlsv.sh 的腳本會自動被關閉, 能夠暫時解決以上所提到的問題
備註:全部的腳本可下載
轉載請註明linux系統運維:
http://www.linuxyw.com/linux/fuzaijunheng/20130429/146.html