歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux負載均衡軟件LVS配置篇

Linux負載均衡軟件LVS配置篇

日期:2017/2/27 16:05:25   编辑:Linux教程

LVS集群有DR、TUN、NAT三種配置模式,可以對www服務、FTP服務、MAIL服務等做負載均衡,下面通過搭建www服務的負載均衡實例,講述基於DR模式的LVS集群配置。

一、 Director Server的配置

在Director Server上配置LVS負載均衡集群,有兩種方法:
1) 通過ipvsadm命令行進行配置
2) 通過Redhat提供的工具piranha來配置LVS

1、通過ipvsadm命令行方式配置LVS

安裝IPVS後,就可以配置LVS集群了,首先在Director Server上綁定一個虛擬IP(也叫VIP),此IP用於對外提供服務,執行如下命令:

[root@localhost ~]#ifconfig eth0:0 192.168.60.200 broadcast 192.168.60.200 netmask 255.255.255.255 up

此處在eth0設備上綁定了一個虛擬設備eth0:0,同時設置了一個虛擬IP是192.168.60.200,也就是上面我們規劃的IP地址,然後指定廣播地址也為192.168.60.200,需要特別注意的是,這裡的子網掩碼為255.255.255.255。
然後給設備eth0:0指定一條路由,執行如下指令:

[root@localhost ~]#route add -host 192.168.60.200 dev eth0:0 


接著啟用系統的包轉發功能,從而使系統充當路由器,執行如下指令:

[root@localhost ~]#echo "1" >/proc/sys/net/ipv4/ip_forward

指令中,參數值為1時啟用ip轉發,為0時禁止ip轉發。其實在DR模式中,開啟系統的包轉發功能不是必須的,而在NAT模式下此操作是必須的。
然後開始配置ipvs,執行如下操作:

[root@localhost ~]#ipvsadm -C
[root@localhost ~]#ipvsadm -A -t 192.168.60.200:80 -s rr -p 600
[root@localhost ~]#ipvsadm -a -t 192.168.60.200:80 -r 192.168.60.132:80 -g
[root@localhost ~]#ipvsadm -a -t 192.168.60.200:80 -r 192.168.60.144:80 -g

上面操作中,第一行是清除內核虛擬服務器列表中的所有記錄,第二行是添加一條新的虛擬IP記錄。這個新的IP是192.168.60.200,同時指定持 續服務時間為600秒。第三、四行是在新加虛擬IP記錄中添加兩條新的Real Server記錄,並且指定LVS 的工作模式為直接路由模式。
最後,啟動LVS服務,執行如下操作:

[root@localhost ~]#ipvsadm

這樣,LVS在Director Server上的配置就完成了。
為了管理和配置的方便,可以將上面的操作寫出一個腳本文件,腳本內容如下:

#!/bin/bash
VIP=192.168.60.200
RIP1=192.168.60.132
RIP2=192.168.60.144
GW=192.168.60.1
# set the Virtual IP Address
/sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev eth0:0 
echo "1" >/proc/sys/net/ipv4/ip_forward
#Clear IPVS table
/sbin/ipvsadm -C
#set LVS
/sbin/ipvsadm -A -t $VIP:80 -s rr -p 600
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
#Run LVS
/sbin/ipvsadm
#end


也可以寫成可啟動與停止的服務腳本,腳本內容如下:

#!/bin/sh
# description: Start LVS of Director server
VIP=192.168.60.200
RIP1=192.168.60.132
RIP2=192.168.60.144
./etc/rc.d/init.d/functions
case "$1" in
    start)
        echo " start LVS of Director Server"
# set the Virtual  IP Address and sysctl parameter
 /sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
       echo "1" >/proc/sys/net/ipv4/ip_forward
#Clear IPVS table
       /sbin/ipvsadm -C
#set LVS
/sbin/ipvsadm -A -t $VIP:80 -s rr -p 600
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
#Run LVS
      /sbin/ipvsadm
       ;;
    stop)
        echo "close LVS Directorserver"
        echo "0" >/proc/sys/net/ipv4/ip_forward
        /sbin/ipvsadm -C
        /sbin/ifconfig eth0:0 down
        ;;
    *)
        echo "Usage: $0 {start|stop}"
        exit 1
esac


將此腳本命名為lvsDR文件,然後把文件放到/etc/init.d下,執行:

[root@localhost ~]#chomd 755 /etc/init.d/lvsDR

最後可以通過下面命令啟動或停止LVS服務:

service lvsDR {start|stop}

到此為止,命令行方式配置Director Server完畢。

2、通過Redhat提供的工具piranha來配置LVS

Piranha是REDHAT提供的一個基於Web的LVS配置軟件,可以省去手工配置LVS的繁瑣工作,同時,也可單獨 提供cluster功能,例如,可以通過Piranha激活Director Server的後備主機,也就是配置Director Server的雙機熱備功能。
Piranha工具的安裝非常簡單,下載Piranha的rpm包,進行安裝即可:

