Changes between Version 10 and Version 11 of SoftswitchFailOver


Ignore:
Timestamp:
Mar 9, 2017, 7:00:23 PM (7 years ago)
Author:
alx
Comment:

Добавлено конфигурирование автоматического переключения на резерв

Legend:

Unmodified
Added
Removed
Modified
  • SoftswitchFailOver

    v10 v11  
    523523
    524524Проверим работу синхронизации: на первом сервере создадим новый файл в /var/lib/freeswitch/recordings/ и изменим какой-нибудь файл в /etc/freeswitch/. Подождем 5 минут и убедимся, что на втором сервере появился новый файл в /var/lib/freeswitch/recordings/ и отразилось изменение файла в /etc/freeswitch/. Аналогично проверим копирование в обратном направлении.
     525
     526== Переключение на резерв ==
     527
     528Далее будет описано два варианта настройки переключения на резервный сервер:
     529
     530* автоматическое переключение;
     531* ручное переключение.
     532
     533=== Автоматическое переключение ===
     534
     535Для автоматического переключения будем использовать протокол VRRP и демон keepalived. Устанавливаем пакет keepalived:
     536
     537{{{
     538$ sudo apt-get install keepalived
     539}}}
     540
     541Конфигурируем keepalived. Сначала создадим скрипт /etc/keepalived/ka-master.pl, который будет передавать !FreeSwitch команду sofia recover при переходе сервера в состояние MASTER:
     542
     543{{{#!perl
     544#!/usr/bin/perl
     545
     546my $password = "secret";
     547 
     548open(STDOUT, "|/usr/bin/logger -t ka-master");
     549print "Instance went to master, issuing sofia recover.\n";
     550system("/usr/bin/fs_cli", "-p$password", "-x", "sofia recover");
     551}}}
     552
     553где "secret" меняем на наш пароль доступа к event-socket !FreeSwitch. Так как файл содержит пароль, не забываем установить ему права доступа, разрешающие чтение только для пользователя root:
     554
     555{{{
     556$ sudo chown root:root /etc/keepalived/ka-master.pl
     557$ sudo chmod 700 /etc/keepalived/ka-master.pl
     558}}}
     559
     560Создаем базовый файл конфигурации /etc/keepalived/keepalived.conf:
     561
     562{{{
     563global_defs {
     564    router_id FREESW
     565}
     566
     567vrrp_instance VI_FREESW {
     568    state BACKUP
     569    interface eth0
     570    virtual_router_id 51
     571    priority 100
     572    advert_int 1
     573    authentication {
     574        auth_type PASS
     575        auth_pass labuda25
     576    }
     577    notify_master "/etc/keepalived/ka-master.pl"
     578    virtual_ipaddress {
     579        192.168.0.63/24 dev eth0 label eth0:0
     580    }
     581}
     582}}}
     583
     584где "eth0" - имя сетевого интерфейса, "eth0:0" - алиас виртуального адреса - меняем их в соответствии с именем интерфейса каждого сервера.
     585
     586Запускаем keepalived на одном из серверов:
     587
     588{{{
     589$ sudo service keepalived start
     590}}}
     591
     592Контролируем в /var/log/syslog, что демон успешно запустился и, так как на втором сервере keepalived еще не запуцщен, сразу после запуска keepalived должен перейти в состояние MASTER. Контролируем, что у сервера появился адрес 192.168.0.63.
     593
     594Теперь запускаем keepalived на втором сервере. Контролируем, что демон запустился, на находится в состоянии BACKUP, так как в сети уже есть MASTER.
     595
     596Контролируем переход сервера из состояния BACKUP в состояние MASTER. Для этого на несколько секунд отключаем активный в данный момент MASTER от сети (или просто останавливаем на нем демон keepalived). Контролируцем, что сервер, находившийся в состоянии BACKUP, перешел в состояние MASTER.
     597
     598На данном этапе у нас настроен переход сервера из резерва в активное состояние по единственному критерию - недоступности мастера, определяемой по протоколу VRRP. Теперь добавим сюда контроль работоспособности !FreeSwitch. Для этого создаем следующий скрипт:
     599
     600{{{#!perl
     601#!/usr/bin/perl
     602 
     603my $password = "secret";
     604my @required = ("internal");
     605 
     606my %saw = ();
     607open(my $in, "-|") || exec("/usr/bin/fs_cli", "-p$password", "-x", "sofia xmlstatus");
     608while ( defined(my $line = <$in>) )
     609{
     610    if ( $line =~ m|<name>(.*)</name>|o )
     611    {
     612        $saw{$1} = 1;
     613    }
     614}
     615close($in);
     616 
     617foreach my $profile ( @required )
     618{
     619    if ( ! $saw{$profile} )
     620    {
     621        exit(1);
     622    }
     623}
     624 
     625exit(0);
     626}}}
     627
     628где "secert" заменяем на пароль доступа к event-socket !FreeSwitch-сервера, а массиву "@required" присваиваем имена SIP-профилей, наличие которых необходимо контролировать. Теперь, если все перечисленные в @required профили запущены, скрипт вернет 0, иначе - 1. Проверпим его функционирование, запустив вручную. Если все хорошо, укажем keepalived проверять работоспособность !FreeSwitch каждые 10 секунд. Для этого в /etc/keepalived/keepalived.conf добавляем секцию с описанием скрипта:
     629
     630{{{
     631vrrp_script chk_fs {
     632    script "/etc/keepalived/ka-status.pl"
     633    interval 10
     634}
     635}}}
     636
     637и в секцию {{{vrrp_instance VI_FREESW}}} добавляем указание использовать этот скрипт:
     638
     639{{{
     640    track_script {
     641        chk_fs
     642    }
     643}}}
     644
     645Перезапустим keepalived:
     646
     647{{{
     648$ sudo service keepalived restart
     649}}}
     650
     651Контролируем, что сервер в состоянии BACKUP. Теперь подключаемся к консоли !FreeSwitch и останавливаем профиль internal:
     652
     653{{{
     654> sofia profile internal stop
     655}}}
     656
     657Ждем 10 секунд и контролируем, что keepalived перешел в состояние FAULT.
     658
     659=== Ручное переключение ===