ubuntu 12.04 下LVS的一些搭建心得和資料整理

鏈接:lvs中文網站

     最近項目上需要使用到IPVS進行負載均衡,針對外部傳來的HTTP請求,分攤到多臺服務器上進行處理,所以看了一下這方面的資料,在這裏紀錄一下。

Lvs是基於IP層和內容分發請求的負載均衡方法(所以也可以叫IPVS)。所謂負載均衡,就是分擔給多個服務器進行處理。

IPVS有三種常見的負載均衡技術,NAT/DR/TUN 三種方式。也算是有各自的優劣點吧。

_ VS/NAT VS/TUN VS/DR
Server any Tunneling Non-arp device
server network private LAN/WAN LAN
server number low (10~20) High (100) High (100)
server gateway load balancer own router Own router
先放出官方對比的表。

因爲是在內部網絡下搭建的,所以我們使用的方法是在一臺機器上面創建多個虛擬機的方式進行模擬多個機器的方式進行測試,這樣可以避免中間因爲網絡情況複雜,而且對實踐還不太明白的時候出現太多錯誤。

1.IPVS/NAT模式:這種模式下由一臺負載均衡服務器充當網關,將消息轉發給後臺幾臺web server進行處理,後臺服務器將對應的response迴應給負載均衡服務器,再返回給各個用戶,這樣用戶也不會感知到有實際服務器的存在,類似於反向代理。但是這種模式下的負載均衡服務器容易成爲瓶頸。


在這裏,我直接使用了負載均衡服務器充當了網關,所以後面幾臺服務器的路由都要指向它。

中間遇到的坑是:

(1)由於在虛擬機中按NAT分配的時候,會自動給虛擬網絡的路由表分配一條指向默認網關的路由規則,如果直接添加的時候,會出現curl: (56) Recv failure: Connection reset by peer, 這種情況需要仔細檢查下路由表。

2.IPVS/DR模式,這種模式下需要將負載均衡服務器和後臺的real server在物理上在一個網段內。在負載均衡服務器接受到請求之後,可以直接將數據幀的MAC地址寫成對應的選出的real server的mac地址。並且由該服務器直接返回給對應的請求者。


配置的時候主要要記得關閉real server的arp表發現和更新功能,這樣可以避免request無法轉發到合適的服務器。

3 IPVS/TUN模式,這種模式運用IP隧道模式,甚至可以直接在IP包外層封裝IP包,再將對應的鏈接轉發給指定的real server, 由對應的real server將IP包處理,關於包的細節可以用wireshark進行監聽查看。


中間用WireShark抓的包如下圖所示。


這裏主要的坑是在設置webServer的時候,記得將 rp_filter  參數關閉掉。rp_filter的作用是控制系統是否開啓對數據包源地址的校驗,會檢測反向路徑是否是最佳路由路徑(嚴格)/或者是否能通(寬鬆),不是就丟掉。如果不關掉可能會出現有些請求顯示被轉發給real server,但是對應的real server並沒有響應紀錄。

關於IPVS的幾種負載均衡算法,這裏只測試了rr/wrr/lc/wlc方式,而其他兩種針對訪問的目的地址去做負載均衡的方法,找了很多資料之後實在無法理解到,先紀錄在這裏。

關於IPVS的一些調試方法:

1、使用route和ping,tcpdump等工具檢查對應的網絡連接情況。

2、使用ipvsadm的命令查看轉發情況和轉發tcp/UDP狀態

root@roaddb-VirtualBox:/home/roaddb# ipvsadm -l --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  10.69.142.28:http                 100      564      432    40110    83556
  -> 10.0.2.4:http                      33      231      165    16995    37290
  -> 10.0.2.5:http                      33      231      165    16995    37290
  -> 10.0.2.15:http                     34      102      102     6120     8976
root@roaddb-VirtualBox:/home/roaddb# ipvsadm -l -c
IPVS connection entries
pro expire state       source             virtual            destination
TCP 00:52  SYN_RECV    10.69.142.70:57004 10.69.142.80:http  10.69.142.73:http

3.檢查對應的Nginx log確認轉發的情況。

關於keepalived,keepalived主要用來做前端負載均衡服務器的備份,可以在負載均衡服務器掛掉的時候自動使用backup機進行替換,並且對後端的真實服務器可以起監督作用,當有真實服務器掛掉的時候,通過把權重置位0的方式迅速的切換過來。keepalived的原理是路由選舉算法。文檔地址:http://www.keepalived.org/doc/

keepalived的配置項中主要有兩個配置要注意:

(1)inhibit_on_failure 這個參數主要是爲了監視真實服務器的情況,在掛掉的情況下可以不轉發給這個服務器,起起來的時候也可以重新配回規則

(2)persistence_timeout 這個是連接的粘連參數,可以在一段時間內把鏈接都轉發給選定的服務器。

進一步進行備份的還有heartbeat等,說是比keepalived的功能更強大[doing]

參考連接網頁:https://www.cnblogs.com/kevingrace/p/6248941.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章