🐹 Proxmox Virtual Environment: Кластеризация.

Содержание:

1. Введение.
2. Создание кластера.
3. Присоединение к кластеру.
4. Организация High Availability.
5. Присоединяем общее хранилище.
6. Настраиваем High Availability.
7. Устроим сбой.
8. Подводим итоги.
9. Оригиналы источников информации.


1. Введение.

Внимание! Если вы хотите узнать каким образом можно установить Proxmox VE, то рекомендую изучить предыдущую инструкцию «Proxmox Virtual Environment: Установка, настройка, тюнинг, организация резервного копирования».

Что же такое кластер и зачем он нужен?

Кластер (от англ. cluster) — это группа серверов, объединенных скоростными каналами связи, работающая и представляющаяся пользователю как единое целое.

Существует несколько основных сценариев использования кластера:

  • Обеспечение отказоустойчивости (High-availability).
  • Балансировка нагрузки (Load Balancing).
  • Увеличение производительности (High Performance).
  • Выполнение распределенных вычислений (Distributed computing).

Каждый сценарий предъявляет свои собственные требования к составляющим кластера.

Особенно важно перед тем, как приступать к созданию кластера четко понимать ограничения и системные требования Proxmox, а именно:

  • максимальное количество нод в кластере — 32 штуки;
  • все ноды должны иметь одинаковую версию Proxmox;
  • если в дальнейшем планируется задействовать функционал High Availability, то в кластере должно быть как минимум 3 ноды;
  • для взаимодействия нод друг с другом должны быть открыты порты UDP/5404, UDP/5405 для corosync и TCP/22 для SSH;
  • задержка в сети между нодами не должна превышать 2 мс.

2. Создание кластера.

Внимание! Нижеприведенная конфигурация является вольной трактовкой официальной документации Proxmox VE.

Ссылка на официальную документацию: https://pve.proxmox.com.

Изначально, после установки операционной системы, единичный сервер работает в Standalone-mode.

Создадим кластер, нажав кнопку Create Cluster в соответствующем разделе.

Задаем имя будущему кластеру и выбираем активное сетевое соединение.

Нажимаем кнопку Create. Сервер сгенерирует 2048-битный ключ и запишет его вместе с параметрами нового кластера в конфигурационные файлы.

Надпись TASK OK свидетельствует об успешном выполнении операции.

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

3. Присоединение к кластеру.

Прежде чем подключаться к созданному кластеру нам необходимо получить информацию для выполнения подключения. Для этого заходим в раздел Cluster и нажимаем кнопку Join Information.

В открывшемся окне нас интересует содержимое одноименного поля. Его необходимо будет скопировать.

Здесь закодированы все необходимые параметры подключения: адрес сервера для подключения и цифровой отпечаток.

Переходим на сервер, который необходимо включить в кластер. Нажимаем кнопку Join Cluster и в открывшемся окне вставляем скопированное содержимое.

Поля Peer Address и Fingerprint будут заполнены автоматически. Вводим пароль root от первой ноды, выбираем сетевое подключение и нажимаем кнопку Join.

В процессе присоединения к кластеру web-страница GUI может перестать обновляться. Это нормально, просто перезагружаем страницу. Точно таким же образом добавляем еще одну ноду и в итоге получаем полноценный кластер из 3-х работающих узлов.

Теперь мы можем контролировать все узлы кластера из одного GUI.

Посмотреть статус работы кластера можно командой в ssh:

# pvecm status

4. Организация High Availability.

Proxmox «из коробки» поддерживает функционал организации HA как для виртуальных машин, так и для LXC-контейнеров.

Утилита ha-manager обнаруживает и отрабатывает ошибки и отказы, выполняя аварийное переключение с отказавшей ноды на рабочую. Чтобы механизм работал корректно необходимо, чтобы виртуальные машины и контейнеры имели общее файловое хранилище.

После активации функционала High Availability, программный стек ha-manager начнет непрерывно отслеживать состояние работы виртуальной машины или контейнера и асинхронно взаимодействовать с другими нодами кластера.

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

