База знаний VMmanager

Если узел кластера недоступен

VMmanager устанавливает статус "Недоступен" для узла кластера, если:

  • узел недоступен по SSH;
  • нет доступа к программному обеспечению libvirt на этом узле.

Чтобы восстановить доступ, подключитесь к узлу вручную и устраните причину неполадки.

Если нет доступа по SSH

  1. Проверьте, что узел кластера доступен по сети с сервера VMmanager.
  2. Проверьте, что SSH-ключ, используемый для подключения, указан верно:
    1. Посмотрите содержимое открытого SSH-ключа на сервере с VMmanager:

      docker exec -it vm_box cat /opt/ispsystem/vm/etc/.ssh/vmmgr.1.pub
    2. Проверьте, содержится ли ssh-ключ из ответа команды в файле root/.ssh/autorized_keys на узле кластера. Если ключ отсутствует, добавьте его в файл.
  3. Проверьте открыты ли на узле кластера входящие соединения для SSH:

    lsof -i | grep :ssh

    Если входящие соединения закрыты, обратитесь к вашему системному администратору для настройки SSH и файрвола.

  4. Проверьте, что количество соединений по SSH на узле кластера не превышает лимит:

    cat /etc/ssh/sshd_config | grep maxSessions

    Если лимит превышен:

    1. Увеличьте параметр maxSessions в файле /etc/ssh/sshd_config.
    2. Перезапустите службу SSH:

      systemctl restart sshd
  5. Убедитесь, что в файле /etc/ssh/sshd_config разрешено подключение под учётной записью root. Если разрешение отсутствует, добавьте в файл строку:

    PermitRootLogin yes

Если нет доступа к libvirt

  1. Проверьте, что узел кластера доступен по сети с сервера VMmanager.
  2. Запустите подключение платформы к узлу: перейдите в Узлы → выберите узел → меню Изменить параметры подключения → не изменяйте заданные параметры → кнопка Подключиться к узлу.
  3. Проверьте, запущен ли на узле кластера сервис libvirtd:

    systemctl status libvirtd.service
  4. Если сервис не запущен, запустите его:

    systemctl start libvirtd.service
  5. Проверьте, открыт ли на узле кластера порт TLS — 16514/tcp:

    Команда для firewalld
    firewall-cmd --list-ports
    Команда для nftables
    nft list ruleset | grep 16514
  6. Если порт закрыт, откройте его:

    Команда для firewalld
    firewall-cmd --permanent --add-port=16514/tcp && firewall-cmd --reload
    Команда для nftables
    nft add rule inet filter INPUT tcp dport 16514 ct state { new, untracked } accept && nft list ruleset > /etc/nftables/vmmgr.nft
    Пояснения к команде
  7. Проверьте cрок действия сертификата libvirt. Сертификат libvirt — это TLS-сертификат, который сервис libvirt использует для проверки идентичности сервера и клиентов: 

    /usr/bin/certtool --certificate-info --infile /etc/pki/libvirt/clientcert.pem | grep 'Not After'
    Пример ответа
    Not After: Fri Nov 18 06:12:43 UTC 2050

    Если срок действия истёк, обновите сертификат:

    1. Получите токен авторизации:
      curl -k -X POST -H "accept: application/json" -H "Content-Type: application/json" 'https://domain.com/api/auth/v4/public/token' -d '{"email": "admin_email", "password": "admin_pass"}'
      Пояснения к команде

      В ответ придёт сообщение вида:

      Пример ответа в JSON
      {
        "confirmed": true,
        "expires_at": null,
        "id": "6",
        "token": "4-e9726dd9-61d9-2940-add3-914851d2cb8a"
      }

      Сохраните полученное значение параметра token — токен авторизации.

    2. Выполните запрос: 

      curl -k -X POST "https://domain.com/vm/v3/node/<node_id>/cert" -H "Cookie: <auth_token> " -H "x-xsrf-token: <auth_token> " -H "isp-box-instance: true" -H "accept: */*" -H "Content-Type: application/json" -d ''
      Пояснения к команде

      Обновление сертификата может занять несколько минут.

    3. Чтобы узнать результат обновления, откройте список задач в интерфейсе платформы и просмотрите информацию о задаче с типом "Обновление сертификатов TLS на узле".
  8. При необходимости выполните настройку сервиса libvirt:
    1. Остановите сервис: 

      systemctl stop libvirtd.socket
    2. Для узлов с ОС AlmaLinux 8 в файле /etc/sysconfig/libvirtd замените строку LIBVIRTD_ARGS = "–listen" на LIBVIRTD_ARGS=.
    3. В файле /etc/libvirt/libvirtd.conf:
      1. Раскомментируйте строку #listen_tls = 1.
      2. Замените строку listen_addr = на listen_addr = "0.0.0.0".
    4. В файле /etc/libvirt/qemu.conf замените строку vnc_listen = на vnc_listen = <адрес узла>.
    5. Запустите сервис: 

      systemctl start libvirtd.socket
  9. Запустите подключение платформы к узлу: перейдите в Узлы → выберите узел → меню Изменить параметры подключения → не изменяйте заданные параметры → кнопка Подключиться к узлу.
  10. Если подключение не восстановилось, перезапустите libvirtd:

    systemctl stop libvirtd-ro.socket
    systemctl stop libvirtd-admin.socket
    systemctl stop libvirtd.socket
    systemctl stop libvirtd.service
    systemctl start libvirtd-tls.socket
    systemctl start libvirtd-ro.socket
    systemctl start libvirtd-admin.socket
    systemctl start libvirtd.socket
  11. Если командой выше не удалось перезапустить сервис, перезапустите libvirtd одной из следующих команд в зависимости от ОС:
    • для AlmaLinux 8:

      systemctl restart libvirtd.socket
    • для AlmaLinux 8 с версиями libvirt меньше 5.6:

      systemctl stop libvirtd-ro.socket
      systemctl stop libvirtd-admin.socket
      systemctl stop libvirtd.socket
      systemctl stop libvirtd.service
      systemctl start libvirtd-tls.socket
    • для других ОС:

      systemctl restart libvirtd.service