1. 程式人生 > >LVS 之 集群設計

LVS 之 集群設計

lvs-nat lvs-dr fwm 持久連接

1 概述

負載均衡集群設計時要註意兩點:一是否需要會話保持;二是否需要共享存儲,共享存儲分為NASSANDS(分布式存儲)

本文結合實驗介紹了lvs-nat,lvs-dr,FWM的實現,同時介紹持久連接的相關配置

2 lvs-nat

設計要點:

(1) RIPDIP在同一IP網絡, RIP的網關要指向DIP

(2) 支持端口映射

(3) Director要打開核心轉發功能

實驗:VS實現LVS-NAT模式的調度

實驗環境準備:

iptables,selinux,關閉,服務器時間同步。

內網網段:172.18.0.0/16

外網網段:192.168.32.0/24

RS1 RS2分別開啟httpS服務

client配置

172網段ip:172.18.50.65

VS配置兩個網卡,分別配置172網段和192網段,eth0 ip 172.18.50.72 eth1 ip 192.168.32.72

RS兩臺配置192網段 RS1 ip:192.168.32.63 RS2 ip: 192.168.32.73

RS1 RS2的網關要指向 VS 的192.168.32.72

client 網關指向 VS 172.18.50.72

拓撲圖如下

技術分享

VS上配置如下三條命令

ipvsadm -A -t 172.18.50.72:443 -s rr
ipvsadm -a -t 172.18.50.72:443 -r 192.168.32.63:443 -m
ipvsadm -a -t172.18.50.72:443 -r 192.168.32.73 -m

如果改規則的時候出現報錯,內存分配問題(Memory allocation problem),解決辦法,清掉規則,全部重新添加

RS上配置https

VS上要啟用路由轉發功能。

echo 1 > /proc/sys/net/ipv4/ip_forward

轉發功能要永久存盤,

centos7寫入/etc/sysctl.d/99-sysctl.conf

文件裏

vim /etc/sysctl.d/99-sysctl.conf
net.ipv4.ip_forward=1

然後重啟網絡後生效

centos6寫入/etc/sysctl.conf文件

/etc/sysctl.conf 
net.ipv4.ip_forward=1

安裝http和mod_ssl模塊

yum –y install httpd mod_ssl

生成證書

註意,證書可以向CA中心申請,這個案例介紹如何生成自己前面的證書的另一個方法

生成自簽名的證書

cd /etc/pki/tls/certs
make http.crt

生成證書http.crt和私有http.key,這裏生成key時需要輸入密碼,這樣每次重啟httpd服務的時候,需要輸入密碼才能成功啟動

去掉證書密碼的命令如下

openssl rsa –in http.key –out http2.key

輸入密碼後可以生成新的

mv http.key http.key.bak
mv http2.key  http.key

這樣http.key就沒有密碼,重啟http的時候就不需要輸入密碼

配置ssl文件,指定證書和私鑰的路徑

vim /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/httpd/conf.d/http.crt
SSLCertificateKeyFile /etc/httpd/conf.d/http.key

保存後重啟http服務即可

將生成的私鑰和證書發到另一臺機器上,後端的RS的https服務的key和證書要同一個

後端RS的https服務配置完成後,到此,LVS-NAT配置完成,可以將請求調度到後端的https服務器

測試如下

for i in {1..10};do curl -k https://172.18.50.72;done;

結果為輪詢調度6373這兩臺RS

3 LVS-DR

dr模型中,各主機上均需要配置VIP,解決地址沖突的方式有三種:

(1) 在前端網關做靜態綁定

(2) 在各RS使用arptables

(3) 在各RS修改內核參數,來限制arp響應和通告的級別

.限制響應級別:arp_ignore,選擇1

0:默認值,表示可使用本地任意接口上配置的任意地址進行響應

1: 僅在請求的目標IP配置在本地主機的接收到請求報文的接口上時,才給予響應

.限制通告級別:arp_announce,選擇2

0:默認值,把本機所有接口的所有信息向每個接口的網絡進行通告

1:盡量避免將接口信息向非直接連接網絡進行通告

2:必須避免將接口信息向非本網絡進行通告

VIP建議配置在lo口上比較合理(雖然可以配置在任意網卡,但是建議配置在lo

實驗:VS實現LVS-DR模式的調度

環境如下:

五臺機器的ip配置如下

host1-->client: eth1: 172.18.50.65/16

host2-->ROUTER: WAN: eth1:172.18.50.62/16

LAN: eth0:192.168.32.62/24

eth0:1 : 10.10.10.12/24

host3-->VS: eth33:192.168.32.72/24

eth33:1 10.10.10.10/24

host4-->RS1:eth0:192.168.32.63/24

lo:1 10.10.10.10/24

host5-->RS2:eth33:192.168.32.73/24

lo:1 10.10.10.10/24

註意:

RS上取消arp的響應和arp_announce

Router上配置三個ip,開啟路由轉發功能,同時在網卡eth0上配置獨臂路由

VS和RS都配置默認的路由,網關都指向 Router LAN: eth0:192.168.32.62/24

VS和RS添加默認路由命令:route add default gw 192.168.32.62

拓撲圖如下

技術分享

RS的一鍵配置腳本

#!/bin/bash
vip=10.10.10.10
mask=‘255.255.255.0‘
dev=lo:1
rpm -q httpd &> /dev/null || yum -y install httpd&>/dev/null
service httpd start &> /dev/null && echo"The httpd Server is Ready!"
#echo "<h1>`hostname`</h1>" >/var/www/html/index.html
 
case $1 in
start)
    echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce
    echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce
    ifconfig $dev$vip netmask $mask broadcast $vip up
    route add -host$vip dev $dev
    echo "The RSServer is Ready!"
    ;; 
