High-Availability

keepalived 無失敗請求的架構

  • May 31, 2017

我有一個由 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),注意不要因為網路超時觸發故障轉移。

您可以在應用層設置會話持久性/複製,這樣使用者就不會受到故障轉移的影響。

引用自:https://serverfault.com/questions/853188