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

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

LVS-DR拓撲圖
調度器服務器要安裝ipvsadm,兩臺真實服務器要運行Apache或者Nginx等web服務器。
Director上需要安裝ipvsadm:
yum install -y ipvsadm
兩個real server 上都安裝apache:
yum install -y httpd
DR 負載均衡器配置
ipvsadm有自己的命令,但是一般都是用shell腳本把需要做的設置寫出來,然后運行shell來完成設置。
首先進入一個存放shell腳本的目錄,這個目錄自行選擇。先森選擇將shell腳本放置/usr/local/bin目錄下。
cd /usr/local/bin
用vim直接打開一個不存在的shell文件,保存的時候會自動創建好。
vim lvs_dr.sh
打開后添加如下內容:
#!/bin/sh
VIP=192.168.2.27 # 均衡器外網IP
DIP=10.10.10.99 # 均衡器內網IP
RIP1=10.10.10.100 # 真實服務器的內網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 # 給均衡器添加一個內容IP
/sbin/route add -host $DIP dev eth0:1 # 給內網IP添加路由
#Clear IPVS Table
/sbin/ipvsadm -C # 手工清空原來表內容
#Set Lvs
/sbin/ipvsadm -A -t $VIP:80 -s rr # -A添加地址,-t指定VIP TCP端口,-s指定調度算法:rr輪詢算法
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g # -a指定真實服務器, -t lvs上VIP,-r真實服務器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添加可執行權限:
chmod +x lvs_dr.sh
RS 真實服務器配置
兩臺real server也需要添加一個shell腳本,腳本的內容大致相同。
還是進入一個保存腳本的目錄:
cd /usr/local/bin
編輯本不存在的shell腳本:
vim lvs_dr_rs.sh
在腳本內加入如下內容:
#!/bin/bash
VIP=192.168.2.27 # 均衡器的VIP地址
RIP=10.10.10.100 # 要給本地服務器設置的內網地址
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呢?因為DR模式原理是LVS調度器修改mac地址為真實服務器地址,報文的目的IP還是VIP沒修改,,網卡只會把目的MAC和目的IP都是自己的報文上送CPU,所以真實服務器上必須>配置VIP!
#為什么使用lo口呢?因為lo口為本地環回口,防止本地局域網IP地址沖突!
ifconfig eth0:1 $RIP netmask 255.255.255.0 up # 為本地服務器設置一個內網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
依舊添加可執行權限:
chmod +x lvs_dr_rs.sh
運行腳本
DR 負載均衡器:
./lvs_dr.sh start

DR運行腳本
RS 真實服務器:
./lvs_dr_rs.sh start
![]()
RS運行腳本
檢查網卡:
ifconfig

DR均衡器的網卡信息

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

第一次打開

刷新一次
如此,就是先LVS-DR的負載均衡。
實際上,LVS-DR還經常和Keepalived搭配起來實現高可用+負載均衡。這個先森也實現了,真的是非常簡單呢,后面會繼續分享。
歷史上的今天:
轉載請注明出處來自http://www.cnidcc.cn/lvs_dr.html

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