1. 程式人生 > >用 LVS 搭建一個負載均衡叢集

用 LVS 搭建一個負載均衡叢集

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

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

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

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

LVS 路由器配置

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

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

Shell
123 yum groupinstall"Load Balancer"chkconfig piranha-gui onchkconfig pulse on

2.配置 WEB 管理的密碼

Shell
1 /usr/sbin/piranha-passwd

3.在 iptables 中配置放行埠

Shell
12 vim/etc/sysconfig/iptables-AINPUT-mstate--state NEW-mtcp-ptcp--dport3636-jACCEPT

4.啟動 WEB 管理

Shell
1 service piranha-gui start

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

5.開啟報文轉發

Shell
1234 vim/etc/sysctl.confnet.ipv4.ip_forward=1sysctl-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
12345678 [root@lvsrouter~]# ipvsadmIP Virtual Server version1.2.1(size=4096)Prot LocalAddress:Port Scheduler Flags->RemoteAddress:Port Forward Weight ActiveConn InActConnTCP192.168.122.10:http wlc->192.168.122.1:http Route100->192.168.122.2:http Route100->192.168.122.3:http Route100

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

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

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

Shell
1 ip addr add192.168.12.10dev eth0:1

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

Shell
12 vim/etc/rc.localip addr add192.168.12.10dev eth0:1

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

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

Shell
123 yum-yinstall arptables_jfarptables-AIN-d<cluster-ip-address>-jDROParptables-AOUT-s<cluster-ip-address>-jmangle--mangle-ip-s<realserver-ip-address>

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

Shell
12 service arptables_jf savechkconfig--level2345arptables_jf on

4.測試

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

Shell
12 ping192.168.122.10arp|grep192.168.122.10

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

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

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

使用 Tsung 對叢集進行效能測試

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

Shell
123 [root@loadnode1~]tsung startStarting Tsung"Log directory is: /root/.tsung/log/20120421-1004"

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

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

Shell
123 yum-yinstall htop cluster-sshcssh node1 node2 node3...htop

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

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

在 Tsung 執行結束之後,可以檢視叢集伺服器壓力測試的詳細測試報告。

Shell
123 cd/root/.tsung/log/20120421-1004/usr/lib/tsung/bin/tsung_stats.plfirefox report.html

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