[root@localhost ~]#rpm –ivh piranha-0.8.2-1.i386.rpm


Piranha安裝完畢後,會產生/etc/sysconfig/ha/lvs.cf文件,默認此文件是空的,可以通過Piranha提供的web界面配置此文件,也可以直接手動編輯此文件,編輯好的lvs.cf文件內容類似如下,注意,“#”號後面的內容為注釋。

[root@localhost ~]# more /etc/sysconfig/ha/lvs.cf
serial_no = 18              #序號。
primary = 192.168.60.56     #指定主Director Server的真實IP地址,是相對與有備用的Director Server而言的,也就是給Director Server做HA Cluster。
service = lvs               #指定雙機的服務名。
backup_active = 0        #是否激活備用Director Server。“0”表示不激活,“1”表示激活。
backup = 0.0.0.0             #這裡指定備用Director Server的真實IP地址,如果沒有備用Director Server,可以用“0.0.0.0”代替。
heartbeat = 0             #是否開啟心跳,1表示開啟,0表示不開啟。
heartbeat_port = 539      #指定心跳的UDP通信端口。
keepalive = 5               #心跳間隔時間,單位是秒。
deadtime = 10                #如果主Director Server在deadtime(秒)後沒有響應,那麼備份Director
Server就會接管主Director Server的服務。
network = direct            #指定LVS的工作模式,direct表示DR模式,nat表示NAT模式,tunnel表示TUNL模式。
debug_level = NONE          #定義debug調試信息級別。
virtual www.gaojf.com{      #指定虛擬服務的名稱。
active = 1        #是否激活此服務。
address = 192.168.60.200 eth0:0  #虛擬服務綁定的虛擬IP以及網絡設備名。
port = 80                   #虛擬服務的端口。
send = "GET / HTTP/1.0\r\n\r\n"  #給real server發送的驗證字符串。
expect = "HTTP"             #服務器正常運行時應該返回的文本應答信息,用來判斷real server是否工作正常。
use_regex = 0               # expect選項中是否使用正則表達式,0表示不使用,1表示使用。
load_monitor = none         #LVS中的Director Server能夠使用 rup 或 ruptime 來監視各個real server的負載狀態。該選項有3個可選值,rup、ruptime和none,如果選擇rup,每個real server就必須運行rstatd服務。如果選擇了ruptime,每個real server就必須運行 rwhod 服務。
scheduler = rr              #指定LVS的調度算法。
protocol = tcp              #虛擬服務使用的協議類型。
timeout = 6                 #real server失效後從lvs路由列表中移除失效real server所必須經過的時間,以秒為單位。
reentry = 15                #某個real server被移除後,重新加入lvs路由列表中所必須經過的時間,以秒為單位。
quiesce_server = 0          #如果此選項為1.那麼當某個新的節點加入集群時,最少連接數會被重設
為零,因此LVS會發送大量請求到此服務節點,造成新的節點服務阻塞,
建議設置為0。
server RS1 {                #指定real server服務名。
address = 192.168.60.132    #指定real server的IP地址。
active = 1                  #是否激活此real server服務。
weight = 1                   #指定此real server的權值,是個整數值,權值是相對於所有real server節點而言的,權值高的real server處理負載的性能相對較強。
}
server RS2 {
address = 192.168.60.144
active = 1
weight = 1
}
}

編輯完成,然後啟動pulse服務,即啟動lvs服務

[root@localhost ~]#service pulse start

同理,此種方式下也要啟用系統的包轉發功能:

[root@localhost ~]#echo "1" >/proc/sys/net/ipv4/ip_forward

到此為止,Piranha工具方式配置Director Server完畢。

二、Real server 的配置

在lvs的DR和TUn模式下,用戶的訪問請求到達真實服務器後,是直接返回給用戶的,而不再經過前端的Director Server,因此,就需要在每個Real server節點上增加虛擬的VIP地址,這樣數據才能直接返回給用戶,增加VIP地址的操作可以通過創建腳本的方式來實現,創建文件/etc /init.d/lvsrs,腳本內容如下:

#!/bin/bash
VIP=192.168.60.200
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
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
sysctl -p
#end

此操作是在回環設備上綁定了一個虛擬IP地址,並設定其子網掩碼為255.255.255.255,與Director Server上的虛擬IP保持互通,然後禁止了本機的ARP請求。

上面腳本也可以寫成可啟動與停止的服務腳本,內容如下:

[root@localhost ~]#more /etc/init.d/lvsrs
#!/bin/bash
#description : Start Real Server
VIP=192.168.60.200
./etc/rc.d/init.d/functions
case "$1" in
    start)
        echo " Start LVS  of  Real Server"
 /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
        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
        ;;
    stop)
        /sbin/ifconfig lo:0 down
        echo "close LVS Director server"
        echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
        echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
        echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
        echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
        ;;
    *)
        echo "Usage: $0 {start|stop}"
        exit 1
