Freepbx отказоустойчивый кластер, бесплатно

Для реалезации отказоустойчевого кластера на Freepbx 16.0.40 будем использовать CARP протокол. Устанавливаем два сервера Freepbx на которых будет настроен отказоустойчивый кластер.
Freepbx01(Master) - 192.168.98.214
Freepbx02(Slave) - 192.168.98.215
HA(общий адрес) - 192.168.98.14
Устанавливаем CARP на оба сервера:
yum install ucarp
Редактируем файлы конфигурации:
Freepbx01(Master) - 192.168.98.214
vi /etc/ucarp/vip-001.conf
VIP_ADDRESS="192.168.98.14"
ID=001
PASSFILE=/etc/ucarp/vip-001.pwd
BIND_INTERFACE="eth0"
SOURCE_ADDRESS="192.168.98.214"
OPTIONS="-k 2 --shutdown --preempt"
в файле /etc/ucarp/vip-001.pwd указывыем свой пароль (любой)
в файле vip-common.conf все коментируем
- Повторяем все тоже самое на втором сервере
Freepbx02(Slave) - 192.168.98.215
vi /etc/ucarp/vip-001.conf
VIP_ADDRESS="192.168.98.14"
ID=001
PASSFILE=/etc/ucarp/vip-001.pwd
BIND_INTERFACE="eth0"
SOURCE_ADDRESS="192.168.98.215"
OPTIONS="-k 10 --shutdown"
- Запускаем службу и добавляем в автозагрузку:
systemctl enable ucarp@001.service
systemctl start ucarp@001.service
systemctl daemon-reload
Проверяем работоспособность Carp, вводим
ip a
Carp интерфейс появился 192.168.98.14. Также добавляю скрипт который будет мониторить состояние сервиса asterisk, и если по какой то причине он не работает, то интерфейс CARP будет отключен, соответственно все устройства переподключатся на резервный сервер, так как он станем Мастером.
vi /home/script/sevrice_up_down.sh#!/bin/bash while true; do if ps -C asterisk >/dev/null 2>&1; then sleep 10 else sleep 10 if ps -C asterisk >/dev/null 2>&1; then systemctl start ucarp@001.service sleep 10 fwconsole reload else systemctl stop ucarp@001.service fi fi doneУ меня возникла проблема, при переходе на резервный сервер транк не всегда подымался. Решалось командой fwconsole reload. По этой причине добавил в скрипт.
Также на одной из АТС у меня был SIP Trunk от провайдера. Так как провайдер ограничил нас одной регестрацией, добавляю в скрипт отключение транка в зависимости от статуса CARP IP.
#!/bin/bash # Переменная для хранения предыдущего статуса IP-адреса previous_ip_status="absent" while true; do # Проверка наличия процесса asterisk if ps -C asterisk >/dev/null 2>&1; then sleep 10 else sleep 10 # Если процесс asterisk не запущен, попытка его запуска if ps -C asterisk >/dev/null 2>&1; then systemctl start ucarp@001.service sleep 10 fwconsole reload else systemctl stop ucarp@001.service fi fi # Проверка наличия IP-адреса 192.168.98.14 if ip a | grep '192.168.98.14'; then current_ip_status="present" else current_ip_status="absent" fi # Управление транком в зависимости от статуса IP if [ "$current_ip_status" = "present" ]; then fwconsole trunk --enable 1 else fwconsole trunk --disable 1 fi # Если статус IP изменился, выполнить reload if [ "$previous_ip_status" != "$current_ip_status" ]; then previous_ip_status="$current_ip_status" sleep 5 fwconsole reload fi doneДелаем файл исполняемым:
chmod 777 /home/script/sevrice_up_down.shСоздаю службу автозапуска скрипта:
vi /etc/systemd/system/sevrice_up_down.service[Unit] Description=sevrice_up_down After=network.target [Service] User=root ExecStart=/home/script/sevrice_up_down.sh Restart=on-failure [Install] WantedBy=multi-user.targetsystemctl daemon-reloadsudo systemctl enable sevrice_up_down.servicesudo systemctl start sevrice_up_down.service
Сервис успешно запущен. Можно попробовать остановить Asterisk командой
fwconsole stop, при этом ip carp должен перейти на ре зервный сервер. На этом с карпом мы закончили.Настраеваем Freepbx для синхронизации между собой.
Первым делом нужно настроить доступ SSH. Для этого переходим на сервер
Freepbx01(Master) - 192.168.98.214и выполняем:sudo -u asterisk ssh-copy-id -i /home/asterisk/.ssh/id_rsa.pub root@SecondaryServerи введите пароль при появлении запроса.
Если эта команда выполнена без ошибок, вы готовы к тестированию:
В командной строке введите:
ssh -i /home/asterisk/.ssh/id_rsa root@SecondaryServerIPЕсли все прошло хорошо, вы должны войти на дополнительный сервер.Настройка модуля хранилища файлов
После завершения настройки SSH нам нужно настроить модуль Filestore для SSH.
Нажав «Добавить SSH-сервер», вы можете добавить свой SSH-сервер для хранения резервной копии. Всякий раз, когда вы запускаете резервное копирование с сервером SSH, установленным в качестве местоположения хранилища файлов, файл резервной копии будет передан на путь к серверам SSH, который вы добавили в хранилище файлов. Если резервное копирование по какой-то причине не удалось или не удалось подключиться к SSH-серверу, резервная копия будет сохранена в локальной системе (/var/spool/asterisk/backup/имя_резервной_копии/файл_резервной копии).

