1. 程式人生 > >用 LVS 搭建一個負載均衡集群(轉)

用 LVS 搭建一個負載均衡集群(轉)

always iptable sina watch 通過 main test 集群服務器 負載

http://blog.jobbole.com/87503/

  • 第一篇:《如何生成每秒百萬級別的 HTTP 請求?》
  • 第二篇:《為最佳性能調優 Nginx》
  • 第三篇:《用 LVS 搭建一個負載均衡集群》

這篇文章是《打造3百萬次請求/秒的高性能服務器集群》系列的第3部分,有關於性能測試工具以及優化WEB服務器部分的內容請參看以前的文章。

本文基於你已經優化好服務器以及網絡協議棧的基礎之上,並使用 iperfnetperf 工具測試將服務器已優化到支持 500,000 次/秒的靜態WEB頁面的性能。

現在你已經做好足夠準備進行安裝服務器集群。

Redhat 官網已經有一些不錯的文章,所以我建議你在遇到不明白的問題時查看一下這些文章。不過你先別擔心,我接下會一步步地講解群集搭建的所有操作。

LVS 路由器配置

這裏需要一臺設備作為路由器,它負責將 TCP 流量均衡到 LVS 集群中的每一臺服務器。因此你需要拿出一臺設備按以下操作進行配置。如果你的 IP 路由的流量非常小的話,你可拿一臺性能最比較弱服務器做為路由器。

1.在 LVS 路由器上安裝 LVS 軟件

Shell
1 2 3 yum groupinstall "Load Balancer" chkconfig piranha-gui on chkconfig pulse on

2.配置 WEB 管理的密碼

Shell
1 /usr/sbin/piranha-passwd

3.在 iptables 中配置放行端口

Shell
1 2 vim /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3636 -j ACCEPT

4.啟動 WEB 管理

Shell
1 service piranha-gui start

-> 一定要等到 Piranha 配置結束之後再開啟 pulse 。

5.打開報文轉發

Shell
1 2 3 4 vim /etc/sysctl.conf net.ipv4.ip_forward = 1 sysctl -p /etc/sysctl.conf

6.啟動 WEB 服務器

Shell
1 [root@webservers ~] service nginx start

Direct Routing 模式配置

1.在 LVS 路由器上登錄 Piranha WEB 管理界面進行配置。

技術分享圖片

在 GLOBAL SETTINGS 頁中查看,默認采用是 Direct Routing 模式,我們需要通過這個頁面下的功能進行配置 LVS WEB 集群服務器的虛擬 IP 地址(Virtual IP)。

2.選擇 VIRTUAL SERVERS 標簽頁,創建虛擬 WEB 服務器, 這裏的服務器就是你的 WEB 服務器集群。通過這個配置可以讓你有多臺服務器對外像是一臺服務器,因此又被稱作虛擬服務器(virtual server)。

點擊 ADD,然後點 EDIT。

技術分享圖片

3.編輯虛擬服務器,首先選擇一個 IP 地址作為 Virtual IP(IP 不作為真實服務器使用),然後選擇一個設備接口(Device)進行綁定。

點擊 ACCEPT 完成配置,這個時候 WEB 頁面並不會刷新,不過此時配置已經保存完畢。

點擊 REAL SERVER 進行下一步真實服務器配置。

技術分享圖片

4.配置真實服務器,REAL SERVER 頁面用於配置 WEB 集群所對應的真實服務器。

用 ADD 將所有的 HTTP 服務器添加進來,然後用 EDIT 進行服務器的詳細配置,之後點 ACCEPT 進行保存。

如果需要重新配置集群,先點 VIRTUAL SERVER 之後重新配置 REAL SERVER。

在 REAL SERVER 頁配置完所有的真實服務器之後,依次選擇每一行後點擊 (DE)ACTIVATE 進行激活。

技術分享圖片

5.至此,所有的真實服務器配置並激活完畢,下接下來回到 VIRTUAL SERVERS 頁

點 (DE)ACTIVATE 激活虛擬服務器。

技術分享圖片

到此為止路由器配置完畢,現在你可以關閉並退出瀏覽器,接下來要打開 pulse 對每臺服務器進行配置。

Shell
1 service pulse start

輸入 ipvsadm 可以看到集群已經正常啟動。

