Proxmox — это дистрибутив, предназначенный для виртуализации и контейнеризации на базе Debian Linux.
Когда потребности превышают отвечающий за все железный сервер, но еще недостаточно большой для использования Kubernetes, на помощь приходят различные решения, позволяющие управлять кластером из нескольких хостов, организовывать High Availability, репликацию и централизованное резервное копирование контейнеров и виртуализаций. техника. Proxmox является одним из них.

Пользуемся уже больше двух лет, очень довольны: очень многое упрощает: нарезка и резервирование ресурсов, живая миграция (только виртуальные машины qemu), централизованный сбор метрик (без необходимости подгонять экспортер/агент в каждом госте), управление (через WebUI, api и ssh).
Наша сеть выросла с трех серверов до дюжины, а количество хостов Proxmox в настоящее время увеличилось с нуля до восьми. Но иногда и ломается.

Что может пойти не так с Proxmox?

На самом деле много. Сетевые крепления, коросинк, новый замок…
Некоторые неисправности потребуют ручного вмешательства, другие устраняются самостоятельно. Некоторые самоисправления довольно неприятным способом, называемым ограждением, особенно неприятным, если затронутая служба не имеет собственного кластера. Другие сбои происходят только внутри кластера и никогда на одном хосте, другие наоборот.

Отказы одного хоста (узлы)

запертый замок

Проксмокс часто повесить замок на контейнере или ВМ — в интерфейсе это отображается, собственно, значком замка на соответствующем госте. Изменение конфигурации, удаление бэкапа, развертывание/клонирование/миграция — каждая из этих операций блокирует блокировку и обратная команда не всегда выполняется корректно.
Проблема в том, что застрявшая блокировка препятствует выполнению других операций, для которых требуется блокировка.
К счастью, им легко управлять. нужно сделать

  • pct unlock <CTid> для контейнеров
  • qm unlock <VMid> для виртуальных машин
    …на соответствующем хосте Proxmox

Критичность: низкая
Этот тип сбоя затрагивает только одного гостя и не влияет на его работу.

Сбой NAS

Как правило, это определяется по значку со знаком вопроса на накопителе. Proxmox постоянно пытается смонтировать хранилище, если оно включено в конфигурации кластера для соответствующего хоста, но не пытается размонтировать зависшее хранилище.
Легко решить:
umount -nlf <mountpoint>

Критичность: от низкой до высокой
В зависимости от типа хранилища и его назначения, этот сбой может быть совершенно некритичным (установочные образы и образы контейнеров), и наоборот, если, например, ваше резервное хранилище или nfs-шара с запущенными контейнерами дает сбой выполнения.

Отказ внутренних служб самого Proxmox

В интерфейсе это выглядит как вопросительные знаки над самим хостом, его гостями и его репозиториями. В таком состоянии хост может оставаться сколь угодно долго даже в кластере, но он будет полностью неработоспособен из веб-интерфейса, а попытка использования утилит Proxmox через консоль закончится таймаутом и/или блокировкой.
Лучший способ лечения – перезагрузиться через ssh или с помощью KVM-хоста.
Однако, если перезагрузка неприемлема, вы можете попробовать остановить и перезапустить службы Proxmox:

for s in pveproxy spiceproxy pvestatd pve-cluster corosync; do systemctl stop $s; done
for s in corosync pve-cluster pvestatd spiceproxy pveproxy; do systemctl stop $s; done

Критичность: средняя
Несмотря на полную невозможность управления хостом через веб-интерфейс, запущенные гости продолжают работать.

Сбои на уровне кластера

Несоответствие между репликацией и конфигурацией высокой доступности

Proxmox может самостоятельно реплицировать гостей между хостами и перезапускать их в случае сбоя одного из хостов. Однако проверка непротиворечивости этих настроек не производится — таким образом, можно настроить репликацию на одном хосте и HA на другом, после чего попытка перемещения гостя закончится невозможностью его запуска.
Очень неприятно, но достаточно легко исправить, либо воссоздав конфигурацию HA, чтобы гость включал правильный хост, либо уничтожив и переместив его. /etc/pve/nodes/<host>/<lxc|qemu-server>/<guest>.conf в правильном месте (в правильной папке на смарт-хосте с действительной репликой) и запустить его вручную.

Критичность: катастрофическая
По сути, это бомба замедленного действия, ведущая к DoS. Вы не хотите это выяснить.

Ошибки репликации ZFS

