LVS的2種模式,DR/NAT詳解和具體配置

先介紹下幾個名詞

Directer:也能夠稱爲調度器,LVS前端設備前端

realserver:也稱爲真實內部服務器,是真正在提供服務的linux

VIP:對外公佈的IP,即客戶請求進來的IP地址nginx

DIP:調度器和realserver之間通訊的地址web

 

NAT模式算法

NAT模式簡介:後端

VS/NAT經過調度器接收請求後,經過算法選擇一臺realserver,而後進行地址的轉換,將報文的目標IP修改成realserver的DIP,端口修改成realserver對應的端口,而後發送給realserver。同時會在鏈接表中記錄這個鏈接,對以後相同源地址的請求都指向這臺realserver。在realserver處理包的請求後,再將包轉發給調度器,調度器經過鏈接表的記錄,將目標地址轉換爲客戶請求的地址,轉發給客戶端。因此在NAT模式中,realserver只要運行集羣服務,而後將網關指向調度器就行,不須要進行其它額外的配置。由於在此模式中,調度器要對進來和出去的包都進行地址的改寫,因此調度器很容易成爲整個集羣的瓶頸。通常在NAT模式下,後端的realserver不超過5臺。緩存

 

realserver配置要求服務器

開啓對於服務,配置內部私網地址,網關指向調度器tcp

Directer配置要求 基本配置ide

調度器須要2塊網卡(一塊網卡對外,一塊網卡對內。1塊也能夠,配置子接口,對外的VIP和DIP都配置在同一網卡上,不過這樣會更加的下降調度器的性能,建議仍是雙網卡)

關閉selinux和iptables

setenforce 0

service iptables stop

(爲了不沒必要要的麻煩,在每臺服務器上都關閉這2個服務)

打開包轉發功能

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

這樣系統就至關於一臺路由器了

這個命令只能暫時開啓Linux的路由轉發功能,重啓系統以後就恢復原來的配置了。

能夠經過在/etc/rc.d/rc.local 文件中加上上述的命令,每次開機啓動都會自動開啓。

另外還能夠經過修改/etc/sysctl.conf文件,讓包轉發功能在系統啓動時自動生效:

sysctl -w net.ipv4.ip_forward=1

 

配置集羣服務

首先這裏定義3個變量,能夠經過實際狀況修改

$VIP:對外服務的IP

$DIP:調度器和realserver的內部私網IP

$Port:服務端口

[root@localhost ~]# ipvsadm -A –t $VIP:$Port-s rr

解釋:-A表示添加一個集羣服務(能夠添加多個,好比添加一個web的80和一個https的443)-t表示是tcp協議 -s表示調度算法是輪詢(一共有10種調度算法,能夠按照本身實際須要選擇)
[root@localhost ~]# ipvsadm -a –t $VIP:$Port -r $DIP:$Port-m

解釋:-a表示添加一個realserver,後面跟上以前定義的集羣服務的地址端口,-r表示增長具體realserver的地址,-m表示模式爲NAT模式

 

 

 

DR模式

DR模式簡介

VS/DR經過改寫請求報文的MAC地址,將請求的包發送到realserver上,不改變包的源和目標的IP地址,而後realserver直接回復客戶端,再也不通過LVS調度器,這樣大大的減輕了LVS的負擔。網上有測試,100 萬鏈接的時候,才用去內存 208 M

可是因爲LVS須要直接將包轉發給realserver,因此調度器和realserver必須在同一個網段上,若是直接在LVS上配置的是公網地址的話,就須要公網IP地址的數量是realserver的數量加1。若是公司出口的路由器性能足夠好,在路由器上作一個靜態的NAT映射,而後集羣配置死亡地址,這樣能大量節省IP。

 

Realserver配置要求 基本配置

 

首先先配置限制arp,否則等配置好地址後就產生地址衝突了

經過修改內核參數來實現

在linux中 ,默認在接口上通告全部接口上IP的arp廣播,在接口上應答全部接口上IP的arp請求

arp_announce 限制arp通告

限制等級

0:在接口上通告全部接口上IP的arp廣播

1:對於其它設備的arp請求,在接口上儘可能限制廣播通告應答(不夠嚴格)

2:只通告本接口上IP的arp廣播

arp_ignore 限制arp應答

限制等級

0:對於其它設備 的arp請求,應答全部其它接口的上IP的arp應答

1:對於其它設備的arp請求,只應答本接口上IP的arp應答

[root@r1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@r1 ~]# echo 2 > /proc/sys/net/ipv4/conf//lo/arp_announce
[root@r1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@r1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

 

配置VIP和DIP

咱們在realserver上的lo口配置VIP,這樣配置就限制了VIP不會在物理交換機上產生MAC地址表,從而避免IP衝突

[root@r1 ~]# ifconfig lo:1 $VIP broadcast $VIP netmask 255.255.255.255

ifconfig eth0 $DIP up

注意此VIP的接口的廣播地址仍然爲VIP,限制其廣播,子網掩碼是32位,下面調度器上的配置也注意此項

 

 

配置特殊路由,使目標爲VIP的包的以源地址爲VIP的lo口出去

route add –host $VIP dev lo:1

 

Directer配置要求

配置VIP和DIP,VIP配置在物理網卡的子接口上

ifconfig eth0 $DIP broadcast $VIP netmask 255.255.255.0 up

ifconfig eth0:1 $VIP broadcast $VIP netmask 255.255.255.255 up

 

配置特殊路由,目標是VIP的包從配置了VIP的物理子接口上出去

route add –host $VIP dev eth0:1

 

集羣配置

[root@localhost ~]# ipvsadm -A –t $VIP:$Port-s rr

解釋:-A表示添加一個集羣服務(這裏和NAT中的配置同樣)


[root@localhost ~]# ipvsadm -a –t $VIP:$Port -r $DIP:$Port-g

解釋:其它和NAT也差很少,在最後的模式改成-g,即DR模式

 

 

總結:

對於LVS這2種模式的選擇上,具體要看不一樣的應用而定。若是網站規模(其它服務服務也同樣)比較大, 後臺須要超過5臺的web服務器,那麼DR模式是不錯的選擇,能承載更大的訪問量,但對地址數量要求高。

若是網站規模比較小,提供服務的服務器少於5臺,那麼NAT模式能節省大量的公網IP地址

折中的方式是:公司的出口路由器性能足夠強大,作一個靜態NAT映射,而後使用DR模式,這樣即節省了大量公網IP地址,也提高了集羣性能,前提是你有對機房出口路由器的控制權限,並且出口路由器性能足夠強

這裏只是介紹了LVS基本的配置,在真正使用中還要搭配headbeat或者keeplived來使用,實現單點故障轉移,這些下次再介紹。

 

下期linux博文預告:搭建基於LVS+squid+apche的高性能高可用集羣(內容還在想,可能會加入nginx作反向代理,後面再加squid作緩存,或者用varlish代替squid)

相關文章
相關標籤/搜索