Для настройки отказоустойчивости (High Availability или HA) нам нужно:

  • Минимум 3 ноды в кластере. Сам кластер может состоять из двух нод и более, но для точного определения живых/не живых узлов нужно большинство голосов (кворумов), то есть на стороне рабочих нод должно быть больше одного голоса. Это необходимо для того, чтобы избежать ситуации 2-я активными узлами, когда связь между серверами прерывается и каждый из них считает себя единственным рабочим и начинает запускать у себя все виртуальные машины. Именно по этой причине HA требует 3 узла и выше.
  • Общее хранилище для виртуальных машин. Все ноды кластера должны быть подключены к общей системе хранения данных — это может быть СХД, подключенная по FC или iSCSI, NFS или распределенное хранилище Ceph или GlusterFS.

5. Присоединяем общее хранилище.

Для примера мы развернули небольшое файловое хранилище NFS по адресу 192.168.88.18. Чтобы все ноды кластера могли его использовать нужно проделать следующие манипуляции.

Выбираем в меню веб-интерфейса DatacenterStorageAddNFS.

Заполняем поля ID и Server. В выпадающем списке Export выбираем нужную директорию из доступных и в списке Content — необходимые типы данных. После нажатия кнопки Add хранилище будет подключено ко всем нодам кластера.

При создании виртуальных машин и контейнеров на любом из узлов указываем наш storage в качестве хранилища.

6. Настраиваем High Availability.

Для примера создадим контейнер с Ubuntu 18.04 и настроим для него High Availability. После создания и запуска контейнера заходим в раздел DatacenterHAAdd. В открывшемся поле указываем ID виртуальной машины/контейнера и максимальное количество попыток рестарта и перемещения между нодами.

Примечание! Если это количество будет превышено, гипервизор пометит виртуальную машину как сбойную и переведет в состояние Error, после чего прекратит выполнять с ней какие-либо действия.

После нажатия кнопки Add утилита ha-manager оповестит все ноды кластера о том, что теперь VM с указанным ID контролируется и в случае падения ее необходимо перезапустить на другой ноде.

7. Устроим сбой.

Чтобы посмотреть, как именно отрабатывает механизм переключения, погасим нештатно node1 по питанию.

Для выключения ноды можно ввести команду:

# systemctl poweroff

Смотрим с другой ноды, что происходит с кластером. Видим, что система зафиксировала сбой.

Примечание! Работа механизма HA не означает непрерывность работы виртуальной машины. Как только нода «упала», работа виртуальной машины временно останавливается до момента автоматического перезапуска на другой ноде.

И вот тут начинается «магия» — кластер автоматически переназначил ноду для выполнения нашей виртуальной машины и в течение 120 секунд работа была автоматически восстановлена.

Гасим node2 по питанию.

Для выключения ноды можно ввести команду:

# systemctl poweroff

Посмотрим, выдержит ли кластер и вернется ли виртуальная машина в рабочее состояние автоматически.

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

Даем в консоли команду принудительной установки кворума.

pvecm expected 1

Спустя 2 минуты механизм HA отработал корректно и не найдя node2 запустил нашу виртуальную машину на node3.

Как только мы включили обратно node1 и node2, работа кластера была полностью восстановлена. Обратите внимание, что обратно на node1 виртуальная машина самостоятельно не мигрирует, но это можно сделать вручную.

8. Подводим итоги.

Вот  устроен механизм кластеризации в Proxmox и настраивается HA для виртуальных машин и контейнеров. Грамотное использование кластеризации и HA значительно повышает надежность инфраструктуры, а также обеспечивает восстановление после сбоев.

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

9. Оригиналы источников информации.

  1. a-katyrev.blogspot.com «Руководство администратора Proxmox VE R 6.0 Глава 6».
  2. habr.com «Кластеризация в Proxmox VE».
  3. selectel.ru «Кластеризация в Proxmox VE».

Читайте также: