[原]一個針對LVS的壓力測試報告

LVS 測試報告

測試計劃

  1. 基本功能測試
  2. 流量壓力測試
  3. 響應時間測試
  4. 配置正確性測試
  5. 災難恢復測試

測試點

  1. 基本功能測試
    • 客戶端IP地址正確性
    • RealServer 訪問Internet測試(包括Iptables 規則優先級)
  2. 流量壓力測試
    • 流量峯值測試
      • 流量達到必定值後的CPU,網卡IO,軟中斷狀況等
    • 鏈接數峯值測試
      • 鏈接數達到必定值後,內存,CPU的狀況等
  3. 響應時間測試
    • 在增長LVS先後相應時間對比
  4. 配置正確性測試
    • RR算法的預期值(基本功能)
    • 多配置狀況下的性能
      • 添加上萬條規則後,轉發性能是否有影響
  5. 災難恢復測試
    • 配置導出導入測試

測試環境

  • CPU Intel(R) Xeon(R) CPU E5506 @ 2.13GHz x 8
  • 內存 16G
  • 網卡 negotiated 1000baseT-FD
  • 系統 Ubuntu 12.04
  • 內核 3.5.0-23-generic

實測結果


1. 基本功能測試

客戶端地址正確性

訪問流程
Web Browser.Zhuhai 
113.106.x.x -> LVS(58.215.138.160) -> RS(10.20.165.174)

RS Nginx 日誌以下
113.106.x.x - - [12/Feb/2015:00:18:48 +0800] "GET / HTTP/1.1" 200 612 "

結論:
驗證NAT模式下客戶端地址正確性爲可以獲取真實IP.nginx

RealServer 訪問Internet

RS 網絡配置以下, gateway 爲LVS的內網IP算法

auto eth0
iface eth0 inet static
address 10.20.165.173
gateway 10.20.165.121
netmask 255.255.255.0

在 LVS 下添加以下 iptables 規則後端

/sbin/iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE

實測:網絡

zhangbo3@rise-vm-173:~$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_req=1 ttl=44 time=62.0 ms
64 bytes from 8.8.8.8: icmp_req=2 ttl=44 time=62.2 ms

2. 流量壓力測試

高流量測試

針對一臺LVS 作高流量測試,測試過程當中,併發200,20000個請求。
只針對網卡流量來看,內存,磁盤,CPU User time 不統計
每一個請求返回7MB大小的包。併發

壓測峯值800Mb
高併發

此時的軟中斷
性能

實測軟中斷峯值只到0.7%
此時的IN包數
測試

此時的OUT包數
3d

包數IN + OUT 峯值爲 100K日誌

高併發小包測試

針對一臺LVS 作高併發小包測試,測試過程當中,併發80000,4KW個請求。
每一個請求返回2K大小的包。

峯值IN 流量 772Mbps 平均大概750Mbps

峯值OUT 流量 773Mbps 平均大概750Mbps

峯值IN 包數 149KPS 平均大概140KPS

峯值OUT 包數 103KPS 平均大概 90KPS

測試過程當中軟中斷 峯值 8.2% 平均大概 7%

測試結果:
分別測試了LVS 在大包高流量狀況下和小包高併發狀況下的表現。
高流量狀況下,能夠徹底的利用網卡性能,且無丟包和出錯狀況,千M網卡流量到800Mb,軟中斷平均在 0.7%。
高併發小包狀況下,帶寬爲750Mbps,包流量爲250KPs的狀況下(已經接近網卡極限),軟中斷平均在 7%.
兩種狀況的測試結果代表,不管是高流量仍是高併發,LVS 都可以在網卡的額定值內發揮正常。
以上測試均爲對多隊列網卡作軟中斷綁定的表現.


3. 響應時間測試

對比增長LVS先後相應時間變化

10000個併發,10W請求下

LVS 後端增長一臺RealServer狀況下

Concurrency Level:      10000
Time taken for tests:   13.198 seconds
Time per request:       0.132 [ms]

在未添加LVS 狀況下,單獨測試Realserver 數據

Concurrency Level:      10000
Time taken for tests:   14.474 seconds
Time per request:       0.145 [ms]

總結:
在增長了LVS先後,響應時間幾乎沒有影響.


4. 配置正確性測試

RR算法的預期值(基本功能)

分別用兩臺獨立IP的機器對LVS作大量的長鏈接訪問,以下爲 LVS 的鏈接分佈狀況.

zhangbo3@rise-rs-135:/usr/local/nginx/conf$ sudo ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn     
TCP  58.215.x.x:80 rr
  -> 10.20.165.173:80             Masq    1      3332       14797     
  -> 10.20.165.174:80             Masq    1      3198       14931

總結:
RR算法,同一個Src IP也會定向到同一個LVS

多配置狀況下的性能

初始狀況下,普通配置時候,單臺機器壓測數據

Concurrency Level:      10000
Time taken for tests:   5.530 seconds
Complete requests:      50000
Failed requests:        0
Write errors:           0
Keep-Alive requests:    49836
Total transferred:      42149180 bytes
HTML transferred:       30600000 bytes
Requests per second:    9040.98 [#/sec] (mean)
Time per request:       1106.074 [ms] (mean)
Time per request:       0.111 [ms] (mean, across all concurrent requests)
Transfer rate:          7442.78 [Kbytes/sec] received

向 LVS 中添加1W個端口映射後的壓測數據

Concurrency Level:      10000
Time taken for tests:   5.588 seconds
Complete requests:      50000
Failed requests:        0
Write errors:           0
Keep-Alive requests:    49974
Total transferred:      42149870 bytes
HTML transferred:       30600000 bytes
Requests per second:    8948.49 [#/sec] (mean)
Time per request:       1117.506 [ms] (mean)
Time per request:       0.112 [ms] (mean, across all concurrent requests)
Transfer rate:          7366.76 [Kbytes/sec] received

總結:
添加上網條端口映射後,對系統性能無影響.


5. 災難恢復測試

鏈接狀態測試

keepalived雙機備份的狀況下,打開LVS的鏈接狀態後,查看同步狀態發現沒同步ESTABLISHED狀態,SYNC_RCV,TIME_WAIT狀態均已同步,握手和關閉的狀態都會同步,可是ESTABLISHED的狀態要發送必定的數據包才同步,默認數據包是3個,每秒50個包的頻率.

配置導出導入測試

sudo ipvsadm -Sn 
可導出當前配置
相關文章
相關標籤/搜索