Отказоустойчивый кластер для linux

Отказоустойчивый кластер для виртуализации

Материал из Xgu.ru

Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

Если вы считаете, что её стоило бы доработать как можно быстрее, пожалуйста, скажите об этом.

Отказоустойчивый кластер — это комбинация из одного или более узлов (серверов) на двух или более общих дисках, которые называются группой ресурсов. Группу ресурсов вместе с ее сетевым именем и IP-адресом, которые составляют кластерное приложение или сервер, называют отказоустойчивым кластером или экземпляром отказоустойчивого кластера. В сети отказоустойчивый кластер представлен как один компьютер, но при этом он обеспечивает переход на другой узел в случае, если текущий узел становится недоступным. Отказоустойчивый кластер в сети выступает в роли обычного приложения или отдельного компьютера, но поддерживает дополнительные возможности, увеличивающие его доступность.

Чтобы создать HA кластер нужно создать отказоустойчивость по нескольким направлениям:

  • Агрегирование каналов позволяет работать при повреждении одного из кабелей;
  • Программный RAID в Linux;
  • DRBD распределённое реплицируемое блочное устройство;
  • Proxmox VE High Availability Cluster

Содержание

[править] Почему Proxmox VE?

  • Возможность использования как KVM так и OpenVZ.
  • Web vnc-client.
  • Возможность кластеризации.
  • Неплохая система бэкапов виртуальных машин.

[править] Ключевые возможности Proxmox VE

  • Простое управление через веб-интерфейс;
  • Мониторинг нагрузки в реальном времени;
  • Библиотека установочных образов (в локальном или удаленном хранилище);
  • Подключение к «физической» консоли гостевых систем непосредственно из браузера (по VNC);
  • Объединение серверов в кластер с возможностью живой миграции виртуальных машин (без остановки гостевой * системы);
  • Быстрое развертывание гостевых систем из шаблонов (доступно только для OpenVZ);
  • Автоматическое резервное копирование виртуальных машин.

[править] Устанавливаем Debian GNU/Linux amd64 Squeeze

Устанавливаем Debian GNU/Linux amd64 Squeeze. О том как установить лучше обратиться к русскому первоисточнику

[править] Дисковая подсистема

Предлагаю два варианта RAID

[RAID 6] — похож на RAID 5, но имеет более высокую степень надёжности — под контрольные суммы выделяется ёмкость 2-х дисков, рассчитываются 2 суммы по разным алгоритмам. Требует более мощный RAID-контроллер. Обеспечивает работоспособность после одновременного выхода из строя двух дисков — защита от кратного отказа. Для организации массива требуется минимум 4 диска[2]. Обычно использование RAID-6 вызывает примерно 10-15% падение производительности дисковой группы, по сравнению с аналогичными показателями RAID-5, что вызвано большим объёмом обработки для контроллера (необходимость рассчитывать вторую контрольную сумму, а также прочитывать и перезаписывать больше дисковых блоков при записи каждого блока).

[RAID 10] — зеркалированный массив, данные в котором записываются последовательно на несколько дисков, как в RAID 0. Эта архитектура представляет собой массив типа RAID 0, сегментами которого вместо отдельных дисков являются массивы RAID 1. Соответственно, массив этого уровня должен содержать как минимум 4 диска. RAID 10 объединяет в себе высокую отказоустойчивость и производительность. Нынешние контроллеры используют этот режим по умолчанию для RAID 1+0. То есть, один диск основной, второй — зеркало, считывание данных производится с них поочередно. Сейчас можно считать, что RAID 10 и RAID 1+0 — это просто разное название одного и того же метода зеркалирования дисков. Утверждение, что RAID 10 является самым надёжным вариантом для хранения данных, ошибочно, т.к., несмотря на то, что для данного уровня RAID возможно сохранение целостности данных при выходе из строя половины дисков, необратимое разрушение массива происходит при выходе из строя уже двух дисков, если они находятся в одной зеркальной паре.

Устанавливаем Raid 10 по схеме:

[править] Установка Debian на Linux RAID

[править] Установка grub на все жесткие диски

На все диски нужно устанвовить загрузчик. Пример установка на диск sda.

После установки сервера можно проверить скорость чтения и записи.

Источник

Corosync + Pacemaker. Как правильно развернуть кластер высокой отказоустойчивости

Содержание статьи

Рассмотрим несколько возможных решений.

  • Oracle Clusterware для Oracle Unbreakable Linux — достаточно дорогой вариант, его стоит использовать, только если имеешь дело с продуктами Oracle.
  • Veritas Infoscale Availabilty — коммерческое решение, ранее известное как Veritas Cluster Server. Лицензия VCS Access на узловой кластер из четырех нод будет стоить порядка 20–30 тысяч долларов.
  • Red Hat Cluster Suite — решение с открытым исходным кодом. Но для его грамотного использования необходимо изучить большой объем документации, на что у тебя уйдет куча времени.

