Asterisk HA Cluster с репликацией DRBD

В данной статье мы покажем, как настроить HA cluster asterisk с репликацией через DRDB, при помощи pacemaker. Ранее мы уже рассматривали вариант кластеризации, но он не совершенен.

Базовая установка и настройка HA cluster

Сети:

Допустим у нас есть 2 ноды, нашего будущего кластера, доступные из следующих сетей: 172.16.0.0/24, 10.0.254.0/24.

Первым делом задаем имена нодам:

Все команды выполняются от имени суперпользователя(root). Вместо example.com указываем свой домен, или оставляем так как есть.

Затем определим имена хостов и ip адреса в файле /etc/hosts:

Откроем данный файл любым удобным текстовым редактором, мы будем использовать nano.

Внесем в данный файл:

После чего переходим к установке пакетов кластера на всех нодах.

Добавим репозиторий:

Используя все тот же редактор nano, данную манипуляцию проводим на всех нодах кластера

и добавим в него:

Далее устанавливаем необходимые пакеты:

Добавляем правила в брендмауэр:

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

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

Выполним представленные ниже команды, на всех нодах.

После чего можно проверить статус службы:

Далее настроим аутенфикацию

На всех нодах. Зададим пароль для пользователя hacluster

Затем проверим авторизацию:

запускаем на мастер ноде.

Вывод будет таким:

Создаем кластер:

Имя кластера не может превышать 15 символов. мы используем «AsteriskCluster».

Вывод если все без ошибок:

Затем запускаем кластер:

опция «–all» запустит кластер на всех настроенных узлах.

Для проверки статуса воспользуемся следующей командой:

Если проверить статус на данном этапе

Если вы проверите вышеупомянутый статус, появится предупреждение «нет устройств Stonith и Stonith-enabled is not false». Мы пока отключим STONITH. Для отключения STONITH используется следующая команда.

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

Замечание

Одна из важных замечаний, когда мы внедряем Pacemaker в конфигурации с 2 узлами. Кворум как концепция не имеет смысла в этом сценарии, потому что он у вас есть только тогда, когда доступно более половины узлов, поэтому мы также отключим его, используя следующую команду.

Создадим общий ресурс кластера

где:
“Asterick_VIP01” название службы.
“ocf:heartbeat:IPaddr2” название скрипта heartbeat, который будет использован.
“op monitor interval=30s” интервал проверки службы

Команда:

Если на данном этапе проверить статус кластера, то можно увидеть, что добавился ресурс:

Установка DRDB

Приступая к установке DRDB, первым делом добавим репозитории:

Затем установим пакеты на всех нодах:

SELinux


Чтобы избежать проблем с SELinux, мы установили selinux в режим «Permissive», и мы собираемся передать процессы DRBD из-под контроля SELinux.

Повторим манипуляцию выше на второй ноде:

Затем настраиваем разделы DRDB, на всех нодах:

После чего переходим к настройке, предварительно сделав резервную копию файла global_common.conf, так же на всех нодах:

Теперь у нас есть ресурс с именем shared_drbd, который использует / dev / drbd_vg / drbd_lv в качестве устройства нижнего уровня и настроен с внутренними метаданными.

Открываем конфигурационный файл:

Приведем его к следующему виду:

Так же на всех нодах открываем порт 7789:

Затем копируем конфигурационный файл на вторую ноду:

Теперь нам нужно инициализировать хранилище метаданных DRBD на обоих серверах:

Для согласованности данных нам нужно выполнить команду «drbdadm» на ПЕРВИЧНОМ узле:

Используя обе команды (drbd-overview, cat /proc/drbd), мы можем проверить состояние синхронизации блочного устройства между несколькими узлами.

Теперь создаем файловую систему на устройстве DRBD, эта команда будет выполняться на основном узле:

После чего монтируем устройство DRBD на первичном узле и создаем некоторые файлы в файловой системе.

Примечание

Обратите внимание, что все данные, которые вы записываете в каталог «/ Drbdshared», будут синхронизированы с узлом 2. Помните, что вам не нужно монтировать диск DRBD на другом узле.

