Отказоустойчивый Asterisk-кластер на основе DRDB и Redfone foneBRIDGE2

Имеем задачу увеличить отказоустойчивость работы телефонии, для этого создаем кластер, основанный на использовании пакета DRDB. Для связи с PSTN-провайдером служит TDMoE-конвертер от Redfone — foneBRIDGE2. Конвертер преобразует поток T1/E1 в Ethernet. Для обеспечения отказоустойчивости в нашем случае используются 2 сервера Asterisk, — Master и Slave, пара других сетевых интерфейсов серверов (eth0) соединена с помощью cross-кабеля. Синхронизация между серверами осуществляется с помощью DRBD, благодаря которому мы получим «сетевой RAID1». В качестве системы управления отказоустойчивостью кластером, выбран пакет Heartbeat.

Предположим, что у нас есть 2 сервера, с установленным Asterisk и настроенной сетью.

Master: astmaster.local — eth0: 192.168.0.200, eth0: 10.10.10.10
Slave: astslave.local — eth0: 192.168.0.201, eth0: 10.10.10.11

Потребуется также 3-й IP-адрес, из сети 192.168.0.0/24, так называемый виртуальный IP-адрес, например — 192.168.0.203.

На данный момент, оба сервера c Asterisk, связаны с этим виртуальным IP, т.е. на интерфейсах eth1 каждого сервера прописан alias с IP-адресом 192.168.0.203.

Настройка файловой системы

Для осуществления синхронизации между серверами, нам потребуется дополнительный раздел.

1. Загрузимся с LiveCD

2. Проверим диск на наличие ошибок (все ошибки необходимо исправить):

3. Изменим размер текущего раздела sda2:

где «3000M» — новый размер раздела, следует также помнить:

  • Раздел swap должен быть не менее 512M и не более 1G, для наших целей.
  • Для синхронизации разделов DRDB, слишком большой размер займет очень много времени, если раздел будет слишком маленьким — не хватит места. Минимальный размер раздела DRDB составляет 4 Gb. Оптимальные размеры от 4 до 16 Gb. (Примечание. Из-за бага или фичи в resize2fs, или даже в fdisk, размер главного раздела надо умножить на 0,75, в нашем случае будет именно 3 Gb).

4. Запускаем fdisk /dev/sda, жмем «p» и enter. В нашем случаем, как показано на скриншоте ниже, и стираем все разделы ниже 14-го цилиндра, являющегося началом раздела sda2.

  • Удаляем swap раздел:
    • Жмем «d», Enter
    • Жмем «3», Enter
  • Удаляем раздел sda2
    • Жмем «d», Enter
    • Жмем «2», Enter
  • Создаем новый раздел sda2
    • Жмем «n», Enter
    • Жмем «p», Enter
    • Жмем «2», Enter
    • Жмем «14», Enter (или то значение, с которого начинается раздел sda2)
    • Жмем «+4000M», Enter (или другой необходимый размер для DRDB-раздела)
    • Жмем «w», Enter

5. Проверяем раздел на наличие ошибок:

6. Запускаем resize2fs, без указания размера раздела, чтобы использовать всё доступное место на этом разделе.

7. Снова запускаем fsck, чтобы удостовериться, что всё прошло нормально:

8. Запускаем fdisk /dev/sda еще раз, для создания swap-раздела:

  • Жмем «n», Enter
  • Жмем «p», Enter
  • Жмем «3», Enter, Enter
  • Жмем «+768M», Enter (вводим размер файла подкачки)
  • Жмем «t», Enter
  • Жмем «3», Enter
  • Жмем «82», Enter
  • Жмем «n», Enter
  • Жмем «p», Enter
  • Жмем Enter, Enter
  • Жмем «w», Enter

10. Форматируем swap-раздел:

11. Перезагружаем сервера.

Установка и настройка DRDB

Для дальнейших настроек можно скачать уже настроенные пакеты DRDB и Heartbeat:

Для нескольких CPU: asterisk_ha_cpu_multi.tar.bz2

Для одного CPU: asterisk_ha_cpu_single.tar.bz2

Внимание! Скрипты заточены только под Trixbox 1.2.3!

Создаем новую директорию в корне:

Перед использованием скриптов, проверим:

1. Внешние интерфейсы серверов (eth1) должны принадлежать одной сети (192.168.0.0/24).

2.  Внутренние интерфейсы серверов (eth0) должны принадлежать одной сети (10.10.10.0/24). При необходимости можно указать другие IP-адреса в файле drdb.conf.

3. Имя первичного сервера — astmaster.local, вторичного — astsecondary.local. Команда uname -n должна возвращать эти имена. При необходимости можно указать другие имена в файлах drdb.conf, ha.d/ha.cf и ha.d/haresources.

Внимание! В имени хоста необходимо использовать «.». Если использовать простое имя, без точки, то Sendmail будет загружаться очень медленно, что снизит переключение между серверами на несколько минут, вместо секунд. 🙂

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

5. IP-адреса серверов и шлюза также прописываются в ha.d/haresources.

6.  Необходимо убедиться, что сервера видят друг друга, и firewall на внутренних интерфейсах (eth0) отключен.

7. Для гигабитных интерфейсов, внутри кластера (eth0), необходимо в файле drdb.conf изменить параметр «rate» в значение «120».

