虛擬機(jī)CentOS搭建LVS-DR負(fù)載均衡
編輯:狂族晨曦 來源:系統(tǒng)運(yùn)維,經(jīng)驗(yàn)雜筆 日期:2016-07-30 閱讀: 5,122 次 10 條評(píng)論 » 百度已收錄
先森工作三個(gè)星期了,從最初的基礎(chǔ)命令學(xué)習(xí),到基礎(chǔ)環(huán)境搭建,再到現(xiàn)在的高可用負(fù)載均衡集群搭建,都通通過了一遍,下周也要開始接觸現(xiàn)網(wǎng)服務(wù)器了。在這三周,做的東西都越來越難,越來越麻煩,LVS就是其中之一。
LVS是Linux Virtual Server的簡(jiǎn)稱,也就是Linux虛擬服務(wù)器, 是一個(gè)由章文嵩博士發(fā)起的自由軟件項(xiàng)目。章文嵩博士曾是阿里巴巴副總裁、技術(shù)總監(jiān)等,現(xiàn)任滴滴出行副總裁。LVS有三種負(fù)載均衡模式,分別是LVS-DR、LVS-TUN、LVS-NAT。讓先森郁悶的是,先森用虛擬機(jī)除了LVS-DR模式,LVS-TUN和LVS-NAT先森都沒有搭建成功。
LVS體系結(jié)構(gòu)
首先需要普及一下LVS的體系結(jié)構(gòu)。

LVS體系結(jié)構(gòu)圖
使用LVS架設(shè)的服務(wù)器集群系統(tǒng)有三個(gè)部分組成:
最前端的負(fù)載均衡層,用Load Balancer表示。Load Balancer層:位于整個(gè)集群系統(tǒng)的最前端,有一臺(tái)或者多臺(tái)負(fù)載調(diào)度器(Director Server)組成,LVS模塊就安裝在Director Server上,而Director的主要作用類似于一個(gè)路由器,它含有完成LVS功能所設(shè)定的路由表,通過這些路由表把用戶的請(qǐng)求分發(fā)給Server Array層的應(yīng)用服務(wù)器(Real Server)上。同時(shí),在Director Server上還要安裝對(duì)Real Server服務(wù)的監(jiān)控模塊Ldirectord,此模塊用于監(jiān)測(cè)各個(gè)Real Server服務(wù)的健康狀況。在Real Server不可用時(shí)把它從LVS路由表中剔除,恢復(fù)時(shí)重新加入。
中間的服務(wù)器群組層,用Server Array表示。Server Array層:由一組實(shí)際運(yùn)行應(yīng)用服務(wù)的機(jī)器組成,Real Server可以是WEB服務(wù)器、MAIL服務(wù)器、FTP服務(wù)器、DNS服務(wù)器、視頻服務(wù)器中的一個(gè)或者多個(gè),每個(gè)Real Server之間通過高速的LAN或分布在各地的WAN相連接。在實(shí)際的應(yīng)用中,Director Server也可以同時(shí)兼任Real Server的角色。
最底端的數(shù)據(jù)共享存儲(chǔ)層,用Shared Storage表示。Shared Storage層:是為所有Real Server提供共享存儲(chǔ)空間和內(nèi)容一致性的存儲(chǔ)區(qū)域,在物理上,一般有磁盤陣列設(shè)備組成,為了提供內(nèi)容的一致性,一般可以通過NFS網(wǎng)絡(luò)文件系統(tǒng)共享數(shù)據(jù),但是NFS在繁忙的業(yè)務(wù)系統(tǒng)中,性能并不是很好,此時(shí)可以采用集群文件系統(tǒng),例如Red hat的GFS文件系統(tǒng),oracle提供的OCFS2文件系統(tǒng)等。
在用戶看來,所有的內(nèi)部應(yīng)用都是透明的,用戶只是在使用一個(gè)虛擬服務(wù)器提供的高性能服務(wù)。
LVS三種模式區(qū)別:
$IPVSADM -a -t 192.168.31.166:80 -r 192.168.21.100:80 -m -w 1 //-a增加一個(gè)real server -m NAT模式 -g dr模式 -t tun模式 -w權(quán)重
NAT模式:realserver不需要公網(wǎng)ip,director負(fù)責(zé)接受請(qǐng)求和返回請(qǐng)求。
DR模式/TUN模式:每個(gè)realserver都需要有公網(wǎng)ip,返回請(qǐng)求不需要經(jīng)過director,director只負(fù)責(zé)分發(fā)接受的請(qǐng)求。
DR模式和TUN模式區(qū)別:TUN模式realserver和dr通信使用隧道(修改了ip包頭),DR模式不使用隧道(修改MAC地址)。
LVS-DR模式搭建
搭建成功后,其實(shí)你會(huì)發(fā)現(xiàn)LVS-DR是非常簡(jiǎn)單的。
每個(gè)realserver都需要有公網(wǎng)ip,返回請(qǐng)求不需要經(jīng)過director,director只負(fù)責(zé)分發(fā)接受的請(qǐng)求。
搭建環(huán)境
先森是用虛擬機(jī)搭建的,準(zhǔn)備了三個(gè)安裝了CentOS的虛擬機(jī)。
系統(tǒng)版本:CentOS 6.8
| 外部IP地址 | 內(nèi)部IP地址 | 角色 |
| 192.168.2.27/24 | 10.10.10.99/24 | LVS調(diào)度器(虛擬機(jī)) |
|
192.168.2.66/24 |
10.10.10.100/24 | RS1(虛擬機(jī)) |
| 192.168.2.44/24 | 10.10.10.101/24 | RS2(虛擬機(jī)) |
| 192.168.2.233/24 | 無 | 客戶機(jī)(自己電腦) |
本次搭建的拓?fù)鋱D如下,圖中的192.168.2.51實(shí)為192.168.2.27:

