負(fù)載均衡集群的方式設(shè)定和腳本
通過前面我們對(duì)LVS的安裝和負(fù)載均衡算法的介紹,相信大家已經(jīng)對(duì)這些輕車熟路了。那么我們現(xiàn)在就開始介紹重點(diǎn)內(nèi)容——lvs下的負(fù)載均衡集群配置問題了。那么首先是設(shè)定方式,當(dāng)然還要了解NAT的含義和它的基本架構(gòu)圖。那么具體內(nèi)容還請(qǐng)大家看下文。
理解了上述關(guān)于請(qǐng)求轉(zhuǎn)發(fā)方式和調(diào)度算法的基本概念后,就可以運(yùn)用LVS來具體實(shí)現(xiàn)幾種不同方式的負(fù)載均衡的集群系統(tǒng)。LVS的配置是通過前面所安裝的IP虛擬服務(wù)器軟件ipvsadm來實(shí)現(xiàn)的。ipvsadm與LVS的關(guān)系類似于iptables和NetFilter的關(guān)系,前者只是一個(gè)建立和修改規(guī)則的工具,這些命令的作用在系統(tǒng)重新啟動(dòng)后就消失了,所以應(yīng)該將這些命令寫到一個(gè)腳本里,然后讓它在系統(tǒng)啟動(dòng)后自動(dòng)執(zhí)行。網(wǎng)上有不少配置LVS的工具,有的甚至可以自動(dòng)生成腳本。但是自己手工編寫有助于更深入地了解,所以本文的安裝沒有利用其它第三方提供的腳本,而是純粹使用ipvsadm命令來配置。
下面就介紹一下如何配置LVS/NAT、LVS/TUN、LVS/DR方式的負(fù)載均衡集群。
設(shè)定LVS/NAT方式的負(fù)載均衡集群
NAT是指Network Address Translation,它的轉(zhuǎn)發(fā)流程是:Director機(jī)器收到外界請(qǐng)求,改寫數(shù)據(jù)包的目標(biāo)地址,按相應(yīng)的調(diào)度算法將其發(fā)送到相應(yīng)Real Server上,Real Server處理完該請(qǐng)求后,將結(jié)果數(shù)據(jù)包返回到其默認(rèn)網(wǎng)關(guān),即Director機(jī)器上,Director機(jī)器再改寫數(shù)據(jù)包的源地址,***將其返回給外界。這樣就完成一次負(fù)載調(diào)度。
構(gòu)架一個(gè)最簡(jiǎn)單的LVS/NAT方式的負(fù)載均衡集群下圖所示。
LVS/NAT方式的集群簡(jiǎn)圖
Real Server可以是任何的操作系統(tǒng),而且無需做任何特殊的設(shè)定,惟一要做的就是將其默認(rèn)網(wǎng)關(guān)指向Director機(jī)器。Real Server可以使用局域網(wǎng)的內(nèi)部IP(192.168.0.0/24)。Director要有兩塊網(wǎng)卡,一塊網(wǎng)卡綁定一個(gè)外部IP地址(10.0.0.1),另一塊網(wǎng)卡綁定局域網(wǎng)的內(nèi)部IP(192.168.0.254),作為Real Server的默認(rèn)網(wǎng)關(guān)。#p#
這里將所有LVS的配置命令寫到一個(gè)可執(zhí)行腳本中,腳本如下:
- #!/bin/bash
- # Open IP Forwarding
- echo 1 > /proc/sys/net/ipv4/ip_forward
- # To make the load balancer forward the masquerading packets
- iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -d 0.0.0.0/0 -o eth0 -j MASQUERADE
- ipvsadm -C
- # Choose the Weighted Round Robing
- ipvsadm -A -t 10.0.0.1:80 -s wrr
- # Set Real Server
- ipvsadm -a -t 10.0.0.1:80 -r 192.168.0.1:873 -m -w 2
- ipvsadm -a -t 10.0.0.1:80 -r 192.168.0.2:873 -m -w 3
- ipvsadm
將該腳本保存為/root/lvs_nat.sh,然后加上可執(zhí)行屬性,執(zhí)行它:
- # chmod a+x /root/lvs_nat.sh
- # /root/lvs_nat.sh
運(yùn)行該腳本后,一個(gè)簡(jiǎn)單的LVS/NAT方式的負(fù)載均衡集群已經(jīng)成功架設(shè)。模擬多個(gè)用戶從外界訪問10.0.0.1的80端口,用ipvsadm可以觀看到以下信息:
- # ipvsadm
- IP Virtual Server version 1.0.9 (size=4096)
- Prot LocalAddress:Port Scheduler Flags
- -> RemoteAddress:Port Forward Weight ActiveConn InActConn
- TCP 10.0.0.1:http wrr
- -> 192.168.0.1:http Masq 3 2 0
- -> 192.168.0.2:http Masq 2 1 0
其中ActiveConn表示對(duì)應(yīng)的Real Server當(dāng)前有多少個(gè)正在活動(dòng)的連接,InActConn表示不活動(dòng)的連接數(shù)。從這里我們可以看到有3個(gè)HTTP請(qǐng)求,被分別分配在不同的Real Server上,表明這個(gè)負(fù)載均衡集群正在成功運(yùn)行中。
本例完成了這樣一個(gè)簡(jiǎn)單的LVS/NAT集群,由此可以看出,LVS/NAT方式實(shí)現(xiàn)起來最為簡(jiǎn)單,而且Real Server使用的是內(nèi)部IP,可以節(jié)省Real IP的開銷。但因?yàn)閳?zhí)行NAT需要重寫流經(jīng)Director的數(shù)據(jù)包,在速度上有一定延遲;另外,當(dāng)用戶的請(qǐng)求非常短,而服務(wù)器的回應(yīng)非常大的情況下,會(huì)對(duì)Director形成很大壓力,成為新的瓶頸,從而使整個(gè)系統(tǒng)的性能受到限制。