8. Выполним скрипт /root/ha/drdb на обоих серверах — ошибок быть не должно. Если выполнить скрипты не одновременно или пройдет таймаут, DRDB может сообщить, что ожидает соседние ноды. Однако, после загрузки drdb.primary, необходимо убедиться, что узлы синхронизированы.

9. Проверить работу DRDB можно, выполнив cat /proc/drbd. При этом узлы будут находиться в состоянии secondary или inconsistent.

10. На первичном сервере надо запустить скрипт /root/ha/drbd.primary. Выполнение может занять некоторое время, однако ошибок быть не должно, разве что различных предупреждений типа — «timestamp in future».

11. Необходимо подождать, пока DRDB синхронизирует узлы кластера. Этот процесс может занять до нескольких часов. Для проверки готовности узлов можно проверить статус, командой cat /proc/drbd.

12. После окончания синхронизации, на первичном сервере появится сообщение:

13. DRDB установлен и работает!

Установка и настройка Heartbeat

1. Выполним скрипт /root/ha/ha на обоих серверах. Будут остановлены эти демоны: mysql, sendmail, asterisk, httpd, munin-node, ircd, xinetd, xplhub, vsftpd.

2. Через некоторое время, после запуска Heartbeat демоны снова начнут работать:

3. Если выполнить команду ifconfig eth1:0 увидим виртуальный IP-адрес 192.168.0.203, приписанный первичному серверу.

4. Для тестирования кластера просто выключаем питание на первичном сервере.

Через пару секунд все службы и alias сетевого интерфейса будут запущены на вторичном сервере.

Включаем первичный сервер. После загрузки первичного сервера, все службы на вторичном сервере «перейдут» на первичный сервер.

Кластер готов к работе.

 

Установка и настройка Redfone foneBRIDGE2

Желательно TDMoE трафик из foneBRIDGE изолировать VLAN’ом X, на коммутаторе.

Примечание: VLAN X имеет доступ к серверам кластера в VLAN Y, но не имеет доступа к VLAN Z, где размещены VoIP-устройства и пр. Между VLAN Y и VLAN Z обмен пакетами разрешен. Основная задача изолировать TDMoE трафик от остальной сети.

Настройка foneBRIDGE2 и Zaptel

Чтобы заставить foneBRIDGE работать, надо скачать, скомпилировать и установить программу Fonulator (Redfone). Основной файл настроек программы — redfone.conf.

Работа foneBRIDGE основана на TDMoE (Time Division Multiplexing over Ethernet) через MAC-адреса.

(для более старых версий можно указать CFLAGS=-static)

Загрузочный скрипт можно скачать здесь:

http://www.891rpm.com/filez/fonulator

 

http://www.891rpm.com/filez/foneBRIDGE2 Installation Guide English.pdf

Скрипт устанавливается в директорию /etc/init.d/ на каждом сервере.

Настриваем foneBRIDGE  помощью файла настроек redfone1.conf и redfone2.conf. Надо скопировать эти файлы в директорию /etc/ на каждом сервере.

redfone1.conf

Измените fb1 и fb2 на MAC-адреса, указанные на каждом из foneBRIDGE. Параметр server1 изменяем на MAC-адрес сетевого интерфейса eth1, соответствующего сервера.

redfone2.conf

Измените fb1 и fb2 на MAC-адреса, указанные на каждом из foneBRIDGE. Параметр server1 изменяем на MAC-адрес сетевого интерфейса eth1, соответствующего сервера.

Скрип запуска fonulator, в /etc/init.d использует оба этих файла для запуска foneBRIDGE’ей.

zaptel.conf (dahdi.conf)

Надо указать MAC-адреса соответствующие MAC-адресам foneBRIDGE. Необходимо указывать только MAC-адреса интерфейса FB1, каждого из foneBRIDGE.

zapata.conf

No you need to edit the haresources file on both machines.

Надо также отредактировать файл /etc/ha.d/haresources на обоих серверах:

изменить на:

Благодаря этому, скрипт fonulator заработает, как кластерный сервис! 🙂

Включите оба foneBRIDGE и подключите к коммутатору. Перезагрузите оба сервера. Если возникнут проблемы с загрузкой серверов, можно зайти на первичный сервер и выполнить zztool (dahdi_tool).

После этого, оба SPAN должны нормально и без ошибок работать.

(http://www.fintechcommunications.com/tutorials/asteriskCluster.htm)

 

———————————————-

Ubuntu Server 9.04 Install with Asterisk and foneBRIDGE2

Requirements

Base Install from ISO image

Components

dahdi-2.2.0

dahdi-tools-2.0.0

libpri-1.4.10.1

asterisk-1.4.26

Install Steps
Install dependencies and helper packages;

Download ASTERISK, DAHDI, LIBPRI, FONULATOR, LIBFB. Please note many of the asterisk.org directories change frequently which may require modifications to the full URL path used in some of the following command examples.

Install libfb, fonulator library.

Install fonulator, the fonebridge configuration utility

Confirm fonulator installation successful

fonulator 2.0.0

Copyright (C) 2007 Redfone Communications, LLC.

Build Number: 36

Install dahdi and dahdi-tools

Install libpri

Continue install following normal configuration guidelines for the fonebridge2 and Asterisk;

http://support.red-fone.com