Я же хочу рассказать, как создать кластеризацию на уровне приложений с высокой отказоустойчивостью в сжатые сроки, с ограниченным бюджетом и без глубоких познаний в построении кластеров. Оптимальным решением, на мой взгляд, будет использование Corosync и Pacemaker. Эта связка бесплатна, ее легко освоить, и на развертывание не уйдет много времени.

Corosync — программный продукт, который позволяет создавать единый кластер из нескольких аппаратных или виртуальных серверов. Corosync отслеживает и передает состояние всех участников (нод) в кластере.

Этот продукт позволяет:

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

Pacemaker — менеджер ресурсов кластера. Он позволяет использовать службы и объекты в рамках одного кластера из двух или более нод. Вот вкратце его достоинства:

  • позволяет находить и устранять сбои на уровне нод и служб;
  • не зависит от подсистемы хранения: можем забыть общий накопитель, как страшный сон;
  • не зависит от типов ресурсов: все, что можно прописать в скрипты, можно кластеризовать;
  • поддерживает STONITH (Shoot-The-Other-Node-In-The-Head), то есть умершая нода изолируется и запросы к ней не поступают, пока нода не отправит сообщение о том, что она снова в рабочем состоянии;
  • поддерживает кворумные и ресурсозависимые кластеры любого размера;
  • поддерживает практически любую избыточную конфигурацию;
  • может автоматически реплицировать конфиг на все узлы кластера — не придется править все вручную;
  • можно задать порядок запуска ресурсов, а также их совместимость на одном узле;
  • поддерживает расширенные типы ресурсов: клоны (когда ресурс запущен на множестве узлов) и дополнительные состояния (master/slave и подобное) — актуально для СУБД (MySQL, MariaDB, PostgreSQL, Oracle);
  • имеет единую кластерную оболочку CRM с поддержкой скриптов.

Идея заключается в том, что с помощью Corosync мы построим кластер, а следить за его состоянием будем с помощью Pacemaker.

В теории

Попробуем решить следующие задачи.

  1. Развернуть кластер высокой отказоустойчивости из двух нод для обработки забросов от клиентов при условии, что они используют общий сетевой адрес и службу веб-сервера nginx.
  2. Протестировать отказ одной из нод в кластере, убедиться, что ресурсы передаются на рабочую ноду, когда активная нода упала.
  3. Время проверки сбоя на активной ноде 30 секунд.

Схема работы кластера из двух нод

Перед началом любых работ настоятельно советую нарисовать схему взаимодействия узлов сети. Это упростит понимание и принципы взаимодействия и работы узлов.

На практике

Настала пора реализовать намеченные задачи. Я в своем примере использовал дистрибутив Red Hat Enterprise Linux 7. Ты можешь взять любой другой Linux, принципы построения кластера будут те же.

Для начала установим пакеты, которые требуются для нормальной работы ПО на обеих нодах (ставим пакеты на обе ноды).

Следующую команду тоже нужно исполнять с правами рута, но если использовать sudo , то скрипт установщика отработает неверно и не создастся пользователь hacluster.

Проверяем пользователя hacluster (Pacemaker) и меняем пароль:

Авторизуемся на нодах под именем пользователя hacluster. Если выходит ошибка доступа к ноде ( Error: Unable to communicate with ha-node1 ), то, скорее всего, из-под Linux-УЗ наложены запреты на использование удаленных оболочек. Необходимо снять ограничение SUDO на время установки.

Когда увидишь следующее, можешь двигаться дальше:

User may run the following commands on ha-node1:
(ALL) NOPASSWD: ALL

Теперь проверяем на обеих нодах установленные пакеты corosync, pacemaker и pcs, добавляем в автозагрузку и запускаем службу конфигурации pacemaker.

Авторизуемся на нодах под пользователем hacluster:

Создаем кластер из двух нод:

Включаем и запускаем все кластеры на всех нодах:

При использовании двух нод включаем stonith. Он нужен для «добивания» серверов, которые не смогли полностью завершить рабочие процессы. Игнорируем кворум.

Запрашиваем статус на обеих нодах ( $ sudo pcs status ) и видим:

Cluster name: HACLUSTER
Stack: corosync
Current DC: ha-node2 (version 1.1.18-11.el7_5.3-2b07d5c5a9) — partition with quorum
Last updated: Wed Oct 17 13:12:00 2018
Last change: Wed Oct 17 13:10:47 2018 by root via cibadmin on ha-node1

2 nodes configured
0 resources configured

Online: [ ha-node1 ha-node2 ]

Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled

Добавляем виртуальный сетевой адрес и nginx как ресурсы (надеюсь, ты помнишь про тайм-аут в 30 секунд) и запрашиваем статус кластера.

Full list of resources:

virtual_ip (ocf::heartbeat:IPaddr2): Started ha-node1
nginx (ocf::heartbeat:nginx): Started ha-node1

Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled

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

Full list of resources:

virtual_ip (ocf::heartbeat:IPaddr2): Started ha-node2
nginx (ocf::heartbeat:nginx): Started ha-node2

Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled

Как только первая нода будет доступна, вручную переключаем на нее виртуальный IP и nginx командой

