High Availability IP FailOver
Рассмотрим создание отказоустойчивого кластера из двух серверов Asterisk/FreePBX
с автоматической подменой IP адреса и синхронизацией БД FreePBX.
Heartbeat, Asterisk, FreePBX, Centos6 x86_64
Задайте Hostname для каждого из узлов (asterisk1, asterisk2)
[root@asterisk1 ha.d]# cat /etc/sysconfig/network NETWORKING=yes HOSTNAME=asterisk1
[root@asterisk2 ha.d]# cat /etc/sysconfig/network NETWORKING=yes HOSTNAME=asterisk2
Подключим Epel репозиторий
(asterisk1, asterisk2)
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm && wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm && rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm
Установим Heartbeat
(asterisk1, asterisk2)
yum install -y heartbeat
Настроим Heartbeat
Файл конфигурация ha.cfдля каждого из узлов
logfile /var/log/ha-log node asterisk1 node asterisk2 keepalive 1 deadtime 10 bcast eth0 auto_failback on respawn hacluster /usr/lib64/heartbeat/ipfail
Сгенерируем пароль sha1, где PASS ваше кодовое слово.
echo -n PASS | sha1sum | awk '{print $1}' bd564db5d5cc358eb0e3523d3e03041739f230d5
Создадим файл ключа авторизации
nano /etc/ha.d/authkeys
auth 1 1 sha1 bd564db5d5cc358eb0e3523d3e03041739f230d5
chmod 600 /etc/ha.d/authkeys
Скопируем файл на резервный узел (asterisk2)
scp /etc/ha.d/authkeys asterisk2:/etc/ha.d/
/etc/ha.d/haresources
(asterisk1)
asterisk2 IPaddr::192.168.1.202/24/eth0
/etc/ha.d/haresources
(asterisk2)
asterisk1 IPaddr::192.168.1.201/24/eth0
Включим hearteat на обоих узлах
/etc/init.d/heartbeat start
Проверим IP адрес на резервном узле (asterisk2)
[root@asterisk2 ha.d]# ip addr | grep "inet" inet 192.168.1.202/24 brd 192.168.1.255 scope global eth0 inet 192.168.1.201/24 brd 192.168.1.255 scope global secondary eth0
Secondary eth0 (192.168.1.201) примет пакеты, если основной узел (asterisk1) будет недоступен в течении 10 секунд.
Если включен файрвол разрешим пинги снаружи на обоих узлах.
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT && iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT && service iptables save
И наконец включим автозагрузку heaкtbeat на каждом из узлов.
chkconfig heartbeat on
Синхронизация Баз Данных FreePBX
Настроим резервный сервер (asterisk2) таким образом, чтобы он подключался к основному серверу (asterisk1) по SSH
и синхронизировал настройки asterisk, autoprovision и др.
Настройка SSH подключения
В данном примере Asterisk и Web server работают из под пользователя asterisk.
Зададим временный пароль пользователю asterisk
На основном сервере (asterisk1)
#chsh -s /bin/bash asterisk
#passwd asterisk somepassword #chmod 755 /var/lib/asterisk
Сгенерируем ssh ключ на резервном сервере (Asterisk2)
#chsh -s /bin/bash asterisk
#su - asterisk $ssh-keygen
Команда ssh-keygen создаст ключ в /home/asterisk/.ssh/id_rsa
Не вводите passphrase, оставьте пустым:
]$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/asterisk/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/asterisk/.ssh/id_rsa. Your public key has been saved in /home/asterisk/.ssh/id_rsa.pub. The key fingerprint is: 84:a8:1b:6f:2c:56:91:d5:d2:12:8f:8f:28:78:07:4e asterisk@asterisk2 The key's randomart image is: +--[ RSA 2048]----+ | o+ | | +o+o | | A + o+o | | + o o + | |. * + . D | | . O | | + + | | . o | | | +-----------------+
Кода ключ создан, скопируем его на основной сервер:
$ssh-copy-id -i asterisk@asterisk1_IP
Будет запрошен пароль, заданный для пользователя asteriskна основном севере.
[asterisk@asterisk2 root]$ ssh-copy-id -i asterisk@192.168.1.201 The authenticity of host '192.168.1.201 (192.168.1.201)' can't be established. RSA key fingerprint is 61:44:a0:40:78:33:2a:b5:ec:eb:5f:55:36:39:8b:4d. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.1.201' (RSA) to the list of known hosts. asterisk@192.168.1.201's password: Now try logging into the machine, with "ssh 'asterisk@192.168.1.201'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting.
Проверим подключение по ssh с ключом:
[asterisk@asterisk2 root]$ ssh asterisk@192.168.1.201 [asterisk@asterisk1 ~]$
Если произошло подключение к основному серверу без пароля, все в порядке.
В завершении настройки SSH подключения, удалим пароль пользователя asteriskна основном сервере (asterisk1).
passwd -d asterisk
И перейдем к настройке автоматической синхронизации FreePBX
Выберете на резервном сервере Admin > Backup & Restore > Servers - New SSH Server
Hostname - ip адрес основного сервера Asterisk1
Port - порт ssh
User Name - пользователь, в нашем случае asterisk
Key - местонахождение ключа (/home/asterisk/.ssh/id_rsa)
Затем выберете Admin > Backup & Restore > Backups - New Backup
Задайте имя и перетащите шаблоны для настроек:
в нашем примере это Full Backupи Exclude Backup Settings
Местонахождение директории tftp сервера, где лежат файлы для autoprovision, изменена с /tftpboot на /var/lib/tftpboot.
Задайте в соответствии с вашими условиями.
И в завершении укажем созданный нами Backup Server (asterisk1)
и хранилище - Local Storage (local)
Restore Here - записать скачанный бэкап в базу данных asterisk
Disable Registered Trunks - отключить зарегистрированные транки, во избежание проблем с входящими вызовами на основном сервере.
Exclude NAT Settings - Исключить специфические настройки IP основного сервера.
Apply Config - Применить скачанный бэкап (записать в конфиги asterisk)
Сохраним Saveи проверим немедленно and Run