четверг, 16 июня 2011 г.

HA Isolation and restart delay


Когда VMware HA обнаруживает отказавший сервер, то предпринимается несколько попыток перезапустить ВМ с проблемного сервера.

Зачем попыток несколько?

На случай если первая попытка была неудачной из за заблокированных файлов ВМ.
Обычно, как я понимаю, это происходит не при падении сервера, а при изоляции сервера - когда сервер жив но из за проблем в сети остальные думают что он мертв.

Но не суть.

Итак, попыток несколько. Если как Т обозначить момент фиксации сбоя, то попытки рестарта происходят по следующему расписанию:

T       – Рестарт
T+2   – Повтор 1 (через 2 минуты после предыдущего)
T+6   – Повтор 2 (через 4 минуты после предыдущего)
T+14 – Повтор 3 (через 8 минут после предыдущего)
T+22 – Повтор 4 (через 8 минут после предыдущего)
T+30 – Повтор 5 (через 8 минут после предыдущего)

т.е. через 2, 6, 14, 22 и 30 минут после момента отказа.

С одной стороны, вероятность того, что уже 2-3 попытка окажется безуспешной, а смысл продолжать пытаться будет - мне видится не очень большой.

С другой стороны, если изолированный сервер выключил свои ВМ, минуте на 15 после сбоя, то ждать 8 минут до следующей попытки рестарта может быть многовато.

С третьей стороны, сделать все равно ничего нельзя.

Однако есть информация о неподдерживаемом способе - VMware High Availability Isolation Event – Hack The Eight Minutes Delay:
  1.     Go to your ESXi host console (SSH)
  2.     And navigate to /opt/vmware/aam/ha
  3.     vi vmwaremanager.pl
  4.     Scroll down to line 37: “my $VM_RESTART_DELAY_MAX = 480; #8 min“
  5.     Change the value to whatever you want, i.e. 120
  6.     Save and quit
  7.     Restart the management agents: service mgmt-vmware restart and service vmware-vpxa restart
  8.     Tests :)




3 комментария:

  1. Ещё можно уменьшить фактор замедления с двух на полтора:


    --- vmwaremanager.pl.old 2011-06-16 14:09:01.043830510 +0400
    +++ vmwaremanager.pl 2011-06-16 14:09:59.476307152 +0400
    @@ -5248,7 +5248,7 @@

    my $cnt = &GetVMRestartCount($VMName);
    while(--$cnt > 0) {
    - $delay = $delay*2;
    + $delay = $delay*3/2;
    }
    if ($delay > $VM_RESTART_DELAY_MAX*$pendingCount) {
    $delay = $VM_RESTART_DELAY_MAX*$pendingCount;

    ОтветитьУдалить
  2. Вдогонку: а при реактивации HA, например, после апдейта базового ПО хоста, эти изменения не потеряются ли? Откуда вообще берётся исходник -- из недр vServer или всё-таки более доступного места? ;-)

    ОтветитьУдалить
  3. спасибо.

    по поводу вопроса - точной инфы нет, но по идее эти настройки должны расползаться по хостам. так что апдейт ESXi их затронуть не должен.

    ОтветитьУдалить