Linux集羣架構(2)LVS介紹、LVS的調度算法、NAT模式搭建、 DR模式、keepalive

             負載均衡集羣介紹

blob.png

                LVS介紹

blob.png


1.LVS NAT模式:(,目標ip轉發。適用於小型集羣,機器數量不多10臺左右)

blob.png


2.LVS IP Tunnel模式(將目標ip進行更改)

blob.png

(在這個模式下的rs機器都是配置有公網ip)

3.LVS DR模式(把數據包的MAC地址修改)

blob.png

NAT模式適合小型集羣,機器在10臺左右。其優勢是節省公網ip。 IP TUNNEL和DR

相差不大,能使用在較大的集羣模式下,但是每臺rs服務器都要配置有公網ip,這樣會比較浪費公網ip,費錢。


        LVS的調度算法

blob.png

常用的算法是前四種:rr 、wrr 、 lc 、wlc。



                LVS NAT模式搭建

  準備工作:

blob.png


1.準備三臺機器(我是從第二臺直接克隆的)

(1)修改第三臺克隆機的ip

blob.png

修改完重啓服務:

blob.png

(2)修改克隆集主機名:

 hostnamectl set-hostname cansheng3


2.將分發器,也叫調度器(簡寫爲dir)機器(133)添加多一塊網卡:

(因爲之前已經配置有了ens37)

blob.png

這個ens37的網卡是僅主機模式

blob.png

同時查看到這個網卡的子網ip網段是192.168.243.0

blob.png

(1)所以對這個ens37設置ip:

vim /etc/sysconfig/network-scripts/ifcfg-ens37

blob.png

修改完後重啓網絡服務:

systemctl  restart network

blob.png

(2)檢測ip是否能ping通:(在window的終端下測試)

ping 192.168.243.144

blob.png


3.修改兩臺rs(真實服務器)網關(要和dir分發器的內網一致)

blob.png

vim /etc/sysconfig/network-scripts/ifcfg-ens33 

blob.png

!!當這兩臺機器rs的網關修改成dir內網的ip時則不能上網。

修改完後重啓服務和查看網關

systemctl restart network

route -n

blob.png


       

4.三臺機器上都執行執行 


 (1)systemctl stop firewalld; 

     systemc disable firewalld

(2)yum install -y iptables-services

 (3)systemctl start  iptables

 (4)iptables -F; 

 (5)service iptables save 

關閉selinux

vim /etc/selinux/config

blob.png

(如果在使用yum下載的時候發現很慢,則先吧rpel改了名字再下載,需要用到rpel

再把名字改回來

blob.png

mv /etc/yum.repos.d/epel.repo  /etc/yum.repos.d/epel.repo1

)


            

       開始 NAT模式搭建

1.只要在分發器dir上安裝ipvsadm  (實現lvs功能的重要工具)

 yum install -y ipvsadm

blob.png

2.在dir上編寫腳本,vim /usr/local/sbin/lvs_nat.sh//內容如下

(寫這個腳本是爲了更快執行所需命令,不寫則下列命令每行執行一次)

#! /bin/bash

# director 服務器上開啓路由轉發功能(對內核實現轉發)

echo 1 > /proc/sys/net/ipv4/ip_forward

# 關閉icmp的重定向

echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects

echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects

# 注意區分網卡名字,我的兩個網卡分別爲ens33和ens37(根據自己的網卡名設定)

echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects

echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects

# director 設置nat防火牆

iptables -t nat -F

iptables -t nat -X

iptables -t nat -A POSTROUTING -s 192.168.136.0/24  -j MASQUERADE  //實現讓同網段的內網實現上網

# director設置ipvsadm

IPVSADM='/usr/sbin/ipvsadm'

$IPVSADM -C   //清空ipvsadm規則

$IPVSADM -A -t 192.168.243.144:80 -s lc -p 3  //添加一個規則,並指定調度算法爲lc ,-p指定超時時間(單位秒,建議不加) 

$IPVSADM -a -t 192.168.243.144:80 -r 192.168.136.134:80 -m -w 1 //-m:表示NAT模式;-i:ip Tunnel;-g:DR模式-w:表示權重

$IPVSADM -a -t 192.168.243.144:80 -r 192.168.136.135:80 -m -w 1  //-a:添加rs;-t:TCP

(-p的設置會是請求在指定的時間內請求在同一臺rs上)
blob.png

寫完腳本執行一下:

sh /usr/local/sbin/lvs_nat.sh

(執行腳本任何輸出表示正確)


       NAT模式效果測試

 blob.png

1. 兩臺rs上都安裝nginx,並開啓服務


2.設置兩臺rs的主頁,做一個區分,也就是說直接curl兩臺rs的ip時,得到不同的結

A:對rs1機器操作

> /usr/share/nginx/html/index.html (清空文件內容)

vim /usr/share/nginx/html/index.html

blob.png

B:對rs2機器操作:

> /usr/share/nginx/html/index.html (清空文件內容)

vim /usr/share/nginx/html/index.html

blob.png

3. 瀏覽器裏訪問192.168.243.144,多訪問幾次看結果差異

瀏覽器中輸入公網ip

blob.png

使用curl測試:curl 192.168.243.144 

blob.png

(可看出請求均衡在兩臺rs上)

使用命令 ipvadm -ln 可以看到相應的規則

blob.png


      DR模式搭建

(在生產環境中,使用較多的是DR模式,但是使用公網ip資源大。

在生產中也可以搭建一個內網,使用一個公網ip,映射到公網的VIP上,從而減少公網資金支出

)


  準備工作

