Changes between Version 11 and Version 12 of SoftswitchFailOver


Ignore:
Timestamp:
Mar 10, 2017, 3:25:42 PM (7 years ago)
Author:
alx
Comment:

Изменили скрипт контроля FreeSwitch

Legend:

Unmodified
Added
Removed
Modified
  • SoftswitchFailOver

    v11 v12  
    596596Контролируем переход сервера из состояния BACKUP в состояние MASTER. Для этого на несколько секунд отключаем активный в данный момент MASTER от сети (или просто останавливаем на нем демон keepalived). Контролируцем, что сервер, находившийся в состоянии BACKUP, перешел в состояние MASTER.
    597597
    598 На данном этапе у нас настроен переход сервера из резерва в активное состояние по единственному критерию - недоступности мастера, определяемой по протоколу VRRP. Теперь добавим сюда контроль работоспособности !FreeSwitch. Для этого создаем следующий скрипт:
    599 
    600 {{{#!perl
    601 #!/usr/bin/perl
    602  
    603 my $password = "secret";
    604 my @required = ("internal");
    605  
    606 my %saw = ();
    607 open(my $in, "-|") || exec("/usr/bin/fs_cli", "-p$password", "-x", "sofia xmlstatus");
    608 while ( defined(my $line = <$in>) )
    609 {
    610     if ( $line =~ m|<name>(.*)</name>|o )
    611     {
    612         $saw{$1} = 1;
    613     }
    614 }
    615 close($in);
    616  
    617 foreach my $profile ( @required )
    618 {
    619     if ( ! $saw{$profile} )
    620     {
    621         exit(1);
    622     }
    623 }
    624  
    625 exit(0);
    626 }}}
    627 
    628 где "secert" заменяем на пароль доступа к event-socket !FreeSwitch-сервера, а массиву "@required" присваиваем имена SIP-профилей, наличие которых необходимо контролировать. Теперь, если все перечисленные в @required профили запущены, скрипт вернет 0, иначе - 1. Проверпим его функционирование, запустив вручную. Если все хорошо, укажем keepalived проверять работоспособность !FreeSwitch каждые 10 секунд. Для этого в /etc/keepalived/keepalived.conf добавляем секцию с описанием скрипта:
     598На данном этапе у нас настроен переход сервера из резерва в активное состояние по единственному критерию - недоступности мастера, определяемой по протоколу VRRP. Теперь добавим сюда контроль работоспособности !FreeSwitch. Для этого создаем скрипт /etc/keepalived/ka-status.sh:
     599
     600{{{#!sh
     601#!/bin/sh
     602
     603password="secret";
     604profiles="internal internal6";
     605
     606# Если виртуальный адрес еще не поднят, возвращаем успех.
     607arping -q -c3 -W0.1 192.168.0.63 || exit 0
     608
     609# Если виртруальный адрес поднят, проверяем работоспособность FreeSwitch
     610RESULT=`/usr/bin/fs_cli -p$password -x "sofia xmlstatus"`
     611
     612for P in $profiles; do
     613    echo $RESULT | grep -q "<name>$P</name>" || exit 1
     614done
     615
     616exit 0;
     617}}}
     618
     619где "secert" заменяем на пароль доступа к event-socket !FreeSwitch-сервера, а переменной {{{profiles}}} присваиваем имена SIP-профилей, наличие которых необходимо контролировать. Теперь, если все перечисленные в {{{profiles}}} профили запущены, скрипт вернет 0, иначе - 1.
     620
     621Если требуется контролировать только один профиль, скрипт можно сделать более лаконичным:
     622
     623{{{#!sh
     624#!/bin/sh
     625
     626password="secret";
     627profile="internal";
     628
     629# Если виртуальный адрес еще не поднят, возвращаем успех.
     630arping -q -c3 -W0.1 192.168.0.63 || exit 0
     631
     632# Если виртруальный адрес поднят, проверяем работоспособность FreeSwitch
     633/usr/bin/fs_cli -p$password -x "sofia xmlstatus" | grep -q "<name>${profile}</name>" || exit 1
     634
     635exit 0;
     636}}}
     637
     638arping в начале скрипта нужен для разрешения проблемы яйца и курицы: keepalived не перейдет в состояние MASTER и не поднимет на сетевом интерфейсе виртуальный адрес, пока наш скрипт не вернет 0, в то же время профиль !FreeSwitch не сможет стартовать, пока в сети не поднят виртуальный адрес, так как именно этот адрес используется для подключения к базе данных. Благодаря строчке с arping при включении первого из двух серверов, когда виртуального адреса еще нет, скрипт вернет 0, keepalived успешно перейдет в состояние MASTER и активирует виртуальный адрес.
     639
     640Проверим функционирование скрипта, запустив его вручную. Если все хорошо, укажем keepalived проверять работоспособность !FreeSwitch каждые 10 секунд. Для этого в /etc/keepalived/keepalived.conf добавляем секцию с описанием скрипта:
    629641
    630642{{{
    631643vrrp_script chk_fs {
    632     script "/etc/keepalived/ka-status.pl"
     644    script "/etc/keepalived/ka-status.sh"
    633645    interval 10
    634646}