Встречается раз-два в месяц перед обновлением до 7, обычно возникает, если каким-то образом хост с репликой и хост-источник разошлись в снапшотах: репликация не хранит только один снапшот для каждой цели репликации, и если снапшоты на источнике и цели не совпадают, репликация не удалась.
Отвечать — удалить соответствующий набор данных/том.

Критичность: катастрофическая
Еще одна версия предыдущей бомбы замедленного действия

Нет кворума в кластере

Состояние, которое не очень очевидно и трудно диагностируется. При этом гости продолжают работать (Proxmox обычно достаточно осторожен с гостями) там, где они были до того, как рухнул кворум, но любая работа с хостами или гостями становится невозможной включая разрешение через веб-интерфейс. Это происходит потому, что pmxcfs, хранение – и репликация между хостами! – настройки кластера, заходим в read-only при отсутствии кворума.
Это может быть связано со сбоем внутренних служб, сбоями в работе сети, неправильной настройкой брандмауэра или даже с длительной деградацией сети в недавнем прошлом.
Проверить кворум можно по ssh командой pvecm status. Обычный вывод будет содержать следующий блок:

Votequorum information  
----------------------  
Expected votes:   7  
Highest expected: 7  
Total votes:      7  
Quorum:           4     
Flags:            Quorate

Это означает, что в кластере семь хостов (ожидаемые голоса), из которых минимум четыре необходимы для кворума (кворум), и сейчас все семь хостов активны (всего голосов), кворум достигнут (флаги: кворум). Если количество голосов меньше необходимого для кворума, кластер будет заблокирован до его восстановления.
Отвечать – в зависимости от обстоятельств. Однажды, после долгих проблем в сети хоста, нам помог перезапуск внутренних сервисов на хосте, который не имел отношения к наблюдаемому эффекту (который регулярно включался в кворум).

Критичность: катастрофическая
Все функции кластера перестают работать, задачи не запускаются, хосты с HA могут уйти в забор.

Сетевые ошибки

