High-Availability
keepalived 無失敗請求的架構
我有一個由 3 個 CentOs 伺服器組成的本地集群,我在每台伺服器上都安裝了 Keepalived,然後我使用 ab 執行一些基準測試,如下所示:
ab -c 1000 -n 100000 -r host
然後在基準測試的中間,我關閉了主伺服器,並且 Keepalived 將浮動 ip 的所有者更改為備用伺服器之一,但是這個過程需要一點時間,因此我有一些失敗的請求。我的問題是如何最大限度地減少停機時間?無論如何設計一些在關閉一個節點時完全沒有停機時間的集群?
這是我的keepalived配置:
! Configuration File for keepalived global_defs { notification_email { user@localhost } notification_email_from root@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script health_check { script "curl host" interval 2 # check every 2 seconds fall 2 # require 2 failures for KO rise 2 # require 2 successes for OK } vrrp_instance VI_1 { state BACKUP interface enp0s3 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass password } virtual_ipaddress { <host ip> } track_script { health_check } }
這是我的基準測試的結果:
Concurrency Level: 1000 Time taken for tests: 25.502 seconds Complete requests: 100000 Failed requests: 7618 (Connect: 0, Receive: 2539, Length: 2539, Exceptions: 2540) Write errors: 0 Total transferred: 13644540 bytes HTML transferred: 2241603 bytes Requests per second: 3921.28 [#/sec] (mean) Time per request: 255.019 [ms] (mean) Time per request: 0.255 [ms] (mean, across all concurrent requests) Transfer rate: 522.50 [Kbytes/sec] received
這表明更改虛擬IP的所有者並處理請求幾乎需要2秒。我該怎麼做才能最大限度地減少這段時間,如果可能的話,最好不要停機。
基本上,即使在硬體負載均衡器中也很難避免停機,它需要時間來檢測主伺服器停機並遷移 VIP 地址。
您可以通過調整keepalived心跳頻率來最小化停機時間(以秒為單位的advert_int)
當 BACKUP 伺服器在“advert_int”選項中定義的時間段的 3 倍內未收到來自 MASTER 的 VRRP 廣告時,將觸發從 MASTER 到 BACKUP 的故障轉移。
盡量設置低 advert_int (<1),注意不要因為網路超時觸發故障轉移。
您可以在應用層設置會話持久性/複製,這樣使用者就不會受到故障轉移的影響。