Shell
1 2 3 4 5 6 7 8 [root@lvsrouter ~]# ipvsadm IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.122.10:http wlc -> 192.168.122.1:http Route 1 0 0 -> 192.168.122.2:http Route 1 0 0 -> 192.168.122.3:http Route 1 0 0

Direct Routing – 配置每臺真實服務器節點

在集群中的每臺服務器上按以下步驟進行配置。

1.為真實服務器配置虛擬 IP 地址。

Shell
1 ip addr add 192.168.12.10 dev eth0:1

由於我們希望 IP 地址配置在服務器重啟之後也能生效,因此需要將配置寫入 /etc/rc.local 文件中。

Shell
1 2 vim /etc/rc.local ip addr add 192.168.12.10 dev eth0:1

2.在真實服務器上為虛擬 IP 配置 ARP 表項。

這裏要關閉所有真實服務器對虛擬 IP 地址的 ARP 請求的響應,這些服務器只響應物理 IP 地址的ARP請求,在整個集群系統中,僅有 LVS 路由器才能響應虛擬 IP 地址的ARP請求。

Shell
1 2 3 yum -y install arptables_jf arptables -A IN -d <cluster-ip-address> -j DROP arptables -A OUT -s <cluster-ip-address> -j mangle --mangle-ip-s <realserver-ip-address>

3.在真實服務器上配置完畢之後,保存 ARP 表項配置。

Shell
1 2 service arptables_jf save chkconfig --level 2345 arptables_jf on

4.測試

如果 arptables 命令配置正確,只有 LVS 路由器才會應答 Ping 請求。首先確保 pulse 已關閉,之後從群集的任一真實服務器上 ping 虛擬 IP 地址,如果有真實服務器回應這個請求,你可以通過查看 ARP 表項看到它。

Shell
1 2 ping 192.168.122.10 arp | grep 192.168.122.10

這裏可以看到解析到服務器的 MAC 地址,然後在這臺服務器上關閉 ARP 響應。

還有一個簡單而有效測試方法就是使用 curl 向集群請求 WEB 頁面,你可以在 LVS 路由器上通過命令 ipvsadm 查看到數據流量。

Shell
1 2 [root@lvsrouter ~]# watch ipvsadm [user@outside ~]$ curl http://192.168.122.10/test.txt

使用 Tsung 對集群進行性能測試

到此為此集群服務器已經配置完畢並工作正常,這時你可以通過壓力測試看到它的性能是多麽的強大。參考一下這篇文章對 Tsung 進行配置並生成有效的數據流對集群進行測試。

Shell
1 2 3 [root@loadnode1 ~] tsung start Starting Tsung "Log directory is: /root/.tsung/log/20120421-1004"

建議測試至少進行 2 個小時以上,因為測試需要經過比較長的時間才能看到 HTTP 的峰值請求速率。在整個測試過程中你可以在集群服務器上通過 htop 命令看到每個 CPU 核的率用率。

這裏假設你已經安裝好了 EPEL 和 RPMforge 源。

Shell
1 2 3 yum -y install htop cluster-ssh cssh node1 node2 node3 ... htop

技術分享圖片

你可以看到 HTTP 服務器在高速地接收並回應 WEB 請求,整個過程 LVS 路由器實際沒有多少負載。

在實際使用中請確保服務器的 CPU 占所有核的總負責的平均值小於 CPU 的總核數(比如:我的 24 核系統中,我始終保持負載小於等於 23 個核的能力。),這樣所有 CPU 即能夠充分發揮能力,同時系統又能夠具備單一失效時的冗余能力。

在 Tsung 執行結束之後,可以查看集群服務器壓力測試的詳細測試報告。

Shell
1 2 3 cd /root/.tsung/log/20120421-1004 /usr/lib/tsung/bin/tsung_stats.pl firefox report.html

譯者註:LVS 主創人為阿裏雲 CTO 章文嵩博士,是我朝人民長臉作之一,其在服務器群集中應用廣泛,相比於 M$ 的 NLB 群集技術而言更為強大,文中的 DR 模式使用通用服務器做為流量均衡設備,性能相對較弱,在實際高性能群集應用中,通常采用具備三層 ECMP 路由硬件能力的交換機或專用負載均衡硬件設備,在不需要復雜流量均衡策略(如:基於應用的均衡)的群集中,使用交換機性價比較高。

用 LVS 搭建一個負載均衡集群(轉)