LVS-DR拓?fù)鋱D
調(diào)度器服務(wù)器要安裝ipvsadm,兩臺(tái)真實(shí)服務(wù)器要運(yùn)行Apache或者Nginx等web服務(wù)器。
Director上需要安裝ipvsadm:
yum install -y ipvsadm
兩個(gè)real server 上都安裝apache:
yum install -y httpd
DR 負(fù)載均衡器配置
ipvsadm有自己的命令,但是一般都是用shell腳本把需要做的設(shè)置寫出來,然后運(yùn)行shell來完成設(shè)置。
首先進(jìn)入一個(gè)存放shell腳本的目錄,這個(gè)目錄自行選擇。先森選擇將shell腳本放置/usr/local/bin目錄下。
cd /usr/local/bin
用vim直接打開一個(gè)不存在的shell文件,保存的時(shí)候會(huì)自動(dòng)創(chuàng)建好。
vim lvs_dr.sh
打開后添加如下內(nèi)容:
#!/bin/sh
VIP=192.168.2.27 # 均衡器外網(wǎng)IP
DIP=10.10.10.99 # 均衡器內(nèi)網(wǎng)IP
RIP1=10.10.10.100 # 真實(shí)服務(wù)器的內(nèi)網(wǎng)IP
RIP2=10.10.10.101
. /etc/rc.d/init.d/functions
case "$1" in
start)
echo "start LVS of DirectorServer"
#Set the Virtual IP Address
/sbin/ifconfig eth0:1 $DIP netmask 255.255.255.0 up # 給均衡器添加一個(gè)內(nèi)容IP
/sbin/route add -host $DIP dev eth0:1 # 給內(nèi)網(wǎng)IP添加路由
#Clear IPVS Table
/sbin/ipvsadm -C # 手工清空原來表內(nèi)容
#Set Lvs
/sbin/ipvsadm -A -t $VIP:80 -s rr # -A添加地址,-t指定VIP TCP端口,-s指定調(diào)度算法:rr輪詢算法
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g # -a指定真實(shí)服務(wù)器, -t lvs上VIP,-r真實(shí)服務(wù)器ip及端口,-g先擇DR模式(-m為NAT模式)
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
#Run Lvs
/sbin/ipvsadm
;;
stop)
echo "close LVS Directorserver"
/sbin/ipvsadm -C
/sbin/ifconfig eth0:1 down
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
保存并退出:
:wq
給lvs_dr.sh添加可執(zhí)行權(quán)限:
chmod +x lvs_dr.sh
RS 真實(shí)服務(wù)器配置
兩臺(tái)real server也需要添加一個(gè)shell腳本,腳本的內(nèi)容大致相同。
還是進(jìn)入一個(gè)保存腳本的目錄:
cd /usr/local/bin
編輯本不存在的shell腳本:
vim lvs_dr_rs.sh
在腳本內(nèi)加入如下內(nèi)容:
#!/bin/bash
VIP=192.168.2.27 # 均衡器的VIP地址
RIP=10.10.10.100 # 要給本地服務(wù)器設(shè)置的內(nèi)網(wǎng)地址
LOCAL_Name=50bang
BROADCAST=192.168.2.255 #vip's broadcast
. /etc/rc.d/init.d/functions
case "$1" in
start)
echo "reparing for Real Server"
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
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $BROADCAST up
#為什么要綁定VIP呢?因?yàn)镈R模式原理是LVS調(diào)度器修改mac地址為真實(shí)服務(wù)器地址,報(bào)文的目的IP還是VIP沒修改,,網(wǎng)卡只會(huì)把目的MAC和目的IP都是自己的報(bào)文上送CPU,所以真實(shí)服務(wù)器上必須>配置VIP!
#為什么使用lo口呢?因?yàn)閘o口為本地環(huán)回口,防止本地局域網(wǎng)IP地址沖突!
ifconfig eth0:1 $RIP netmask 255.255.255.0 up # 為本地服務(wù)器設(shè)置一個(gè)內(nèi)網(wǎng)IP
/sbin/route add -host $VIP dev lo:0
;;
stop)
ifconfig lo:0 down
ifconfig eth0:1 down
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 "close LVS Real Server"
;;
*)
echo "Usage: lvs {start|stop}"
exit 1
esac
退出保存:
:wq
依舊添加可執(zhí)行權(quán)限:
chmod +x lvs_dr_rs.sh
運(yùn)行腳本
DR 負(fù)載均衡器:
./lvs_dr.sh start