Осталось запросить статус кластера и убедиться, что адрес присвоен первой ноде.

virtual_ip (ocf::heartbeat:IPaddr2): Started ha-node1

Список всех поддерживаемых сервисов можно посмотреть c помощью команды $ sudo crm_resource —list-agents ocf .

Кластеризация на базе nginx

На обеих нодах должен быть установлен и настроен nginx. Подключаемся к кластеру и создаем следующий ресурс:

Здесь мы создаем ресурс из службы, которая будет каждые 30 секунд проверяться, и в случае минутного тайм-аута ресурс будет включен на другой ноде.

Чтобы удалить ноду из кластера, воспользуйся командой $ sudo pcs cluster node remove .

Выводы

Мы построили простой, но очень отказоустойчивый кластер для фронтенда приложения. Помни, что построение кластера — задача творческая и все зависит только от твоих смекалки и воображения. Невыполнимых задач для системного администратора не бывает!

Иван Рыжевцев

Системный администратор с богатым опытом. Прошедший огонь, воду и медные трубы. Главный девиз в жизни: Нерешаемых задач нет, надо только найти правильное решение!

Источник

Настройка кластера Pacemaker на CentOS 7

Подготовка серверов

Обновляем систему.

Настраиваем время.

Необходимо, чтобы на всех нодах было одинаковое время.

Устанавливаем утилиту для синхронизации даты и времени:

yum install ntpdate

Настраиваем синхронизацию по расписанию:

0 0 * * * /usr/sbin/ntpdate ru.pool.ntp.org

Выставляем нужный часовой пояс:

\cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime

* в моем примере московское время.

Настройка брандмауэра.

Выполняется следующими 2-я командами:

firewall-cmd —permanent —add-service=high-availability

Установка пакетов для работы с кластером

Установка выполняется на всех узлах следующей командой:

yum install pacemaker pcs resource-agents

Если возникнут проблемы, читаем подробную инструкцию по установке Pacemaker.

Задаем пароль для учетной записи hacluster, которая была создана автоматически при установке pacemaker:

Разрешаем сервис pcsd и запускаем его:

systemctl enable pcsd

systemctl start pcsd

Сборка кластера

Настройка выполняется на одном из узлов.

Первым делом, авторизовываемся на серверах следующей командой:

pcs cluster auth node1 node2 -u hacluster

* где node1 и node2 — имена серверов, hacluster — служебная учетная запись (создана автоматически при установке пакетов).

pcs cluster setup —force —name NLB node1 node2

* где NLB — название для кластера; node1 и node2 — серверы, которые должны входить в кластер.

После успешного выполнения команды мы увидим, примерно, следующее:

Synchronizing pcsd certificates on nodes node1, node2.
node2: Success
node1: Success

* также, будет создан конфигурационный файл /etc/corosync/corosync.conf.

Разрешаем автозапуск и запускаем созданный кластер:

pcs cluster enable —all

pcs cluster start —all

* опция —all говорит, что необходимо выполнить команду для всех нод, к которым мы подключились (вместо этой опции можно перечислить ноды вручную).

При использовании 2-х нод (как в данном примере) отключаем stonith (нужен для «добивания» серверов, которые не смогли полностью завершить рабочие процессы) и кворум:

pcs property set stonith-enabled=false

pcs property set no-quorum-policy=ignore

Просмотреть состояние можно командой:

Настройка виртуального IP

Рассмотрим самый распространенный вариант использования Pacemaker. Он заключается в использовании виртуального IP-адреса, который будет назначаться активному узлу кластера.

Для этого создаем ресурс командой:

pcs resource create virtual_ip ocf:heartbeat:IPaddr2 ip=192.168.0.15 cidr_netmask=24 op monitor interval=60s

* где virtual_ip — название ресурса (может быть любым); 192.168.0.15 — виртуальный IP, который будет назначен кластеру; 24 — префикс сети (соответствует маске 255.255.255.0); 60s — критическое время простоя, которое будет означать недоступность узла.

Мы должны увидеть, примерно такую строку:

virtual_ip (ocf::heartbeat:IPaddr2): Started node1

Для проверки, перезагружаем активную ноду (node1) командой:

Через небольшой промежуток времени должен смениться узел с virtual_ip:

virtual_ip (ocf::heartbeat:IPaddr2): Started node2

Для смены активной ноды ресурса, вводим команду:

pcs resource move virtual_ip node1

Отказоустойчивость сервисов

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

Список всех поддерживаемых сервисов можно посмотреть командой:

crm_resource —list-agents ocf

Разберем кластеризацию на базе postfix.

Подключаемся к кластеру и создаем следующий ресурс:

pcs cluster auth node1 node2 -u hacluster

pcs resource create postfix ocf:heartbeat:postfix op monitor interval=30s timeout=60s

Удаление ноды

При необходимости исключить одну из нод кластера, выполняем следующую команду:

pcs cluster node remove node_name

* где node_name — имя узла, который хотим удалить.

Источник

Читайте также:  Как выполнить активацию windows 10 pro
Оцените статью