LVS-DR實現

結構如圖所示

LVS-DR實現

環境準備:

            RS1:192.168.27.144
            RS1_VIP:10.0.0.100
            RS2:192.168.27.145
            RS2_VIP:10.0.0.100
            VS-DIP:192.168.27.105
            VS-VIP:10.0.0.100
    此處的router也是Linux服務器:
            router_eth0   192.168.27.200
            router_eth0:1 10.0.0.200
            router_eth1   172.20.0.200

1 配置CIP地址

        vim /etc/sysconfig/network-scripts/ifcfg-eth1
                DEVICE=eth1
                IPADDR=172.20.0.101
                GATEWAY=172.20.0.200

2 配置router的IP地址:

    vim /etc/sysconfig/network-scripts/ifcfg-eth0
              IPADDR=192.168.27.200
                NETMASK=255.255.255.0
    vim /etc/sysconfig/network-scripts/ifcfg-eth1
                DEVICE=eth1
                IPADDR=172.20.0.200
    cd /etc/sysconfig/network-scripts/
    cp ifcfg-eth0 ifcfg-eth0:1
                IPADDR=10.0.0.200                             #複製後更改如下兩行;
                PREFIX=8

3 配置VS服務器IP地址:

            IPADDR=192.168.27.105
            NETMASK=255.255.255.0
            GATEWAY=192.168.27.200

編寫名稱爲lvs_dr_vs的腳本,內容如下

            #!/bin/bash
            vip='10.0.0.100'
            iface='ens37:1'
            mask='255.0.0.0'
            port='80'
            rs1='192.168.27.144'
            rs2='192.168.27.145'
            scheduler='wrr'
            type='-g'
            rpm -q ipvsadm &> /dev/null || yum -y install ipvsadm &> /dev/null

            case $1 in
            start)
                ifconfig $iface $vip netmask $mask #broadcast $vip up
                iptables -F
                ipvsadm -A -t ${vip}:${port} -s $scheduler
                ipvsadm -a -t ${vip}:${port} -r ${rs1} $type -w 1
                ipvsadm -a -t ${vip}:${port} -r ${rs2} $type -w 3
                echo "The VS Server is Ready!"
                ;;
            stop)
                ipvsadm -C
                ifconfig $iface down
                echo "The VS Server is Canceled!"
                ;;
            *)
                echo "Usage: $(basename $0) start|stop"
                exit 1
                ;;
            esac
    bash lvs_dr_vs.sh start                                  #執行腳本

4 配置RS服務器的地址以及腳本;

vim /etc/sysconfig/network-scripts/ifcfg-eth0
                IPADDR=192.168.27.144
                NETMASK=255.255.255.0
                GATEWAY=192.168.27.200

編寫名稱爲lvs_dr_vs.sh的腳本,內容如下

                #!/bin/bash
                vip=10.0.0.100
                mask='255.0.0.0'
                dev=lo:1
                case $1 in
                start)
                    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
                    echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
                    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
                    echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
                    ifconfig $dev $vip netmask $mask #broadcast $vip up
                    #route add -host $vip dev $dev
                    echo "The RS Server is Ready!"
                    ;;
                stop)
                    ifconfig $dev down
                    echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
                    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
                    echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
                    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
                    echo "The RS Server is Canceled!"
                    ;;
                *) 
                    echo "Usage: $(basename $0) start|stop"
                    exit 1
                    ;;
                esac
    bash lvs_dr_vs.sh start                           #執行腳本

5 第二臺RS服務器與第一臺一樣;

vim /etc/sysconfig/network-scripts/ifcfg-eth0
                IPADDR=192.168.27.145
                NETMASK=255.255.255.0
                GATEWAY=192.168.27.200

編寫名稱爲lvs_dr_vs的腳本,內容如下

                #!/bin/bash
                vip=10.0.0.100
                mask='255.0.0.0'
                dev=lo:1
                case $1 in
                start)
                    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore                  #忽略arp廣播,不給予迴應
                    echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
                    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce                #儘量避免將接口信息向非直接連接網絡進行通告
                    echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
                    ifconfig $dev $vip netmask $mask #broadcast $vip up
                    #route add -host $vip dev $dev
                    echo "The RS Server is Ready!"
                    ;;
                stop)
                    ifconfig $dev down
                    echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
                    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
                    echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
                    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
                    echo "The RS Server is Canceled!"
                    ;;
                *) 
                    echo "Usage: $(basename $0) start|stop"
                    exit 1
                    ;;
                esac

            bash lvs_dr_vs.sh start                               #執行腳本

