FreePBX(asterisk) кластеризация является очень задачей. Часто возникает необходимость создать кластер высокой доступности для УАТС Asterisk. Для УАТС на базе FreePBX есть коммерческий модуль кластеризации FreePBX High Availability. Но, на данный момент это решение платное. Ниже мы приведем пример простой настройки кластера. В данном примере есть свои минусы, но вы легко сможете адаптировать все под конкретные нужны.

Подготовка
Первым этапом будет установка двух FrePBX на разные машины. Устанавливаться будет FreePBX Distro. Как установить мы рассказывали ранее в статье Установка asterisk(FreePBX). После установки обновим обе системы до актуальной версии.
ВАЖНО: в идеальных устловиях, так же потребуется отдельный mysq сервер, что значительно может упростить жизнь.
1 |
# yum update |
Далее заходим в web интерфейс, только что установленных УАТС, для этого откроем браузер и перейдем по следующему пути.
1 |
http://ip-адрес-уатс |
Произведем активацию системы и первичную настройку брендмауэра.
После успешной активации и первичной настройки можно переходить к установке необходимых пакетов.
Установка пакетов
Установим кластерные пакеты на всех нодах кластера
1 |
yum install -y pacemaker pcs fence-agents-all psmisc policycoreutils-python |
Добавим сервис в брендмауэр.
Для firewalld:
1 2 |
firewall-cmd --permanent --add-service=high-availability firewall-cmd --reload |
Для iptables:
1 |
iptables -A INPUT -p udp -m multiport --dports 5404,5405,5406 -j ACCEPT |
Запуск кластера
Но, данные правила могут не потребоваться, так как машины в одной сети и скорее всего в первоначальной настройке брендмауэера вы указали сеть между ними как доверенную.
После установки пакетов и настройки брендмауэера, сбросим пароль пользователя hacluster:
1 |
echo "redhat" | passwd --stdin hacluster |
Вместо redhat придумываем и указываем свой пароль.
Запускаем сервис кластеризации на всех нодах и добавляем в автозагрузку:
systemctl start pcsd
systemctl enable pcsd
После произведем авторизацию наших нод:
1 |
pcs cluster auth node1 node2 -u hacluster |
ПРИМЕЧАНИЕ: node1 и node2 должны соответсвовать именам хостов нод. Так же потребуется добавить имена всех нод в файл hosts, как показано ниже.

После внесения изменений в файл hosts на обеих нодах, можно проверить доступность запустив пинг, по имени ноды а не по ip адресу.
В нашем примере ноды имеют имена freepbx-node1 и freepbx-node2.
После ввода команды авторизации, потребуется ввести пароль ранее заданный для пользователя hacluster, в примере это «redhat».
Далее определим имя кластера и запустим синхронизацию corosync:
1 |
pcs cluster setup --name mycluster node1 node2 |
Как и ранее node1 и node2 имена наших нод, а mycluster имя кластера.
На первой ноде запускаем кластер:
1 2 |
pcs cluster start --all pcs cluster enable --all |
Проверить статус кластера можно командой:
1 |
pcs status |

На картинке выше, статус кластера с уже добавленными ресурсами.
Установим свойства кластера:
1 2 3 |
pcs property set stonith-enabled=false pcs property set no-quorum-policy=ignore pcs property set default-resource-stickiness="INFINITY" |
Создадим ресурс кластера:
1 |
pcs resource create VirtIP ocf:heartbeat:IPaddr2 ip=192.168.56.105 cidr_netmask=24 op monitor interval=2s |
Данный ресурс создает виртуальный сетевой интерфейс по которому доступна первая нода, но при ее недоступности интерфейс запустится на второй ноде нашего кластера.
Посмотреть список всех ресурсов можно командой:
1 |
pcs resource list |
Синхронизация конфигурации freepbx.
Произведем синхронизацию конфигурации серверов. Путем создания бекапа первой ноды и заливки на вторую ноду.
Первым делом настроим ssh соединение между серверами. Зададим временно пароль для пользователя asterisk, на основном сервере:
1 |
passwd asterisk |
Изменим права:
1 |
chmod 755 /var/lib/asterisk |
Затем на резервном сервере произведем генерацию ssh ключа:
1 2 |
su asterisk ssh-keygen |
Приведенная выше команда сгенерирует ключ в файл :
1 |
/home/asterisk/.ssh/id_rsa |
После генерации скопируем ключ на основной сервер:
1 |
ssh-copy-id -i asterisk@ip-node1 |
ip-node1 надо заменить на ip адрес первой ноды. Далее проверяем, подключаемся по ssh к первому серверу от имени пользователя asterisk:
1 |
ssh asterisk@ip-node1 |
После сбрасываем пароль пользователя asterisk:
1 |
passwd -d asterisk |
Теперь заходим в web интерфейс freepbx. Нажимаем на Admin, далее переходим к Backup & Restore. Затем в меню с правой стороны нажимаем Servers.

На второй ноде добавляем ssh сервер.

Далее заполняем поля.

Указываем имя сервера, и папку куда сохранять бекап, описание заполняется по своему усмотрению.
Затем возврощаемся к пункту Backup and Restore и создаем новый бекап.

Далее перетаскиваем Full Backup в поле item.
Затем выбираем сервер бекапов и выбираем восстановить.

Далее вбираем хранилище.

Затем нажимаем сохранить и запустить, после успешного создания и развертывания мы получим 2 полностью идентичных сервера. А так как мы добавили ресурс в pacemaker виртуальный ip адрес, то при недоступности первого сервера второй поднимет виртуальный интерфейс с ip адресом который мы указали. Данное решение не идеальное и требует доработки, в ввиду того что оно несовмем подходит для freepbx distro. Но прмиенив творческий подход можно адаптировать и автоматизировать все что потребуется.