DR運(yùn)行腳本
RS 真實(shí)服務(wù)器:
./lvs_dr_rs.sh start
![]()
RS運(yùn)行腳本
檢查網(wǎng)卡:
ifconfig

DR均衡器的網(wǎng)卡信息

RS服務(wù)器的網(wǎng)卡信息
查看ipvs設(shè)置
ipvsadm -ln
測(cè)試
運(yùn)行RS服務(wù)器上的Apache或Nginx、Tomcat等任何web服務(wù)器,記得開啟防火墻iptables的端口。
為了方便測(cè)試,可以把Apache的默認(rèn)頁面內(nèi)容改為“web1”和“web2”:
echo "web1" >/var/www/html/index.html
然后在電腦上瀏覽器訪問設(shè)置的VIP地址,即192.168.2.27,不停刷新查看效果。如果配置成功則會(huì)看到頁面在“web1”和“web2”上輪流切換。

第一次打開

刷新一次
如此,就是先LVS-DR的負(fù)載均衡。
實(shí)際上,LVS-DR還經(jīng)常和Keepalived搭配起來實(shí)現(xiàn)高可用+負(fù)載均衡。這個(gè)先森也實(shí)現(xiàn)了,真的是非常簡(jiǎn)單呢,后面會(huì)繼續(xù)分享。
歷史上的今天:
轉(zhuǎn)載請(qǐng)注明出處來自http://www.cnidcc.cn/lvs_dr.html

川公網(wǎng)安備 51011202000104號(hào)
博主分享的精準(zhǔn)到位,本人受益匪淺,非常感謝!歡迎朋友回訪交流!
恭喜先森正式工作,工作之余還寫工作筆記。真是好工人。
好教程!等用到了在來偷走!
可惜了,我又看不懂!
確實(shí)不錯(cuò)的性能
你這可以啊、非常佩服研究項(xiàng)目的人、;大牛
圍觀一下,手短
過來支持一下~
在哪里上班啊。。。