6 在客戶端訪問驗證即可;(默認支持長連接模式)

實現LVS-DR的https調度

1 在RS服務器分別操作

        yum install mod_ssl                   #此處使用自定義證書,安裝這個包就附帶證書

2 安裝完成後重啓httpd服務

            systemctl restart httpd               #重啓後會發現多了一個443的端口

3 在VS服務器上操作,添加集羣443端口

            ipvsadm -A -t 10.0.0.100:443 -s rr 
            ipvsadm -a -t 10.0.0.100:443 -r 192.168.27.144:443 -g         #-g代表dr模式
            ipvsadm -a -t 10.0.0.100:443 -r 192.168.27.145:443 -g

4 在CIP的服務器上面進行測試

            curl -k https://10.0.0.100

5 此時在VS服務器上面就有兩個VS集羣策略,內容如下

        IP Virtual Server version 1.2.1 (size=4096)
        Prot LocalAddress:Port Scheduler Flags
          -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
        TCP  10.0.0.100:80 wrr
          -> 192.168.27.144:80            Route   1      0          0         
          -> 192.168.27.145:80            Route   3      0          0         
        TCP  10.0.0.100:443 rr
          -> 192.168.27.144:443           Route   1      0          0         
          -> 192.168.27.145:443           Route   1      0          0   

1 問題:http協議與https協議本質上就是一個服務,但lvs根據端口號區分,所以要分別訪問分別調度

  解答:將80端口和443端口貼上同一個標籤,使用以下命令
    1 在VS服務器上操作
 iptables -t mangle -A PREROUTING -d 10.0.0.100 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 10
        #-t:指定防火牆表,打標籤要指定mangle表
        #-A:指定防火牆鏈,VS服務器要轉發請求
        #-d:目標IP地址,此處爲VIP地址
        #-p:指定協議類型
        #-m multiport:表示啓用多端口擴展
        #MARK --set-mark:使用標籤並且更改標籤值爲10

  2 ipvsadm -A -f 10 -s rr
        #-A:設置集羣環境
        #-f:使用標籤模式
        #10:標籤名稱
        #-s:指定算法類型
    ipvsadm -a -f 10 -r 192.168.27.144 -g
    ipvsadm -a -f 10 -r 192.168.27.145 -g

  3 ipvsadm -ln          #查看策略會顯示以下內容
      IP Virtual Server version 1.2.1 (size=4096)
      Prot LocalAddress:Port Scheduler Flags
        -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
      FWM  10 rr
        -> 192.168.27.144:0             Route   1      0          0         
        -> 192.168.27.145:0             Route   1      0          0         

2 問題:客戶端的第一次請求到達後端某一個RS服務器之後,在接下來的訪問中希望響應的服務器是第一次響應的那臺,或者在多長時間內響應的服務器始終唯一

  解答:實現持久連接;(持久連接:在一定時間內,同一個客戶端發來的請求始終爲一臺服務器響應,與調度算法無關,默認360秒)
    1 在VS服務器上操作,接着上面的問題繼續操作;
        ipvsadm -E -f 10 -s rr -p [timeout]
            #-p:開啓持久連接,後面也可以手動指定時間[timeout]

        ipvsadm -ln                    #再次查看,就會多出"persistent 360"的字樣
            IP Virtual Server version 1.2.1 (size=4096)
            Prot LocalAddress:Port Scheduler Flags
              -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
            FWM  10 rr persistent 360
              -> 192.168.27.144:0             Route   1      0          0         
              -> 192.168.27.145:0             Route   1      0          0         

    2 每客戶端持久:端口寫0,無論什麼端口都往同一個地點調度
        1 ipvsadm -A -t 10.0.0.100:0 -s rr -p
          ipvsadm -a -t 10.0.0.100:0 -r 192.168.27.144 -g
          ipvsadm -a -t 10.0.0.100:0 -r 192.168.27.145 -g
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章