В целом Proxmox достаточно терпим к сетевым ошибкам, потерям пакетов и т.д., однако, если udp пакеты перестают нормально работать, события развиваются следующим образом:

  • из-за потери пакетов нарушается обмен служебной информацией между узлами
  • кворум восстановлен corosync
  • один или несколько хостов теряют соединение с кластером и пытаются присоединиться
  • если для хоста настроен HA, он выполняет жесткую перезагрузку
    Это выглядит так:
    systemd[1]: rsyslog.service: Sent signal SIGHUP to main process 3087 (rsyslogd) on client request.
    systemd[1]: logrotate.service: Succeeded.
    systemd[1]: Finished Rotate log files.
    systemd[1]: logrotate.service: Consumed 1.067s CPU time.
    spiceproxy[1503847]: worker exit
    spiceproxy[3908]: worker 1503847 finished
    pveproxy[777811]: worker exit
    pveproxy[1280387]: worker exit
    pveproxy[888694]: error AnyEvent::Util: Runtime error in AnyEvent::guard callback: Can't call method "_put_session" on an undefined value at /usr/lib/x86_64-linux-gnu/perl5/5.32/AnyEvent/Handle.pm line 2259 during global destruction.
    pveproxy[3902]: worker 777811 finished
    pveproxy[3902]: worker 888694 finished
    pveproxy[3902]: worker 1280387 finished
    // Link to another host is garbled 
    corosync[3813]:   [KNET  ] link: host: 8 link: 0 is down
    corosync[3813]:   [KNET  ] host: host: 8 (passive) best link: 0 (pri: 1)
    corosync[3813]:   [KNET  ] host: host: 8 has no active links
    corosync[3813]:   [KNET  ] rx: host: 8 link: 0 is up
    corosync[3813]:   [KNET  ] host: host: 8 (passive) best link: 0 (pri: 1)
    pveproxy[1643087]: got inotify poll request in wrong process - disabling inotify
    pveproxy[1643087]: worker exit
    // by corosync udp-packets disappearing
    corosync[3813]:   [TOTEM ] Token has not been received in 5266 ms 
    corosync[3813]:   [KNET  ] link: host: 1 link: 0 is down
    corosync[3813]:   [KNET  ] link: host: 8 link: 0 is down
    corosync[3813]:   [KNET  ] host: host: 1 (passive) best link: 0 (pri: 1)
    corosync[3813]:   [KNET  ] host: host: 1 has no active links
    corosync[3813]:   [KNET  ] host: host: 8 (passive) best link: 0 (pri: 1)
    corosync[3813]:   [KNET  ] host: host: 8 has no active links
    corosync[3813]:   [TOTEM ] Token has not been received in 12169 ms 
    corosync[3813]:   [KNET  ] rx: host: 1 link: 0 is up
    corosync[3813]:   [KNET  ] host: host: 1 (passive) best link: 0 (pri: 1)
    corosync[3813]:   [KNET  ] rx: host: 8 link: 0 is up
    corosync[3813]:   [KNET  ] host: host: 8 (passive) best link: 0 (pri: 1)
    corosync[3813]:   [TOTEM ] Token has not been received in 19848 ms 
    // Quorum disruption
    corosync[3813]:   [QUORUM] Sync members[1]: 5
    corosync[3813]:   [QUORUM] Sync left[4]: 1 3 4 8
    corosync[3813]:   [TOTEM ] A new membership (5.13620) was formed. Members left: 1 3 4 8
    corosync[3813]:   [TOTEM ] Failed to receive the leave message. failed: 1 3 4 8
    pmxcfs[3703]: [dcdb] notice: members: 5/3703
    pmxcfs[3703]: [status] notice: members: 5/3703
    // HA-hosts may do fencing there 
    corosync[3813]:   [QUORUM] This node is within the non-primary component and will NOT provide any services.
    corosync[3813]:   [QUORUM] Members[1]: 5
    // This cake is a lie, host is blocked
    corosync[3813]:   [MAIN  ] Completed service synchronization, ready to provide service.
    // Because of quorum absence
    pmxcfs[3703]: [status] notice: node lost quorum
    pmxcfs[3703]: [dcdb] crit: received write while not quorate - trigger resync
    pmxcfs[3703]: [dcdb] crit: leaving CPG group
    pve-ha-lrm[3910]: lost lock 'ha_agent_pve5_lock - cfs lock update failed - Operation not permitted
    pve-ha-lrm[3910]: status change active => lost_agent_lock
    // Quorum restoration
    corosync[3813]:   [QUORUM] Sync members[5]: 1 3 4 5 8
    corosync[3813]:   [QUORUM] Sync joined[4]: 1 3 4 8
    corosync[3813]:   [TOTEM ] A new membership (1.13624) was formed. Members joined: 1 3 4 8
    pmxcfs[3703]: [status] notice: members: 1/3409, 3/7179, 4/3856, 5/3703, 8/2042
    pmxcfs[3703]: [status] notice: starting data syncronisation
    // Host unbloked for this moment
    corosync[3813]:   [QUORUM] This node is within the primary component and will provide service.
    corosync[3813]:   [QUORUM] Members[5]: 1 3 4 5 8
    corosync[3813]:   [MAIN  ] Completed service synchronization, ready to provide service.
    pmxcfs[3703]: [status] notice: node has quorum
    pmxcfs[3703]: [status] notice: received sync request (epoch 1/3409/000000A6)
    pmxcfs[3703]: [status] notice: received sync request (epoch 1/3409/000000A7)
    pmxcfs[3703]: [dcdb] notice: start cluster connection
    // Problems persists
    pmxcfs[3703]: [dcdb] crit: cpg_join failed: 14
    pmxcfs[3703]: [dcdb] crit: can't initialize service
    pve-ha-crm[3900]: lost lock 'ha_manager_lock - cfs lock update failed - Device or resource busy
    pve-ha-crm[3900]: status change master => lost_manager_lock
    // Another place for fencing
    pve-ha-crm[3900]: watchdog closed (disabled)
    pve-ha-crm[3900]: status change lost_manager_lock => wait_for_quorum
    pmxcfs[3703]: [dcdb] crit: cpg_send_message failed: 9
    pmxcfs[3703]: [dcdb] crit: cpg_send_message failed: 9
    pmxcfs[3703]: [dcdb] crit: cpg_send_message failed: 9
    pmxcfs[3703]: [dcdb] crit: cpg_send_message failed: 9
    pmxcfs[3703]: [dcdb] crit: cpg_send_message failed: 9
    pmxcfs[3703]: [dcdb] crit: cpg_send_message failed: 9
    pmxcfs[3703]: [dcdb] crit: cpg_send_message failed: 9
    pmxcfs[3703]: [dcdb] crit: cpg_send_message failed: 9
    pmxcfs[3703]: [dcdb] crit: cpg_send_message failed: 9
    pmxcfs[3703]: [dcdb] crit: cpg_send_message failed: 9
    pmxcfs[3703]: [dcdb] crit: cpg_send_message failed: 9
    pmxcfs[3703]: [dcdb] crit: cpg_send_message failed: 9
    pmxcfs[3703]: [dcdb] crit: cpg_send_message failed: 9
    pmxcfs[3703]: [dcdb] crit: cpg_send_message failed: 9
    pmxcfs[3703]: [dcdb] crit: cpg_send_message failed: 9
    pmxcfs[3703]: [dcdb] crit: cpg_send_message failed: 9
    pmxcfs[3703]: [dcdb] crit: cpg_send_message failed: 9
    pmxcfs[3703]: [dcdb] crit: cpg_send_message failed: 9
    pmxcfs[3703]: [dcdb] crit: cpg_send_message failed: 9
    pmxcfs[3703]: [dcdb] crit: cpg_send_message failed: 9
    pmxcfs[3703]: [dcdb] crit: cpg_send_message failed: 9
    pmxcfs[3703]: [dcdb] crit: cpg_send_message failed: 9
    pmxcfs[3703]: [dcdb] crit: cpg_send_message failed: 9
    pmxcfs[3703]: [dcdb] crit: cpg_send_message failed: 9
    pve-ha-crm[3900]: status change wait_for_quorum => slave
    pmxcfs[3703]: [dcdb] crit: cpg_send_message failed: 9
    pmxcfs[3703]: [dcdb] crit: cpg_send_message failed: 9
    pvescheduler[1634357]: replication: cfs-lock 'file-replication_cfg' error: got lock request timeout
    corosync[3813]:   [TOTEM ] Token has not been received in 5396 ms 
    pmxcfs[3703]: [dcdb] crit: cpg_send_message failed: 9
    pmxcfs[3703]: [dcdb] crit: cpg_send_message failed: 9
    corosync[3813]:   [TOTEM ] Token has not been received in 12299 ms 
    corosync[3813]:   [TOTEM ] Retransmit List: b e 
    corosync[3813]:   [KNET  ] link: host: 8 link: 0 is down
    corosync[3813]:   [KNET  ] host: host: 8 (passive) best link: 0 (pri: 1)
    corosync[3813]:   [KNET  ] host: host: 8 has no active links
    corosync[3813]:   [KNET  ] rx: host: 8 link: 0 is up
    corosync[3813]:   [KNET  ] host: host: 8 (passive) best link: 0 (pri: 1)
    // All thing became good for now
    pmxcfs[3703]: [status] notice: received all states
    corosync[3813]:   [QUORUM] Sync members[5]: 1 3 4 5 8
    corosync[3813]:   [TOTEM ] A new membership (1.13630) was formed. Members
    corosync[3813]:   [QUORUM] Members[5]: 1 3 4 5 8
    corosync[3813]:   [MAIN  ] Completed service synchronization, ready to provide service.
    pmxcfs[3703]: [status] notice: cpg_send_message retried 1 times
    pmxcfs[3703]: [status] notice: all data is up to date
    pmxcfs[3703]: [status] notice: dfsm_deliver_queue: queue length 106
    pmxcfs[3703]: [dcdb] notice: members: 1/3409, 3/7179, 4/3856, 5/3703, 8/2042
    pmxcfs[3703]: [dcdb] notice: starting data syncronisation
    pmxcfs[3703]: [dcdb] notice: received sync request (epoch 1/3409/000000C2)
    pmxcfs[3703]: [dcdb] notice: received all states
    pmxcfs[3703]: [dcdb] notice: leader is 1/3409
    pmxcfs[3703]: [dcdb] notice: synced members: 1/3409, 3/7179, 4/3856, 8/2042
    pmxcfs[3703]: [dcdb] notice: waiting for updates from leader
    pmxcfs[3703]: [dcdb] notice: dfsm_deliver_queue: queue length 2
    pmxcfs[3703]: [dcdb] notice: update complete - trying to commit (got 7 inode updates)
    pmxcfs[3703]: [dcdb] notice: all data is up to date
    pmxcfs[3703]: [dcdb] notice: dfsm_deliver_queue: queue length 2
    pve-ha-lrm[3910]: successfully acquired lock 'ha_agent_pve5_lock'
    pve-ha-crm[3900]: successfully acquired lock 'ha_manager_lock'
    pve-ha-lrm[3910]: status change lost_agent_lock => active
    pve-ha-crm[3900]: watchdog active
    pve-ha-crm[3900]: status change slave => master
    // Bad again
    corosync[3813]:   [TOTEM ] Token has not been received in 5363 ms 
    corosync[3813]:   [TOTEM ] Token has not been received in 12264 ms 
    corosync[3813]:   [QUORUM] Sync members[5]: 1 3 4 5 8
    corosync[3813]:   [TOTEM ] A new membership (1.1363c) was formed. Members
    corosync[3813]:   [QUORUM] Members[5]: 1 3 4 5 8
    corosync[3813]:   [MAIN  ] Completed service synchronization, ready to provide service.
    pvescheduler[1653190]: jobs: cfs-lock 'file-jobs_cfg' error: got lock request timeout
    pvescheduler[1653189]: replication: cfs-lock 'file-replication_cfg' error: got lock request timeout
    pveproxy[1641105]: proxy detected vanished client connection
    corosync[3813]:   [TOTEM ] Token has not been received in 5399 ms 
    corosync[3813]:   [TOTEM ] Token has not been received in 12301 ms 
    corosync[3813]:   [QUORUM] Sync members[5]: 1 3 4 5 8
    corosync[3813]:   [TOTEM ] A new membership (1.13648) was formed. Members
    corosync[3813]:   [QUORUM] Members[5]: 1 3 4 5 8
    corosync[3813]:   [MAIN  ] Completed service synchronization, ready to provide service.
    corosync[3813]:   [TOTEM ] Token has not been received in 5402 ms 
    corosync[3813]:   [KNET  ] link: host: 8 link: 0 is down
    corosync[3813]:   [KNET  ] host: host: 8 (passive) best link: 0 (pri: 1)
    corosync[3813]:   [KNET  ] host: host: 8 has no active links
    corosync[3813]:   [TOTEM ] Token has not been received in 12303 ms 
    corosync[3813]:   [KNET  ] rx: host: 8 link: 0 is up
    corosync[3813]:   [KNET  ] host: host: 8 (passive) best link: 0 (pri: 1)
    corosync[3813]:   [QUORUM] Sync members[5]: 1 3 4 5 8
    corosync[3813]:   [TOTEM ] A new membership (1.13654) was formed. Members
    corosync[3813]:   [QUORUM] Members[5]: 1 3 4 5 8
    corosync[3813]:   [MAIN  ] Completed service synchronization, ready to provide service.