Проверяем синхронизацию между узлами.

Чтобы проверить синхронизацию данных между узлами, нам нужно выполнить следующие шаги. Сначала нам нужно размонтировать каталог DRBD (/Drbd Shared) и понизить первичный сервер до вторичной роли.

Теперь на дополнительной ноде (то есть Node2) сменим роль на главную и смонтируем файловую систему DRBD в каталоге /Drbdshared и с помощью команды «ls» проверьте данные.

Ошибка

1: Failure: (127) Device minor not allocated additional info from kernel: unknown minor Command ‘drbdsetup-84 primary 1 —force’ terminated with exit code 10

Команды для решения:

Настройка MariaDB HA Pacemaker Cluster c DRBD

Устанавливаем пакеты:

Убедитесь, что сервис MariaDB отключен, так как он будет управляться pacemaker.

Теперь вручную запустите службу MariaDB на одном из узлов кластера.

Мы можем установить новую базу данных MariaDB с помощью команды «mysql_install_db» в каталоге / Drbdshared, используя пользователя mysql.

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

Примечание

Если у вас включен SElinux, нам нужно задать ту же политику SELinux, что и для каталога данных MariaDB, используйте команду «semange» для добавления контекста файла.

Затем остановим серви баз данных:

Отмонтируем файловую систему DRDB:

Настроим ресурс кластера для DRDB:

Теперь нам нужно создать кластерный ресурс для устройства DRBD с именем «Database_mysql».

Мы создали ресурс-клон с именем «databasebothnode», который позволяет ресурсу запускаться на обоих узлах кластера одновременно.

ГДЕ


master-max: Сколько копий ресурса может быть переведено в главное состояние, и значение по умолчанию равно 1.
master-node-max: Сколько копий ресурса может быть переведено в главное состояние на одном узле, и значение по умолчанию равно 1.
clone-max:Сколько копий ресурса нужно запустить. По умолчанию количество узлов в кластере.
clone-node-max: Сколько копий ресурса можно запустить на одном узле. Значение по умолчанию — 1.
notify: Уведомление о остановке или запуске копии клона, сообщаемое всем копиям, после успешного действия.
Допустимые значения: false, true. Значение по умолчанию false.

Ниже показан порядок и логика конфигурации ресурсов кластера.

Теперь создайте ресурс кластера для файловых систем с именем fsDRBD_mysql.

Затем сообщите кластеру, используя опцию «ограничение размещения», ресурс клона, т.е. «databasebothnode» должен быть запущен на том же узле, что и ресурс файловой системы.

Теперь ресурс клона должен быть запущен до ресурса файловой системы.

Создайте ресурс кластера с именем «MariaDB_New» для службы MariaDB.

ГДЕ:


timout: Как долго ждать, прежде чем объявить действие не удалось.
interval: Как часто (в секундах) выполнять операцию. Значение по умолчанию 0, то есть никогда.

Затем сообщите кластеру, что служба MariaDB должна быть запущена на том же узле, что и ресурс файловой системы «fsDRBD_mysql».

Теперь ресурс «fsDRBD_mysql» должен быть запущен до ресурса MariaDB.

Мы должны добавить один параметр в конфигурацию «my.cnf»(bind_address=) на обоих узлах.

Вы можете проверить конфигурацию, сохраненную в файле cib «clustdatabase_cfg».

Предположим, если вы хотите удалить один из ресурсов, которые были добавлены по ошибке, вы можете использовать команду ниже;

Нам нужно добавить IP-адрес, по которому будет работать сервис mariaDB. Мы создаем ресурс с именем «MariaDB_VIP» для IP-адреса.

Ресурс виртуального IP-адреса «MariaDB_VIP» должен быть запущен на том же узле, что и ресурс MariaDB, и убедиться, что все остальные ресурсы уже запущены, прежде чем мы сможем подключиться к виртуальному IP-адресу.

Наконец, мы можем зафиксировать изменения сейчас и проверить состояние кластера.