stop)
    ifconfig $devdown
    echo 0 >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo 0 >/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo 0 >/proc/sys/net/ipv4/conf/all/arp_announce
    echo 0 >/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "The RSServer is Canceled!"
    ;; 
*)
    echo "Usage:$(basename $0) start|stop"
    exit 1
    ;; 
esac

VS的一鍵配置腳本

#!/bin/bash
vip=‘10.10.10.10‘
iface=‘ens33:1‘
mask=‘255.255.255.0‘
port=‘80‘
rs1=‘192.168.32.63‘
rs2=‘192.168.32.73‘
scheduler=‘wrr‘
type=‘-g‘
rpm -q ipvsadm &> /dev/null || yum -y installipvsadm &> /dev/null
 
case $1 in
start)
    ifconfig $iface$vip netmask $mask broadcast $vip up
    iptables -F
 
    ipvsadm -A -t${vip}:${port} -s $scheduler
    ipvsadm -a -t${vip}:${port} -r ${rs1} $type -w 2
    ipvsadm -a -t${vip}:${port} -r ${rs2} $type -w 1
    echo "The VSServer is Ready!"
    ;;  
stop)
    ipvsadm -C
    ifconfig $ifacedown
    echo "The VSServer is Canceled!"
    ;; 
*)
    echo "Usage:$(basename $0) start|stop"
    exit 1
    ;; 
esac

測試如下

for i in {1..10};do curl   http://172.18.50.72;done;

結果為輪詢調度6373這兩臺RS

註意,以上環境為生產環境的實際配置,如果不用要把VIP也設置為私有ip,如192.168.32.66,那麽在路由器上就不需要多配置一個eth0:1的ip了,路由器上只需要配置兩個ip就可以,其他配置都不變。

4 FireWallMark

.FWMFireWall Mark

.MARK target 可用於給特定的報文打標記

同一類服務實現統一調度。如httphttps,這裏需要加上Mark標記

默認工作模式是dr,默認的調度算法是wlc

--set-mark value

# value是在防火墻的策略上會顯示為16進制數,可以隨便定義,如這裏定義value值是12,但是在防火墻上通過命令iptables –vnL -t mangle 看到的是0xc,是十六進制

.借助於防火墻標記來分類報文,而後基於標記定義集群服務;可將多個不同的應用使用同一個集群服務進行調度

.實現方法:

.Director主機打標記:

iptables  -t mangle -A PREROUTING -d $vip  -p $proto  -m multiport  --dports $port1,$port2,… -j MARK --set-markNUMBER

LVS上定義如下

.Director主機基於標記定義集群服務和管理RS

ipvsadm  -A  -f   NUMBER [options1]

這裏的iptions1可以定義算法,如跟上-s wrr

ipvsadm -a -f  NUMBER  -r  real-server  [options2]

這裏的iptions2可以定義集群的類型,如-g表示dr模型

實驗

vs上配置

iptables -t mangle -A PREROUTING -d 192.168.32.66 -p tcp -m multiport--dports 80,443 -j MARK --set-mark 12
ipvsadm –A  -f  12  -s  wrr
ipvsadm -a -f 12 -r  192.168.32.63  -g -w 3
ipvsadm -a  -f 12 -r 192.168.32.73  –g

RS配置可以參考LVS-dr的腳本配置

測試

for i in {1..10};docurl  -k https://192.168.32.66;curl http://192.168.32.66;done;

結果是輪詢調度後端RS的http和https服務。

5 持久連接

來自同一個服務的請求盡可能發到同一臺後端的RS上處理。這裏可以實現session綁定

註意LVS的算法,默認只有sh能夠實現根據session來實現調度。其他的調度算法不能實現session綁定。但是sh的第一次是隨機的,不能根據權重調度。

綜合sh和其他算法,用持久連接的技術來實現。這是一個折中的方法。

-p [timeout]這個選項來實現持久連接,默認是360s,man幫助裏不一樣,man裏是300s,實際默認是360s

.session 綁定:對共享同一組RS的多個集群服務,需要統一進行綁定,lvs sh算法無法實現

.持久連接(lvs persistence )模板:實現無論使用任何調度算法,在一段時間內(默認360s ),能夠實現將來自同一個地址的請求始終發往同一個RS

ipvsadm  -A|E    -t|u|f  service-address  [-s scheduler]  [-p [timeout]]

.持久連接實現方式:

.每端口持久(PPC):每個端口對應定義為一個集群服務,每集群服務單獨調度

.每防火墻標記持久(PFWMC):基於防火墻標記定義集群服務;可實現將多個端口上的應用統一調度,即所謂的port Affinity

.每客戶端持久(PCC):基於0端口(表示所有服務)定義集群服務,即將客戶端對所有應用的請求都調度至後端主機,必須定義為持久模式.但是實際生產不這麽定義,因為這樣相當於是把後端的服務都發布到公網了。

例子

 ipvsadm  -E  -f  12 -s wrr -p 20

#這裏的-p後面接數字20表示20秒內,同一客戶端將會被調度到同一服務器上,如果跟數字20,就是默認的360


本文出自 “陽光運維” 博客,請務必保留此出處http://ghbsunny.blog.51cto.com/7759574/1975813

LVS 之 集群設計