- 第一篇:《如何生成每秒百萬級別的 HTTP 請求?》
- 第二篇:《為最佳效能調優 Nginx》
- 第三篇:《用 LVS 搭建一個負載均衡叢集》
這篇文章是《打造3百萬次請求/秒的高效能伺服器叢集》系列的第3部分,有關於效能測試工具以及優化WEB伺服器部分的內容請參看以前的文章。
本文基於你已經優化好伺服器以及網路協議棧的基礎之上,並使用 iperf
與 netperf
工具測試將伺服器已優化到支援 500,000 次/秒的靜態WEB頁面的效能。
現在你已經做好足夠準備進行安裝伺服器叢集。
Redhat 官網已經有一些不錯的文章,所以我建議你在遇到不明白的問題時檢視一下這些文章。不過你先別擔心,我接下會一步步地講解群集搭建的所有操作。
LVS 路由器配置
這裡需要一臺裝置作為路由器,它負責將 TCP 流量均衡到 LVS 叢集中的每一臺伺服器。因此你需要拿出一臺裝置按以下操作進行配置。如果你的 IP 路由的流量非常小的話,你可拿一臺效能最比較弱伺服器做為路由器。
1.在 LVS 路由器上安裝 LVS 軟體
1 2 3 |
yum groupinstall "Load Balancer" chkconfig piranha-gui on chkconfig pulse on |
2.配置 WEB 管理的密碼
1 |
/usr/sbin/piranha-passwd |
3.在 iptables 中配置放行埠
1 2 |
vim /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3636 -j ACCEPT |
4.啟動 WEB 管理
1 |
service piranha-gui start |
-> 一定要等到 Piranha 配置結束之後再開啟 pulse 。
5.開啟報文轉發
1 2 3 4 |
vim /etc/sysctl.conf net.ipv4.ip_forward = 1 sysctl -p /etc/sysctl.conf |
6.啟動 WEB 伺服器
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 對每臺伺服器進行配置。
1 |
service pulse start |
輸入 ipvsadm 可以看到叢集已經正常啟動。
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 地址。
1 |
ip addr add 192.168.12.10 dev eth0:1 |
由於我們希望 IP 地址配置在伺服器重啟之後也能生效,因此需要將配置寫入 /etc/rc.local 檔案中。
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請求。
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 表項配置。
1 2 |
service arptables_jf save chkconfig --level 2345 arptables_jf on |
4.測試
如果 arptables 命令配置正確,只有 LVS 路由器才會應答 Ping 請求。首先確保 pulse 已關閉,之後從群集的任一真實伺服器上 ping 虛擬 IP 地址,如果有真實伺服器迴應這個請求,你可以通過檢視 ARP 表項看到它。
1 2 |
ping 192.168.122.10 arp | grep 192.168.122.10 |
這裡可以看到解析到伺服器的 MAC 地址,然後在這臺伺服器上關閉 ARP 響應。
還有一個簡單而有效測試方法就是使用 curl 向叢集請求 WEB 頁面,你可以在 LVS 路由器上通過命令 ipvsadm 檢視到資料流量。
1 2 |
[root@lvsrouter ~]# watch ipvsadm [user@outside ~]$ curl http://192.168.122.10/test.txt |
使用 Tsung 對叢集進行效能測試
到此為此叢集伺服器已經配置完畢並工作正常,這時你可以通過壓力測試看到它的效能是多麼的強大。參考一下這篇文章對 Tsung 進行配置並生成有效的資料流對叢集進行測試。
1 2 3 |
[root@loadnode1 ~] tsung start Starting Tsung "Log directory is: /root/.tsung/log/20120421-1004" |
建議測試至少進行 2 個小時以上,因為測試需要經過比較長的時間才能看到 HTTP 的峰值請求速率。在整個測試過程中你可以在叢集伺服器上通過 htop 命令看到每個 CPU 核的率用率。
這裡假設你已經安裝好了 EPEL 和 RPMforge 源。
1 2 3 |
yum -y install htop cluster-ssh cssh node1 node2 node3 ... htop |
你可以看到 HTTP 伺服器在高速地接收並回應 WEB 請求,整個過程 LVS 路由器實際沒有多少負載。
在實際使用中請確保伺服器的 CPU 佔所有核的總負責的平均值小於 CPU 的總核數(比如:我的 24 核系統中,我始終保持負載小於等於 23 個核的能力。),這樣所有 CPU 即能夠充分發揮能力,同時系統又能夠具備單一失效時的冗餘能力。
在 Tsung 執行結束之後,可以檢視叢集伺服器壓力測試的詳細測試報告。
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 路由硬體能力的交換機或專用負載均衡硬體裝置,在不需要複雜流量均衡策略(如:基於應用的均衡)的群集中,使用交換機價效比較高。