文章目錄
ipvsadm命令
在2.4.23之前的linux內核想要使用LVS需要重新編譯內核打補丁,之後的LVS直接做進了內核
使用grep -i -C 5 ipvs /boot/config-uname -r
可以查看
ipvsadm工作在用戶空間/ipvs工作在內核空間,用戶使用ipvsadm進行設置並且傳遞到內核空間中的ipvs (ipvsadm工具在光盤中的cluster中)
ipvsadm功能
定義一個集羣服務,定義REALSERVER,集羣服務的查看
-t 基於tcp的集羣服務
-u 基於udp的集羣服務
-f 基於防火牆標記的集羣服務
-A 添加一個服務
-E 修改一個服務
-s 調度算法 默認WLC
-g LVS-DR直接路由模型
-i LVS-TUN隧道模型
-m LVS-NAT模型
-C 清空規則
-R 從一個文件中恢復規則
-S 保存對着到文件中
-L/l -n 查看
定義集羣服務
添加或修改集羣服務:ipvsadm -A|E -t|u|f VIP:port -s 調度算法
刪除一個集羣服務: ipvsadm -D -t|u|f VIP:port
realserver
添加或者修改REALSERVER:ipvsadm -a|e -t|u|f VIP:port -r REALSERVER[:port] -g|-i|-m [-w 權重]
刪除一個REALSERVER: ipvsadm -d -t|u|f VIP:port -r REALSERVER[:port]
場景一:擁有多個公網IP且在同一網段
這是最容易部署的一種場景,但並不是最優化的應用場景。之所以說它不是最優化的應用場景,是因爲這是最消耗公網IP的一種場景,在這個後ipv4的時代,ip地址是緊缺資源,在達到系統性能最大化之後應該考慮儘量節約資源
實驗環境
在上圖,用四臺Linux主機組成一個LVS集羣。其中一臺主機(P0/4)作爲Director,其他三臺(P0/1、P0/2、P0/3)作爲RealServer。
由圖分析可看出此集羣共消耗了5個公網IP,但只有三個RealServer對外部用戶提供服務。其實在當前場景中:羣集所消耗的公網IP = RealServer數 + 2;在提供同樣服務的情況下與其他場景比較,這種場景是最消耗公網IP的。
環境配置
對Director主機的配置
#首先是要安裝ipvsadm軟件包:
yum install -y ipvsadm
#然後是對ipvsadm進行配置:
-A -t 192.168.11.20:80 -s rr
-a -t 192.168.11.20:80 -r 192.168.11.22:80 -g -w 1
-a -t 192.168.11.20:80 -r 192.168.11.22:80 -g -w 1
-a -t 192.168.11.20:80 -r 192.168.11.23:80 -g -w 1
#從圖片中可以看到在Director中VIP是配置在lo:0上面的。
ifconfig lo:0 192.168.11.20 netmask 255.255.255.255 up
#你也可以把Director中的VIP配置在一個真實網卡,前提條件是你得有這麼一個網卡,並且通過這個網卡可以接收來自互聯網的訪問。
ifconfig eth1 192.168.11.20 netmask 255.255.255.255 up
需要特別說明的是:在VS/DR模塊下Director是不需要開啓ip_forword(路由轉發)功能的。在此後的各個場景中不再贅述。
對RealServer節點的配置
#所有RealServer節點,除了RIP不同之外,其他配置都是一樣的。
#首先需要把VIP配置在RealServer節點的lo:0網卡上:
ifconfig lo:0 192.168.11.20 netmask 255.255.255.255 up
#因爲所有RealServer與Director是在同一個網段中(同一局域網中),所以需要對所有RealServer進行ARP抑制;避免因RealServer主機應答對VIP的ARP詢問,而造成局域網內ARP解析混亂。如果不對RealServer進行ARP抑制,那麼用戶對VIP的請求是由哪臺服務器應答的將不可預知。
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
#Linux 內核參數arp_ignore和arp_announce作用說明
#arp_ignore - INTEGER
0:默認值,表示可使用本地任意接口上配置的任意地址進行arp應答;
1:僅當請求的目標IP配置在本地主機接受到報文的接口上時,纔給予響應;
2:僅當目的IP配置在收到報文的接口上,且arp請求的源IP和該接口同一網段,才響應arp請求;
3:如ARP請求的IP作用域是主機則不響應,如果作用域是全局或者鏈路則響應ARP
4-7:保留
8:不應答所有本地IP
#arp_announce - INTEGER
0:默認值,允許使用本機上所有接口的IP作ARP通告。
1:儘量避免使用本地IP向非本網卡直接連接網絡進行ARP通告。
2:必須避免使用本地IP向非本網卡直接連接網絡進行ARP通告。
編制自動化腳本
Director上的啓動腳本
#!/bin/sh
# Startup script handle the initialisation of LVS
# chkconfig: - 28 72
# description: Initialise the Linux Virtual Server for DR
#
LOCK=/var/lock/lvs-dr.lock
VIP=192.168.11.20
RIP1=192.168.11.21
RIP2=192.168.11.22
RIP3=192.168.11.23
. /etc/rc.d/init.d/functions
start() {
PID=`ipvsadm -Ln | grep ${VIP} | wc -l`
if [ $PID -gt 0 ];
then
echo "The LVS-DR Director Server is already running !"
else
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
#Clear IPVS Table
/sbin/ipvsadm -C
#Set Lvs
/sbin/ipvsadm -At $VIP:80 -s rr
/sbin/ipvsadm -at $VIP:80 -r $RIP1:80 -g -w 1
/sbin/ipvsadm -at $VIP:80 -r $RIP2:80 -g -w 1
/sbin/ipvsadm -at $VIP:80 -r $RIP3:80 -g -w 1
/bin/touch $LOCK
#Run Lvs
echo "starting LVS-DR Director Server is ok !"
fi
}
stop() {
#stop Lvs server
/sbin/ipvsadm -C
/sbin/ifconfig lo:0 down >/dev/null
rm -rf $LOCK
echo "stopping LVS-DR Director server is ok !"
}
status() {
if [ -e $LOCK ];
then
echo "The LVS-DR Director Server is already running !"
else
echo "The LVS-DR Director Server is not running !"
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
sleep 1
start
;;
status)
status
;;
*)
echo "Usage: $1 {start|stop|restart|status}"
exit 1
esac
exit 0
#把上面的腳本放到/etc/init.d/目錄下。並授予其可執行權限:
chmod o+x /etc/init.d/lvs_dr-d
#然後使用如下指令設置爲開機啓動。
chkconfig --level 35 lvs_dr-d on
RealServer上的啓動腳本 lvs_dr-r
#!/bin/sh
#
# Startup script handle the initialisation of LVS
# chkconfig: - 28 72
# description: Initialise the Linux Virtual Server for DR-RealServer
#
LOCK=/var/lock/ipvsadm.lock
VIP=192.168.11.20
. /etc/rc.d/init.d/functions
start() {
PID=`ifconfig | grep lo:0 | wc -l`
if [ $PID -ne 0 ];
then
echo "The LVS-DR-RealServer is already running !"
else
# 配置lo:0網卡
/sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP up
# 配置lo:0網卡的arp策略
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
/bin/touch $LOCK
echo "starting LVS-DR-RealServer is ok !"
fi
}
stop() {
# 關閉lo:0網卡
/sbin/ifconfig lo:0 down
# 配置lo:0網卡的arp策略
echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
rm -rf $LOCK
echo "stopping LVS-DR-RealServer is ok !"
}
status() {
if [ -e $LOCK ];
then
echo "The LVS-DR-RealServer is already running !"
else
echo "The LVS-DR-RealServer is not running !"
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
status
;;
*)
echo "Usage: $1 {start|stop|restart|status}"
exit 1
esac
exit 0
#把上面的腳本放到/etc/init.d/目錄下。並授予其可執行權限:
chmod o+x /etc/init.d/lvs_dr-r
#然後使用如下指令設置爲開機啓動。
chkconfig --level 35 lvs_dr-r on
場景二:只有一個公網IP
這是最節約公網IP的一種場景,無論你有多少個RealServer節點都只需要一個公網IP。但你必須要有一個可自主配置的路由器纔行。
實驗環境
如上圖,雖然使用的都是私網的IP地址,但我們可以認爲192.168.x.x爲公網IP(映射到公網後該網絡拓撲依然可行)。而10.0.0.x爲私網IP。從這個圖中你應該能理解爲什麼說這種場景需要有一個可自主配置的路由器了。因爲你需要在路由器E0/1口上配置私網IP。
對Director主機的配置
#首先是要安裝ipvsadm軟件包:
yum install -y ipvsadm
#然後是對ipvsadm進行配置:
-A -t 192.168.11.20:80 -s rr
-a -t 192.168.11.20:80 -r 10.0.0.21:80 -g -w 1
-a -t 192.168.11.20:80 -r 10.0.0.22:80 -g -w 1
-a -t 192.168.11.20:80 -r 10.0.0.23:80 -g -w 1
#從圖片可以看到在Director中VIP是配置在eth1上面的。
ifconfig eth1 192.168.11.20 netmask 255.255.255.0 up
## OR
ifconfig eth1 192.168.11.20 netmask 255.255.255.255 up
#如果你的網卡資源不夠,你也可以把Director中的VIP配置在環回網卡lo上或eth0:0網卡上。
ifconfig lo:0 192.168.11.20 netmask 255.255.255.0 up
ifconfig eth0:0 192.168.11.20 netmask 255.255.255.0 up
## OR
ifconfig lo:0 192.168.11.20 netmask 255.255.255.255 up
ifconfig eth0:0 192.168.11.20 netmask 255.255.255.255 up
不過這種情況下你的網絡拓撲也需要做相應的調整:
細心的朋友可能發現了,這裏在Director上對VIP的配置子網掩碼有兩種。其實在當前場景下,子網掩碼的選擇只要保證VIP與DIP、RIP不在同一網段就行了。(其實是因爲我製作拓撲圖時筆誤了,把Director中VIP的子網掩碼寫成了24位,於是就隨便擴展了一下這個小知識點)
對RealServer節點的配置
#所有RealServer節點,除了RIP不同之外,其他配置都是一樣的。
#首先需要把VIP配置在RealServer節點的lo:0網卡上:
ifconfig lo:0 192.168.11.20 netmask 255.255.255.255 up
#因爲所有RealServer是在同一個網段中(同一局域網中),所以需要對所有RealServer進行ARP抑制;避免因RealServer主機應答對VIP的ARP詢問,而造成局域網內ARP解析混亂。
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce