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

Linux負載均衡軟件LVS的配置

日期:2017/3/3 16:22:14   编辑:關於Linux

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

一、 Director Server的配置

在Director Server上配置LVS負載均衡集群,有兩種方法:

通過ipvsadm命令行進行配置

通過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的狀態!

本文出自 “技術成就夢想” 博客,請務必保留此出處http://ixdba.blog.51cto.com/2895551/554799

Copyright © Linux教程網 All Rights Reserved