У меня есть локальный кластер из 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), будьте осторожны, чтобы не вызвать аварийное переключение из-за тайм-аута сети.
Вы можете установить сохраняемость / репликацию сеанса на уровне приложения, чтобы пользователь не пострадал от отработки отказа.