Product SiteDocumentation Site

36.6. Поддержка внешнего арбитра corosync

Добавив в кластер PVE внешний арбитр, можно добиться того, что кластер сможет выдержать большее количество отказов узлов без нарушения работы кластера.
Для работы арбитра задействованы две службы:
  • Corosync Quroum (QDevice) — служба, которая работает на каждом узле кластера PVE. Она предоставляет настроенное количество голосов подсистеме кворума на основе решения внешнего управляющего арбитра. Основное назначение этой службы — позволить кластеру выдержать большее количество отказов узлов, чем это позволяют стандартные правила кворума. Арбитр видит все узлы и может выбрать только один набор узлов, чтобы отдать свой голос (это будет сделано только в том случае, если указанный набор узлов при получении голоса арбитра сможет иметь кворум).
  • Внешний арбитр, который работает на независимом сервере. Единственное требование к арбитру — наличие сетевого доступа к кластеру.

Примечание

В настоящее время Qdevices для кластеров с нечетным числом узлов не поддерживается. Это связано с разницей в количестве голосов, которые QDevice предоставляет для кластера.
Кластеры с чётным числом узлов получают один дополнительный голос, что только увеличивает доступность, поскольку сбой самого QDevice не влияет на работоспособность кластера.
Для кластера с нечётным числом узлов QDevice предоставляет (N-1) голосов, где N — количество узлов кластера. Этот алгоритм допускает сбой всех узлов, кроме одного и самого QDevice. При этом есть два недостатка:
  • если произойдет сбой арбитра, ни один другой узел не может выйти из строя, или кластер немедленно потеряет кворум. Например, в кластере с 15 узлами 7 могут выйти из строя, прежде чем кластер станет неработоспособным. Но если в этом кластере настроен QDevice и он сам выйдет из строя, ни один узел из 15 не может выйти из строя. В этом случае QDevice действует почти как единая точка отказа;
  • возможность выхода из строя всех узлов, кроме одного, плюс QDevice, может привести к массовому восстановлению служб высокой доступности (HA), что может привести к перегрузке единственного оставшегося узла. Кроме того, сервер Ceph прекратит предоставлять услуги, если в сети останется только ((N-1)/2) узлов или меньше.

Важно

При настройке QDevice PVE копирует ключи кластера на внешний сервер. Для добавления QDevice можно временно включить парольную аутентификацию для root в sshd на внешнем сервере:
# control sshd-permit-root-login enabled
# systemctl restart sshd
А после того, как QDevice будет добавлен, отключить:
# control sshd-permit-root-login without_password
# systemctl restart sshd
Для настройки работы арбитра необходимо выполнить следующие действия:
  1. На внешнем сервере:
    • установить пакет corosync-qnetd (из репозитория):
      # apt-get install corosync-qnetd
      
    • запустить и добавить в автозагрузку службу corosync-qnetd:
      # systemctl enable --now corosync-qnetd
      
  2. На всех узлах PVE установить пакет corosync-qdevice (из репозитория):
    # apt-get install corosync-qdevice
    
  3. На одном из узлов PVE настроить QDevice, выполнив команду:
    # pvecm qdevice setup 192.168.0.88
    
    где 192.168.0.88 — IP-адрес арбитра (внешнего сервера).
    SSH-ключи из кластера будут автоматически скопированы в QDevice.
  4. На любом узле PVE проверить статус кластера:
    # pvecm status
    …
    Votequorum information
    ----------------------
    Expected votes:   5
    Highest expected: 5
    Total votes:      5
    Quorum:           3  
    Flags:            Quorate Qdevice 
    
    Membership information
    ----------------------
        Nodeid      Votes    Qdevice Name
    0x00000001          1    A,V,NMW 192.168.0.186 (local)
    0x00000002          1    A,V,NMW 192.168.0.90
    0x00000003          1    A,V,NMW 192.168.0.70
    0x00000004          1    A,V,NMW 192.168.0.91
    0x00000000          1            Qdevice
    
Для добавления нового узла или удаления существующего из кластера с настроенным QDevice, сначала необходимо удалить QDevice. После можно добавлять или удалять узлы в обычном режиме.
Команда удаления QDevice:
# pvecm qdevice remove