Changes between Version 14 and Version 15 of SoftswitchFailOver


Ignore:
Timestamp:
Mar 13, 2017, 3:50:21 PM (8 years ago)
Author:
alx
Comment:

В схеме автоматического переключения сделаны два разных общих адреса для MySQL и FreeSwitch.

Legend:

Unmodified
Added
Removed
Modified
  • SoftswitchFailOver

    v14 v15  
    473473=== Автоматическое переключение ===
    474474
    475 Для автоматического переключения будем использовать протокол VRRP и демон keepalived. Этот демон будет обеспечивать однятие на одном из серверов (активном, MASTER) общего адреса. Общий адрес - это IP адрес, используя который один из двух серверов (активный) будет предоставлять сервис. Пусть для определенности это будет адрес {{{192.168.0.63}}}.
     475В этом варианте конфигурации мы будем использовать два общих IP адреса - один для базы данных MySQL, другой для !FreeSwitch. Общий адрес - это IP адрес, используя который один из двух серверов (активный) будет предоставлять сервис. Пусть для определенности общий адрес !FreeSwitch будет {{{192.168.0.63}}}, а общий адрес MySQL - {{{192.168.0.66}}}. Для автоматического переключения будем использовать протокол VRRP и демон keepalived. Этот демон будет обеспечивать поднятие на одном из серверов (активном, MASTER) общего адреса.
    476476
    477477Устанавливаем пакет keepalived:
     
    522522    }
    523523}
    524 }}}
    525 
    526 где "eth0" - имя сетевого интерфейса, "eth0:0" - алиас с общим адресом - меняем их в соответствии с именем интерфейса каждого сервера.
     524
     525vrrp_instance VI_MYSQL {
     526    state BACKUP
     527    interface eth0
     528    virtual_router_id 55
     529    priority 100
     530    advert_int 1
     531    authentication {
     532        auth_type PASS
     533        auth_pass labuda52
     534    }
     535    virtual_ipaddress {
     536        192.168.0.66/24 dev eth0 label eth0:1
     537    }
     538}
     539}}}
     540
     541где "eth0" - имя сетевого интерфейса - меняем его в соответствии с именем интерфейса каждого сервера. В данной конфигурации описано два экземпляра объекта vrrp: VI_MYSQL для сервера MySQL и VI_FREESW для сервера !FreeSwitch.
    527542
    528543Запускаем keepalived на одном из серверов:
     
    532547}}}
    533548
    534 Контролируем в /var/log/syslog, что демон успешно запустился и, так как на втором сервере keepalived еще не запуцщен, сразу после запуска keepalived должен перейти в состояние MASTER. Контролируем, что у сервера появился адрес 192.168.0.63.
    535 
    536 Теперь запускаем keepalived на втором сервере. Контролируем, что демон запустился, на находится в состоянии BACKUP, так как в сети уже есть MASTER.
     549Контролируем в /var/log/syslog, что демон успешно запустился и, так как на втором сервере keepalived еще не запуцщен, сразу после запуска экземпляры VI_MYSQL и VI_FREESW должны перейти в состояние MASTER. Контролируем, что у сервера появились адреса 192.168.0.63 и 192.168.0.66.
     550
     551Теперь запускаем keepalived на втором сервере. Контролируем, что демон запустился, но экземпляры VI_MYSQL и VI_FREESW находятся в состоянии BACKUP, так как в сети уже есть MASTER.
    537552
    538553Контролируем переход сервера из состояния BACKUP в состояние MASTER. Для этого на несколько секунд отключаем активный в данный момент MASTER от сети (или просто останавливаем на нем демон keepalived). Контролируцем, что сервер, находившийся в состоянии BACKUP, перешел в состояние MASTER.
    539554
    540 Теперь необходимо изменить настройки odbc таким образом, чтобы оба сервера !FreeSwitch подключались к базе данных используя общий адрес и, таким образом, подключались к одному и тому же серверу mysql. Для этого в ранее созданном файле /etc/odbc.ini указываем адрес сервера {{{192.168.0.63}}}.
     555Теперь необходимо изменить настройки odbc таким образом, чтобы оба сервера !FreeSwitch подключались к базе данных, используя общий адрес и, таким образом, подключались к одному и тому же серверу mysql. Для этого в ранее созданном файле /etc/odbc.ini указываем адрес сервера {{{192.168.0.66}}}.
    541556
    542557Устанавливаем параметр sysctl net.ipv4.ip_nonlocal_bind в значение 1 чтобы дать возможность неактивному серверу !FreeSwitch слушать адрес, отсутствующий на его интерфейсах:
     
    560575}}}
    561576
    562 На данном этапе у нас настроен переход сервера из резерва в активное состояние по единственному критерию - недоступности мастера, определяемой по протоколу VRRP. Теперь добавим сюда контроль работоспособности !FreeSwitch. Для этого сначала установим пакет arping:
    563 
    564 {{{
    565 $ sudo apt-get install arping
    566 }}}
    567 
    568 Теперь создадим скрипт /etc/keepalived/ka-status.sh:
     577На данном этапе у нас настроен переход сервера из резерва в активное состояние по единственному критерию - недоступности мастера, определяемой по протоколу VRRP. Теперь добавим сюда контроль работоспособности !FreeSwitch. Для этого создадим скрипт /etc/keepalived/fs-status.sh:
    569578
    570579{{{#!sh
     
    574583profiles="internal internal6";
    575584
    576 # Если общий адрес еще не поднят, возвращаем успех.
    577 arping -q -c3 -W0.1 192.168.0.63 || exit 0
    578 
    579 # Если общий адрес поднят, проверяем работоспособность FreeSwitch
    580585RESULT=`/usr/bin/fs_cli -p$password -x "sofia xmlstatus"`
    581586
    582587for P in $profiles; do
    583     echo $RESULT | grep -q "<name>$P</name>" || exit 1
     588    echo $RESULT | grep -q "<name>${P}</name>" || exit 1
    584589done
    585590
     
    587592}}}
    588593
    589 где "secert" заменяем на пароль доступа к event-socket !FreeSwitch-сервера, а переменной {{{profiles}}} присваиваем имена SIP-профилей, наличие которых необходимо контролировать. Теперь, если все перечисленные в {{{profiles}}} профили запущены, скрипт вернет 0, иначе - 1.
     594где "secert" заменяем на пароль доступа к event-socket !FreeSwitch-сервера, а переменной {{{profiles}}} присваиваем имена SIP-профилей, наличие которых необходимо контролировать. Не забываем установить скрипту права доступа, чтобы ничто не мог украсть пароль. Теперь, если все перечисленные в {{{profiles}}} профили запущены, скрипт вернет 0, иначе - 1.
    590595
    591596Если требуется контролировать только один профиль, скрипт можно сделать более лаконичным:
     
    597602profile="internal";
    598603
    599 # Если общий адрес еще не поднят, возвращаем успех.
    600 arping -q -c3 -W0.1 192.168.0.63 || exit 0
    601 
    602 # Если общий адрес поднят, проверяем работоспособность FreeSwitch
    603604/usr/bin/fs_cli -p$password -x "sofia xmlstatus" | grep -q "<name>${profile}</name>" || exit 1
    604 
    605605exit 0;
    606606}}}
    607607
    608 arping в начале скрипта нужен для разрешения проблемы яйца и курицы: keepalived не перейдет в состояние MASTER и не поднимет на сетевом интерфейсе общий адрес, пока наш скрипт не вернет 0, в то же время профиль !FreeSwitch не сможет стартовать, пока в сети не поднят общий адрес, так как именно этот адрес используется для подключения к базе данных. Благодаря строчке с arping при включении первого из двух серверов, когда общего адреса еще нет, скрипт вернет 0, keepalived успешно перейдет в состояние MASTER и активирует общий адрес.
    609 
    610608Проверим функционирование скрипта, запустив его вручную. Если все хорошо, укажем keepalived проверять работоспособность !FreeSwitch каждые 10 секунд. Для этого в /etc/keepalived/keepalived.conf добавляем секцию с описанием скрипта:
    611609
    612610{{{
    613611vrrp_script chk_fs {
    614     script "/etc/keepalived/ka-status.sh"
     612    script "/etc/keepalived/fs-status.sh"
    615613    interval 10
    616614}
     
    637635}}}
    638636
    639 Ждем 10 секунд и контролируем, что keepalived перешел в состояние FAULT.
     637Ждем 10 секунд и контролируем, что экземпляр VI_FREESW перешел в состояние FAULT.
    640638
    641639=== Ручное переключение ===