Переходим на
Freepbx02(Slave) - 192.168.98.215и идем в раздел Connectivity - API, нам нужно сгенерировать ключи.
Нажимаем Machine-to-Machine app, в окне вводим Your App Name, Description и Allowed Scopes он должен быть:
gql:backup:write
Генерируются ключи и сохраняем их в свой файлик *.txt.

Переходим на каждый из серверов Freepbx и идем в раздел Settings-File-Local
Добавляем новое месторасположения бекапов:
_ASTSPOOLDIR_/backup

- Переходим на
Freepbx01(Master) - 192.168.98.214и идем в раздел Store Admin-Backup & Restore там создаем новый бекап.
Даем имя бекапу, выбираем модули которые хотите бекапить. Важно отключить копирование двух модулей:
Backup & Restore
System Admin
В разделе Custom Files можно указать копирование дополнительных каталогов, например tftpboot если используется. Также настраивается уведомленя по почте. В разделе Storage Location указываем ранее созданое место для бекапов. Настраиваем Schedule and Maintenance по своим нуждам.
И теперь самы важный раздел, Warm Spare в котором мы должны ввести данные которые сохраняли в блокноте.

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

Доработака Freepbx (Sip&IAX2)
Так как у нас будет использоватся Carp ip адрес как основной нужно до настроить Sip а у кого используется IAX2 то и его тоже.
Переходим в Settings- Asterisk SIP Settings и указываем в качестве External Address адрес вашого CARP. В Local Networks указываем подсети с которых будет проводится регистрация sip клиентов.

Для IAX2 переходим в транк и в Outgoing нужно дописать**:**
sourceaddress=(Carp ip address) например sourceaddress=192.168.98.14Теперь наш транк будет отбащатся через адрес 192.168.98.14
Мы получили полностью отказоустойчивую АТС бесплатно.
######################
Обновление Freepbx
yum upgrade -y
fwconsole ma upgradeall
fwconsole chown
fwconsole reload
fwconsole chown
fwconsole reload
fwconsole versionupgrade --check
fwconsole versionupgrade --upgrade
fwconsole chown
fwconsole reload
reboot or fwconsole restart
Дополнительные настройки.
Zabbix
rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm
yum install zabbix-agent2
systemctl restart zabbix-agent2
systemctl enable zabbix-agent2
Скопировть конфиг с старого сервера
Tftp
sudo vi /etc/selinux/config
SELINUX=disabled
sudo yum install tftp tftp-server xinetd
sudo systemctl enable xinetd
sudo systemctl enable tftp
sudo systemctl restart xinetd
Vpn Up Down
Для выполнения (спец) скриптов от пользователя asterisk может понадобится интерпритатор.
yum install expect
проверяем
su - asterisk
Для некоторых скриптов добавляю права доступа в mcedit /etc/sudoers
root<-->ALL=(ALL) <---->ALL
pbx<------>ALL=(ALL)<----->ALL
zabbix<><------>ALL=NOPASSWD: /usr/sbin/asterisk
asterisk<------>ALL=(ALL) NOPASSWD: /home/script/disable_port12.sh, /home/script/shutdown_thinstantion.sh, /home/script/shutdown_thinstantion.sh_bk
Проверяем каждый скрипт в ручную!!!
Для фиксации ip которые попадают в БАН настраиваем лог агента. Установка..
pwd
/usr/src
yum localinstall nxlog-ce-3.2.2329_rhel7.x86_64.rpm
systemctl enable nxlog
Копируем конфиги /etc/nxlog
systemctl restart nxlog

