Tag: Asterisk

  • Отказоустойчивый 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. Проверим диск на наличие ошибок (все ошибки необходимо исправить):

     e2fsck –f /dev/sda2

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

    resize2fs –f –p /dev/sda2 3000M

    где \”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. Проверяем раздел на наличие ошибок:

    fsck –f /dev/sda2

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

    resize2fs -е -р / dev/sda2

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

    fsck -f / dev/sda2

    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-раздел:

    mkswap –L SWAP-sda3 /dev/sda3

    \"\"

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

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

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

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

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

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

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

    mkdir /ha
    cd /ha
    wget http://891rpm.arthead.ru/filez/asterisk_ha_cpu_single.tar.bz2
    tar -xjvf asterisk_ha_cpu_single.tar.bz2

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

    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-адреса.

    wget http://support.red-fone.com/downloads/fonulator/fonulator-2.0.3.tar.gz tar -xzvf fonulator-2.0.3.tar.gz
    cd fonulator-2.0.3

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

    ./configure
    make clean
    make
    make install
    cd /usr/local/bin
    chmod a+x fonulator

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

    http://891rpm.arthead.ru/filez/fonulator

     

    http://891rpm.arthead.ru/filez/foneBRIDGE2_Installation_Guide_English.pdf

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

    cd /etc/init.d
    chmod a+x fonulator

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

    redfone1.conf

    [globals]
    fb1=00:50:C2:65:D1:62
    fb2=00:50:C2:65:D1:63
    server1=00:1A:64:11:3B:76
    card=eth1,fb1
    
    [span1]
    span=1,0,0,ccs,hdb3,crc4
    server1
    fb1
    pri

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

    redfone2.conf

    [globals]
    fb1=00:50:C2:65:D1:6A
    fb2=00:50:C2:65:D1:6B
    server1=00:1A:64:11:3B:76
    card=eth1,fb1
    
    [span1]
    span=1,0,0,ccs,hdb3,crc4
    server1
    fb1
    pri

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

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

    zaptel.conf (dahdi.conf)

    # 2 X E1 PRIs, on 2 separate fonebridges
    #
    # fonebridge No. 1
    #
    dynamic=eth,eth1/00:50:C2:65:D1:62/0,31,2
    #
    # fonebridge No. 2
    #
    dynamic=eth,eth1/00:50:C2:65:D1:6A/0,31,2
    #
    bchan=1-15,17-31
    dchan=16
    bchan=32-46,48-62
    dchan=47
    
    # Global data
    
    loadzone	= ru
    defaultzone	= ru

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

    zapata.conf

    ;
    ; Zapata telephony interface
    ;
    ; Configuration file
    
    [trunkgroups]
    
    [channels]
    
    language=en
    context=default
    switchtype=euroisdn
    pridialplan=unknown
    prilocaldialplan=unknown
    signalling=pri_cpe
    usecallerid=yes
    hidecallerid=no
    callwaiting=yes
    usecallingpres=yes
    callwaitingcallerid=yes
    threewaycalling=yes
    transfer=yes
    cancallforward=yes
    callreturn=yes
    echocancel=yes
    echocancelwhenbridged=yes
    rxgain=0.0
    txgain=0.0
    group=0
    callgroup=1
    pickupgroup=1
    immediate=no
    channel =>  1-15,17-31,32-46,48-62
    
    ;faxdetect=both
    faxdetect=incoming
    ;faxdetect=outgoing
    ;faxdetect=no
    
    ;Include genzaptelconf configs
    #include zapata-auto.conf
    
    group=1
    
    ;Include AMP configs
    #include zapata_additional.conf

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

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

    astmaster.local 192.168.0.203/24/eth1 drbddisk::shared
    Filesystem::/dev/drbd0::/share::ext3 drbdlinks mysqld sendmail
    asterisk httpd munin-node vsftpd ircd xplhub amportal xinetd

    изменить на:

    asteriskmaster.local 192.168.0.203/24/eth1 drbddisk::shared
    Filesystem::/dev/drbd0::/share::ext3 drbdlinks mysqld sendmail
    fonulator
    asterisk httpd munin-node vsftpd ircd xplhub amportal xinetd

    Благодаря этому, скрипт 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;

    apt-get install openssh-server
    apt-get install build-essential
    apt-get install linux-headers-2.6.28-11-server
    apt-get install libnet1 libnet1-dev
    apt-get install libpcap0.8 libpcap0.8-dev
    apt-get install libargtable2-0 libargtable2-dev
    apt-get install libncurses5-dev
    apt-get install libnewt-dev

    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.

    cd /usr/src
    wget http://support.red-fone.com/downloads/dahdi/dahdi-linux-2.2.0-redfone.tar.gz
    wget http://support.red-fone.com/downloads/dahdi/dahdi-tools-redfone-2.0.0.tar.gz
    wget http://support.red-fone.com/downloads/fonulator/libfb-2.0.0.tar.gz
    wget http://downloads.asterisk.org/pub/telephony/libpri/releases/libpri-1.4.10.1.tar.gz
    wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.4.26.tar.gz

    Install libfb, fonulator library.

    tar xzvf libfb-2.0.0.tar.gz
    cd libfb-2.0.0
    make clean
    ./configure
    make
    make install
    cd ..

    Install fonulator, the fonebridge configuration utility

    tar xzvf fonulator-2.0.0.tar.gz
    cd fonulator-2.0.0
    ./configure
    make
    make install

    Confirm fonulator installation successful

    fonulator -V

    fonulator 2.0.0

    Copyright (C) 2007 Redfone Communications, LLC.

    Build Number: 36

    Install dahdi and dahdi-tools

    tar xzvf dahdi-1.4.9.2.tar.gz
    cd zaptel-1.4.9.2
    ./configure
    make menuselect
    make
    make install

    Install libpri

    tar xzvf libpri-1.4.5.tar.gz
    cd libpri-1.4.5
    make
    make install
    cd ..Install asterisk
    tar xzvf asterisk-1.4.21.1.tar.gz
    cd asterisk-1.4.21.1
    ./configure
    make
    make install
    make samples
    make config

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

    http://support.red-fone.com