Назад | Перейти на главную страницу

архитектура для запросов без сбоев с поддержкой активности

У меня есть локальный кластер из 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 в секундах)

Переход от МАСТЕРА к РЕЗЕРВНОМУ срабатывает, когда сервер РЕЗЕРВНОГО КОПИРОВАНИЯ не получает объявление VRRP от ВЕДУЩЕГО в течение 3-кратного периода времени, определенного в параметре "ad_int".

Попытайтесь установить низкое значение Advert_int (<1), будьте осторожны, чтобы не вызвать аварийное переключение из-за тайм-аута сети.

Вы можете установить сохраняемость / репликацию сеанса на уровне приложения, чтобы пользователь не пострадал от отработки отказа.