Критичность: от высокой до катастрофической
Проблемы с сетью всегда неприятны, даже если они не вызывают деградации сервиса.
Обычные хосты будут пытаться переподключиться к кластеру до тех пор, пока не выиграют (и могут перейти в состояние отключения внутренней службы), а если хост настроен с высокой доступностью, вы увидите…

Фехтование (внезапный перезапуск)!

В общем, фехтование (фехтование, ограждение) работает для пользователя Проксмокс. Его задача, перед перезапуском (по правилам HA) гостя на другом хосте, состоит в том, чтобы обеспечить надежную изоляцию вышедшего из строя хоста и предотвратить конфликт двух экземпляров гостя за один и тот же адрес. запускать своих гостей до тех пор, пока не получит обновление текущей конфигурации кластера.
Это должно помочь, например, если ваша сетевая карта или порт в коммутаторе вышли из строя, или если вы обнаружили нестабильное обновление (с этим оборудованием).
Однако, если в самой сети есть проблемы, диагностика того, что происходит, может легко привести к путанице.

Происходит это (замыкание) при потере кворума на хостах, включенных в HA: каждый из этих хостов изо всех сил пытается переподключиться к кластеру. Если не удается подключиться к кластеру, эти узлы выполняют аппаратный перезапуск, принудительно отключая все запущенные на них службы.
В syslog похоже на внезапную перезагрузку без выключения: вот обычные рабочие логи, но сразу лог загрузки пропал.
Решение: Вылечить сеть, откатить последнее обновление, перенести кластерную сеть на физически отдельный контур — в зависимости от причины забора.
Особенно процесс заметен на виртуальных машинах: в физической консоли нет привычного лога выключения системы, сразу переключаемся на стартовую заставку, как бы нажимая ее Reset.

Критичность: катастрофическая, но стандартная

вместо несчастных случаев

Как и в любой сложной системе, важно знать три вещи: куда смотреть, что держать и на что нажимать. Но опыт, который дает это знание, как всегда, приходит сразу после того, как он был нужен…

Наличие без проблем, господа!

Source

ЧИТАТЬ   Как удаленно вывести человека из квартиры?

От admin