Несколько шагов выполняются, когда мы фиксируем конфигурацию.

  • Pacemaker запустит DRBD на обоих узлах кластера.
  • Pacemaker выберет один узел для повышения до основной роли DRBD..
  • Затем он смонтирует файловую систему DRBD и запустит службу MariaDB на основном узле.

Установка пакетов Drbdlinks и загрузка скрипта drbdlink из git.

Чтобы установить drbdlinks, сначала создайте новый файл «drbdlink.repo» в каталоге «/etc/yum.repos.d/» , с содержанием:

Теперь установите пакеты «drbdlinks» из вышеуказанного хранилища:

Теперь загрузите и установите агенты ресурсов drbdlinks. Пакет Drbdlinks предоставляет управление символьными ссылками в общий раздел DRBD

Примечание

Мы устанавливаем «drbdlinks» на сервере Node1,но требуется так же выполнить все шаги на всех остальных нодах .

Мы монтируем устройство DRBD в каталог «/Drbdshared». На этом устройстве мы создаем каталоги в общей точке монтирования DRBD для резервного копирования файлов конфигурации.

Теперь отредактируйте файл «drbdlinks.conf» на обоих серверах (или узлах) и добавьте путь конфигурации для Asterisk.

Скопируйте все файлы конфигурации в каталог «/Drbdshared».

Перед настройкой ресурса Asterisk сначала установите агент ресурса Asterisk. Ниже будут выполнены шаги на обоих узлах кластера.

Настройка ресурса кластера для Asterisk

Примечание

Когда вы используете команду pcs, вы можете использовать опцию «-f», чтобы сохранить изменение конфигурации в файле, не затрагивая активную CIB. Если вы ранее настроили кластер и уже существует активный CIB, вы используете следующую команду для сохранения необработанного XML-файла.

Нам нужно добавить IP-адрес, по которому будет работать сервис Asterisk. Мы создаем ресурс с именем «virtualast_ip» для IP-адреса. Ранее для примера мы добавляли данный ресурс для MariaDB, так как мы делаем кластер Asterisk, то виртуальный ip адрес задаем именно для этой службы.

Теперь нам нужно создать кластерный ресурс для Drbdlinks с именем «drbdlinks».

Затем скажите кластеру, что ресурс «Drbdlinks» и «virtualast_ip» должен быть запущен на том же узле, что и ресурс файловой системы.

Ресурс «fsDRBD_mysql» должен быть запущен до того, как ресурс «drbdlinks» и «virtualast_ip» должен быть запущен после ресурса «drbdlinks».

Создайте ресурс кластера для звездочки с именем «Asterisk».

Ресурс «virtualast_ip» должен быть запущен до ресурса «Asterisk».

Затем сообщите кластеру, что служба MariaDB должна быть запущена на том же узле, что и ресурс «Asterisk».

Наконец, ресурс MariaDB должен быть запущен до ресурса «virtualast_ip».

Мы можем зафиксировать изменения сейчас и проверить состояние кластера.

Чтобы проверить синхронизацию данных между узлами, нам нужно выполнить следующие шаги.

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

После чего все сервисы кластера запустятся на второй ноде. На этом этапе статья рассмотрена полностью и подошло к концу

Вам также может понравиться

About the Author: Администратор

6 комментариев

  1. А можно ли сделать кластер на рабочей среде asterisk 11, который крутится в hyper-v? Т.е. не делать все с нуля, а применить данную статью к рабочему asterisk.

    1. Возможно, единственное желательно сделать снимок системы. А еще лучше сделать копию машину и на ней откатать все действия. Из-за разницы версий дистрибутивов возможны отдельные подводные камни.

  2. Возможно ли данную статью применить уже к рабочему Asterisk 11 который в свою очередь крутится на HV? Т.е. не создавая кластер из заранее подготовленного чистого Asterisk.

  3. Вопрос к автору:
    Если всю эту схему поднять на KVM а не на хоте будит ли она работать.
    Второй вопрос при отключении одного хоста на втором хосте Астериск запускать нудно в Ручную ?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *