lvs的nat圖解:
linux
lvs的nat模式和dr模式的主要的差異就是nat模式的調度器要負責消息的接收和發送,而dr模式中的調度器只須要負責消息的接收,至於消息的發送直接有後面的realserver直接返回給客戶端;vim
須要遵循如下規則:(dir爲調度器的ip,rip爲realserver的ip)bash
1.調度器中的dip和rip要在同一個網絡中,若是Dip和rip不在同一網絡中,就不能將報文送達到realserver,同時realserver的網關要設置爲和Dip同樣的網關,不然報文從realserver沒法到達DIP。服務器
2.Rip一般爲私有地址,僅能和集羣節點中(Dip通訊)。網絡
3.Director位於client和realserver之間,處理進去的全部通訊。負載均衡
4.Realserver必須將網關指向Dip。框架
5.Director支持端口映射。向外提供服務的端口和realserver的端口可能不一致。curl
Realserver可使用任意操做系統,只用director是linux就能夠。tcp
lvs的工做模式和iptables的工做模式有類似之處:
ide
iptables:在內核空間是netfilter,而在用戶空間是iptables,咱們經過iptables寫規則,這些規則會在netfilter上面生效;
lvs:在內核空間工做的是ipvs,而在用戶空間是ipvsadm,經過命令ipvsadm寫規則在內核上面的ipvs框架上生效;
注意:iptables和lvs不能同時使用。緣由是:
iptables中的5個鉤子爲:(本身理解的,有點粗俗)
prerouting:剛剛進入網絡層的數據包經過此節點,尚未到達路由以前,源地址轉換在此
input:通過路由以後,如何是訪問本機的就會經過此節點
ouput:從本機取到數據以後,出來時要通過的節點,而後走postrouting
forward:定義的轉發規則從這裏轉發到後面的主機
postrouting:出去的時候數據包通過此節點,目標地址轉換在此
因爲咱們對外公佈的地址就是負載均衡本地的地址,因此會經過input連將請求送達到本機上,若是本機的確有個端口在響應這個用戶請求,就會回覆的,負責拒絕。
很顯然,在Lvs中咱們不能讓用戶的請求到達本機上面去,如何作?
其實咱們的LVS工做在input鏈上面的,咱們在input上面設置規則,一旦發現用戶請求是一個集羣服務,就會強行修改這個報文的行程的,原本是到達本機的,結果強行修改行程以後,到達post_routing--->其餘主機上
這是有點反常與iptables機制的,因此LVS和iptables不能同時使用。
安裝以及配置:
首先dir上面配置兩個網卡:(192.168.116.137爲橋接的,192.168.113.128爲host-only模式)
在其餘兩臺主機上配置一個網卡,度爲host-only模式,而且和dir的host-only在同一個網段中,網關指定爲192.168.113.128。
在dir上面下載lvs:
#yum install ipvsadm
打開轉發機制: [root@localhost ~]# echo 1 >/proc/sys/net/ipv4/ip_forward #打開ipv的ip轉發機制,當前生效 [root@localhost ~]# vim /etc/sysctl.conf #打開ipv的ip轉發機制,永久生效 net.ipv4.ip_forward = 1
下來再realserver上面下載安裝httpd。並分別編輯訪問頁面爲rs1和rs2.
測試以下:
[root@localhost conf]# curl 127.0.0.1 rs 1 [root@localhost conf]#
下來就是寫規則了:
ipvsadm: 管理集羣服務 添加:-A -t|u|f service-address [-s scheduler] -t: TCP協議的集羣 -u: UDP協議的集羣 service-address: IP:PORT -f: FWM: 防火牆標記 service-address: Mark Number 修改:-E 刪除:-D -t|u|f service-address 管理集羣服務中的RS 添加:-a -t|u|f service-address -r server-address [-g|i|m] [-w weight] -t|u|f service-address:事先定義好的某集羣服務 -r server-address: 某RS的地址,在NAT模型中,可以使用IP:PORT實現端口映射; [-g|i|m]: LVS類型 -g: DR模型 -i: TUN模型 -m: NAT模型 [-w weight]: 定義服務器權重 修改:-e 刪除:-d -t|u|f service-address -r server-address 查看 -L|l -n: 數字格式顯示主機地址和端口 --stats:統計數據 --rate: 速率 --timeout: 顯示tcp、tcpfin和udp的會話超時時長 -c: 顯示當前的ipvs鏈接情況 刪除全部集羣服務 -C:清空ipvs規則 保存規則 -S # ipvsadm -S > /path/to/somefile 載入此前的規則: -R # ipvsadm -R < /path/form/somefile
我這裏在dir上面添加的規則以下:
ipvsadm -A -t 192.168.116.137:80 -s rr ipvsadm -a -t 192.168.116.137:80 -r 192.168.113.129 -m ipvsadm -a -t 192.168.116.137:80 -r 192.168.113.130 -m
而後再dir上面訪問測試頁面:
注意:ipvs是在內核中工做,下次重啓會致使服務不見了,因此要保存規則