blob.png


把上面實驗的兩臺rs的網關修改回來

blob.png


DR模式搭建 

blob.png

1.dir上編寫腳本 vim /usr/local/sbin/lvs_dr.sh //內容如下

#! /bin/bash

echo 1 > /proc/sys/net/ipv4/ip_forward

ipv=/usr/sbin/ipvsadm

vip=192.168.136.200

rs1=192.168.136.134

rs2=192.168.136.135

#注意這裏的網卡名字

ifdown ens33

ifup ens33

ifconfig ens33:2 $vip broadcast $vip netmask 255.255.255.255 up

route add -host $vip dev ens33:2

$ipv -C

$ipv -A -t $vip:80 -s wrr

$ipv -a -t $vip:80 -r $rs1:80 -g -w 1

$ipv -a -t $vip:80 -r $rs2:80 -g -w 1


blob.png


執行腳本:sh /usr/local/sbin/lvs_dr.sh

blob.png

(這個提示是正常的。因爲我們執行了ifdown 和ifup)


2.兩臺rs上也編寫腳本 vim /usr/local/sbin/lvs_rs.sh//內容如下

#/bin/bash

vip=192.168.136.200

#把vip綁定在lo上,是爲了實現rs直接把結果返回給客戶端

ifdown lo

ifup lo

ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up

route add -host $vip lo:0

#以下操作爲更改arp內核參數,目的是爲了讓rs順利發送mac地址給客戶端

#參考文檔www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html

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


blob.png

兩臺rs都執行腳本: sh /usr/local/sbin/lvs_rs.sh


    檢測VIP 

    ip addr

blob.png



3.測試:

blob.png

測試最好是用另外一臺不同ip網段的虛擬機測試最好。

(當我們的訪問量很大時,自然起到均衡的作用。)



        keepalived+ lvs

(在LVS架構中,NAT和DR模式,當後端的RS宕機時,調度器依然會把請求轉發到宕機的RS上。使用keepalived可以解決此問題,keepalived能實現高可用和負載均衡)

blob.png

blob.png

一般的情況下,使用這個keepalived做負載均衡,首先就是要做高可用再做負載均衡

所以最少要準備四臺機器:兩臺做keepalived,兩臺作爲真實機器

(本次實驗用三臺機器

dir(安裝keepalived)136.133

 rs1 136.134

 rs2 133.135

 vip 133.200



步驟

(在實驗之前,我們甚至是不需要使用ipvsadm 即可ipvsadm -c 卸載)

1. 編輯keepalived配置文件: 

vim /etc/keepalived/keepalived.conf  (先把之前內容清空)

/內容請到https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/lvs_keepalived.conf 獲取

內容:

vrrp_instance VI_1 {

    #備用服務器上爲 BACKUP

    state MASTER

    #綁定vip的網卡爲ens33,你的網卡和阿銘的可能不一樣,這裏需要你改一下

    interface ens33

    virtual_router_id 51

    #備用服務器上爲90

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass aminglinux

    }

    virtual_ipaddress {      #虛擬ip:VIP

        192.168.136.200

    }

}

virtual_server 192.168.136.200 80 {  #端口根據具體監控的端口確定

    #(每隔10秒查詢realserver狀態)

    delay_loop 10

    #(lvs 算法)

    lb_algo wlc

    #(DR模式)

    lb_kind DR

    #(同一IP的連接60秒內被分配到同一臺realserver)

    persistence_timeout 60

    #(用TCP協議檢查realserver狀態)

    protocol TCP

    real_server 192.168.136.134 80 {

        #(權重)

        weight 100

        TCP_CHECK {

        #(10秒無響應超時)

        connect_timeout 10

        nb_get_retry 3

        delay_before_retry 3

        connect_port 80

        }

    }

    real_server 192.168.136.135 80 {

        weight 100

        TCP_CHECK {

        connect_timeout 10

        nb_get_retry 3

        delay_before_retry 3

        connect_port 80

        }

     }

}


添加完內容後: 啓動keepalived服務

systemctl start keepalived 

blob.png

2.其他兩臺真實機器rs的nginx服務要啓動起來

systemctl start nginx 

同時也要把之前的vip清空掉:systemctl restart network


3.使用 ipvsadm -ln :可以查看到設定的VIP和兩臺rs機器

blob.png

此時我們嘗試着把氣筒一臺或兩臺rs機器的nginx服務停止,可以發現

keepalived會把宕機的rs機器踢出,這樣就可以保證到,當rs真實服務器

宕機後,請求不在發送到其上。

(1)停掉rs1機器後的效果:

blob.png


(2)把兩臺的rs機器都停了

blob.png


當我們把rs機器再次啓動的時候,keepalived會自動的把負載的機器添加回來


!!!!使用keepalived+LVS DR需要注意的事項.

(1)兩臺rs上,依然要執行/usr/local/sbin/lvs_rs.sh腳本

 兩臺rs上也編寫腳本 vim /usr/local/sbin/lvs_rs.sh//內容如下

#/bin/bash

vip=192.168.136.200

#把vip綁定在lo上,是爲了實現rs直接把結果返回給客戶端

ifdown lo

ifup lo

ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up //命令行下添加ip。臨時添加,重啓失去


route add -host $vip lo:0

#以下操作爲更改arp內核參數,目的是爲了讓rs順利發送mac地址給客戶端

#參考文檔www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html

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

 分別在dir上和兩個rs上執行這些腳本


(2)在dir分發器需執行

blob.png

執行:echo 1 >/proc/sys/net/ipv4/ip_forward


瀏覽器測試:

blob.png

blob.png




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