Там мы рассказывали, что vCHA - это Active/Passive кластер, который состоит из трех компонентов - активного узла, работающего под нагрузкой, пассивного, готового взять на себя нагрузку в случае сбоя активного, а также компонента Witness ("свидетель") - который защищает кластер от ситуации split-brain (оба узла считают себя активными в случае изоляции сети) и является кворумным узлом:
Напомним, что кворумный узел не может получить роль сервера vCenter, это лишь маленькая машина, реализующую функцию Witness в ситуациях изоляции и разделения сети.
Если посмотреть на архитектуру решения, то можно понять, что оно не использует сеть хранения для сигналов доступности и не рассчитано на множественные сбои, что позволит гарантированно сохранить или восстановить работоспособность только в случае отказа/изоляции лишь одного из компонентов. Если, например, вся сеть развалится между всеми тремя узлами - vCHA вас не спасет.
С точки зрения синхронизации, кластер vCHA использует синхронную репликацию PostgreSQL native replication для синхронизации базы данных (в случае отказа БД будет консистентная) и утилиту rsync для репликации файлов vCenter (например, файлов конфигурации):
Поэтому надо понимать, что теоретически некоторые файлы при сбое можно будет потерять, так как репликация асинхронная (но это, в целом, маловероятно).
Оба узла vCSA в кластере vCHA используют один публичный IP-адрес, который используется при доступе и к резервному узлу в случае сбоя основного. В условия восстановления работоспособности сервера vCSA заложен показатель RTO=5 минут. Это значит, что в случае сбоя основного узла, где-то 5 минут пользователи могут испытывать проблемы с доступностью vCenter через vSphere Client или vSphere Web Client. При этом API vCenter будет доступен уже где-то через 2-3 минуты.
Теперь давайте посмотрим, как обрабатываются механизмом vCHA различные варианты отказов:
Отказ активного узла. В этом случае пассивный узел видит, что активный узел больше недоступен, при этом узел Witness работает и доступен. Пассивный узел назначает себя активным и начинает обслуживать запросы клиентов vSphere.
Отказ пассивного узла. Поскольку активный узел и Witness чувствуют себя нормально, сервер vCenter продолжит обслуживание клиентов.
Отказ узла Witness. В этом случае сохранится статус кво - активный узел продолжит обрабатывать запросы, а пассивный будет готов взять на себя нагрузку в случае сбоя активного.
Изоляция или отказ более чем одного узла. В этом случае вполне может возникнуть ситуация, когда у вас сервисы vCenter не функционируют - например, оба узла vCSA могут посчитать себя изолированными (см. далее).
Поведение изолированного узла vCSA при изоляции
Как только узел себя считает изолированным, он сразу гасит все сервисы vCenter, чтобы второй узел мог взять на себя нагрузку по обслуживанию запросов (при этом неважно, видит ли второй узел компонент Witness). При детектировании события изоляции учитываются возможные короткие промежутки в доступности сети, которые могут иногда возникать при нормальном сетевом взаимодействии. Только когда все попытки достучаться до второго узла и Witness исчерпаны, узел vCSA считает себя изолированным.