esac


然後,修改lvsrs有可執行權限:

[root@localhost ~]#chomd 755 /etc/init.d/lvsrs

最後,可以通過下面命令啟動或關閉lvsrs

service lvsrs {start|stop}

由於虛擬ip,也就是上面的VIP地址,是Director Server和所有的Real server共享的,如果有ARP請求VIP地址時,Director Server與所有Real server都做應答的話,就出現問題了,因此,需要禁止Real server響應ARP請求。而lvsrs腳本的作用就是使Real Server不響應arp請求。
對於2.4以下低版本,在Real Server上要安裝ARP hidden內核補丁,幸運的是,在2.6內核中通過調整內核參數即可忽略ARP廣播回應。

三、在Director上配置冗余策略 Ldirectord

Ldirectord的作用是監測Real Server,當Real Server失效時,把它從虛擬服務器列表中刪除,恢復時重新添加到列表,在前面文章介紹heartbeat時默認已經安裝了Ldirectord,因 此。這裡只需進行配置即可。Ldirectord的配置文件是/etc/ha.d/ldirectord.cf。
下面是需要配置的選項,注意,“#”號後面的內容為注釋:
# Global Directives
checktimeout=20 #判定real server出錯的時間間隔。
checkinterval=10 #指定ldirectord在兩次檢查之間的間隔時間。
fallback=127.0.0.1:80 #當所有的real server節點不能工作時,web服務重定向的地址。
autoreload=yes #是否自動重載配置文件,選yes時,配置文件發生變化,自動載入配置信息。
logfile="/var/log/ldirectord.log" #設定ldirectord日志輸出文件路徑。
quiescent=no #當選擇no時,如果一個節點在checktimeout設置的時間周期內沒有響應,ldirectord將會從LVS的路由表中直接移除real server,此時,將中斷現有的客戶端連接,並使LVS丟掉所有的連接跟蹤記錄和持續連接模板,如果選擇為yes,當某個real server失效時,ldirectord將失效節點的權值設置為0,新的連接將不能到達,但是並不從LVS路由表中清除此節點,同時,連接跟蹤記錄和程 序連接模板仍然保留在Director上。
注意:以上幾行為ldirectord.cf文件的“全局”設置,它們可以應用到下面多個虛擬主機,下面是每個虛擬主機的配置。
# Sample for an http virtual service
virtual=192.168.60.200:80 #指定虛擬的IP地址和端口號,注意,在virtual行後面的行必
須縮進4個空格或以一個tab字符進行標記。
real=192.168.60.132:80 gate #指定Real Server服務器地址和端口,同時設定LVS工作模式,
用gate表示DR模式,ipip表示TUNL模式,masq表示NAT模式。
real=192.168.60.144:80 gate
fallback=127.0.0.1:80 gate
service=http #指定服務的類型,這裡是對http服務做負載均衡。
request="index.html" #ldirectord將根據指定的Real Server地址,結合該選項給出
的請求路徑,發送訪問請求,檢查Real Server上的服務是否正
常運行,確保這裡給出的頁面地址是可訪問的,不然ldirectord
會誤認為此節點已經失效,發生錯誤監控現象。
receive="Test Page" #指定請求和應答字串。
scheduler=rr #指定調度算法,這裡是rr(輪叫)算法。
protocol=tcp #指定協議的類型,LVS支持TCP和UDP協議。
checktype=negotiate #指定Ldirectord的檢測類型,默認為negotiate。
checkport=80 #指定監控的端口號。
virtualhost=www.gaojf.com #虛擬服務器的名稱,隨便指定。
配置完畢,就可以執行如下命令啟動或關閉ldirectord服務

/etc/init.d/ldirectord {start|stop}

Ldirectord的核心作用是監控Real Server節點狀態,同時,它還能調用ipvsadm自動創建LVS路由表,這點從ldirectord.cf中可以看出,
這裡需要說明的是,ldirectord和Piranha都具有監控Real Server的功能,如果要通過ldirectord監控節點狀態,只需啟動ldirectord服務,整個集群系統就可以運行起來,而無需執行上面我們 配置的LVS腳本,因為ldirectord會自動調用ipvsadm創建LVS路由表,而我們上面講述的利用ipvsadm命令行方式配置LVS,是為 了讓讀者能更深入的了解ipvsadm的實現細節和實現機制。
如果是通過Piranha工具配置LVS,就無需使用ldirectord,Piranha工具對應的系統進程是pluse,此進程也會自動調用ipvsadm創建LVS路由表,同時會利用自身的nanny守護進程監控real server的狀態!

Copyright © Linux教程網 All Rights Reserved