lvs的nat模式

lvs的nat圖解:

lvs的nat模式和dr模式的主要的差別就是nat模式的調度器要負責消息的接收和發送,而dr模式中的調度器只需要負責消息的接收,至於消息的發送直接有後面的realserver直接返回給客戶端;


需要遵循以下規則:(dir爲調度器的ip,rip爲realserver的ip)

1.調度器中的dip和rip要在同一個網絡中,如果Dip和rip不在同一網絡中,就不能將報文送達到realserver,同時realserver的網關要設置爲和Dip一樣的網關,否則報文從realserver無法到達DIP

2.Rip通常爲私有地址,僅能和集羣節點中(Dip通信)。

3.Director位於clientrealserver之間,處理進去的所有通信。

4.Realserver必須將網關指向Dip

5.Director支持端口映射。向外提供服務的端口和realserver的端口可能不一致。

Realserver可以使用任意操作系統,只用directorlinux就可以。


lvs的工作模式和iptables的工作模式有相似之處:

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機制的,所以LVSiptables不能同時使用。



安裝以及配置:

首先dir上面配置兩個網卡:(192.168.116.137爲橋接的,192.168.113.128爲host-only模式)

image.png

在其他兩臺主機上配置一個網卡,度爲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上面訪問測試頁面:

image.png


注意:ipvs是在內核中工作,下次重啓會導致服務不見了,所以要保存規則


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章