Changes between Version 15 and Version 16 of SoftswitchFailOver


Ignore:
Timestamp:
Mar 15, 2017, 11:49:22 AM (7 years ago)
Author:
alx
Comment:

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

Legend:

Unmodified
Added
Removed
Modified
  • SoftswitchFailOver

    v15 v16  
    647647}}}
    648648
    649 В файле /etc/network/interfaces обоих серверов добавляем настройку для общего адреса:
    650 
    651 {{{
    652 iface eth0:0 inet static
    653 address 192.168.0.63
    654 netmask 255.255.255.0
    655 }}}
    656 
    657 где вместо "eth0" следует вписать имя используемого сетевого интерфейса.
    658 
    659 Отредактируем файл /etc/default/arping, вписав в него {{{IPUP=1}}} и {{{DOWN=1}}}.
    660 
    661 На первом сервере выполняем команду
    662 
    663 {{{
    664 $ sudo ifup eth0:0
    665 }}}
    666 
    667 Выполнение этой команды на втором сервере должно дать ошибку, так как адрес уже присутствует в сети:
    668 
    669 {{{
    670 $ sudo ifup eth0:0
    671  * Using arping to check duplicity of 192.168.0.63...
    672    ...fail!
    673 run-parts: /etc/network/if-up.d/arping exited with return code 1
    674 Failed to bring up eth0:0.
    675 }}}
    676 
    677649Теперь необходимо изменить настройки odbc таким образом, чтобы оба сервера !FreeSwitch подключались к базе данных используя общий адрес и, таким образом, подключались к одному и тому же серверу mysql. Для этого в ранее созданном файле /etc/odbc.ini указываем адрес сервера {{{192.168.0.63}}}.
    678650
     
    696668$ sudo service freeswitch start
    697669}}}
     670
     671Для управления переключением на каждом из серверов установим lighttpd:
     672
     673{{{
     674$ sudo apt-get install lighttpd
     675}}}
     676
     677На каждом из серверов добавим два cgi-скрипта - один для отображения текущего состояния сервера, другой - для активации/деактивации сервера. Скрипт страницы состояния {{{/var/www/html/cgi-bin/status.sh}}}:
     678
     679{{{#!sh
     680#!/bin/sh
     681
     682# Имя сетевого интерфейса с общим адресом
     683IFNAME="eth2:0"
     684# Название сервера в заголовке страницы
     685HEADER="Сервер 1"
     686
     687# Генерируем веб-страницу с состоянием и кнопкой "Активировать"/"Деактивировать"
     688echo "Content-Type: text/html; charset=utf-8"
     689echo "Cache-Control: no-cache"
     690echo
     691echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
     692echo "<html>"
     693echo "  <head>"
     694echo '    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />'
     695echo "    <title>${HEADER}</title>"
     696echo "  </head>"
     697echo "  <body>"
     698echo "    <h1>${HEADER}</h1>"
     699echo '    <form action="/cgi-bin/onoff.sh">'
     700if ifconfig -a | grep -q "^${IFNAME} "; then
     701echo '    <div style="text-align:center; font-size:24pt; color:green;">Активен</div>'
     702echo '    <div style="text-align:center"><button type="submit" name="action" value="off">Деактивировать</button></div>'
     703else
     704echo '    <div style="text-align:center; font-size:24pt; color:#909090;">В резерве</div>'
     705echo '    <div style="text-align:center"><button type="submit" name="action" value="on">Активировать</button></div>'
     706fi
     707echo '    </form>'
     708echo "  </body>"
     709echo "</html>"
     710}}}
     711
     712где переменные {{{IFNAME}}} и {{{HEADER}}} устанавливаем в соответствии с именем именем сетевого интерфейса каждого сервера и желаемым заголовком соответственно.
     713
     714Скрипт активации/деактивации {{{/var/www/html/cgi-bin/onoff.sh}}}:
     715
     716{{{#!sh
     717#!/bin/sh
     718
     719IFNAME="eth0:0"
     720IFADDR="192.168.0.63"
     721PASSWORD="secret"
     722
     723echo "Content-Type: text/html; charset=utf-8"
     724echo "Cache-Control: no-cache"
     725echo "Refresh: 5; url=/cgi-bin/status.sh"
     726echo
     727echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
     728echo "<html>"
     729echo "  <head>"
     730echo '    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />'
     731echo "    <title>${HEADER}</title>"
     732echo "  </head>"
     733echo "  <body>"
     734
     735case ${QUERY_STRING} in
     736    action=on)
     737        echo "    <h1>Активируем сервер...</h1>"
     738        sudo /sbin/ifconfig ${IFNAME} ${IFADDR}
     739        sudo /usr/sbin/arping -c3 -W0.2 -PUq -S ${IFADDR} ${IFADDR}
     740        /usr/bin/fs_cli -p${PASSWORD} -x "sofia recover"
     741        ;;
     742
     743    action=off)
     744        echo "    <h1>Деактивируем сервер...</h1>"
     745        sudo /sbin/ifconfig ${IFNAME} down
     746        ;;
     747
     748    *)
     749        ;;
     750esac
     751
     752echo "  </body>"
     753echo "</html>"
     754}}}
     755
     756аналогично, переменным {{{IFNAME}}} и {{{IFADDR}}} в начале скрипта присваиваем имя сетевого интерфейса и общий адрес, переменной {{{PASSWORD}}} присваиваем пароль доступа к event-socket сервера !FreeSwitch. Так как скрипт содержит пароль, не забудем ограничить права доступа:
     757
     758{{{
     759$ sudo chown www-data:www-data /var/www/html/cgi-bin/onoff.sh
     760$ sudo chmod 700 /var/www/html/cgi-bin/onoff.sh
     761}}}
     762
     763Теперь разрешим выполнение команд {{{ifconfig}}} и {{{arping}}} для пользователя www-data, от которого работает процесс lighttpd. Для этого добавляем в файл {{{/etc/sudoers}}} такие строчки:
     764
     765{{{
     766www-data ALL=(ALL) NOPASSWD:/sbin/ifconfig eth0\:0 *
     767www-data ALL=(ALL) NOPASSWD:/usr/sbin/arping -c3 -W0.2 -PUq -S * *
     768}}}
     769
     770Разрешим выполнение cgi-скриптов серверами lighttpd:
     771
     772{{{
     773$ sudo ln -s ../conf-available/10-cgi.conf /etc/lighttpd/conf-enabled/
     774}}}
     775
     776Теперь создадим HTML-страницу {{{/var/www/html/index.html}}}, на которой будет отображаться два фрейма с состоянием наших серверов:
     777
     778{{{#!xml
     779<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     780<html xmlns="http://www.w3.org/1999/xhtml">
     781    <head>
     782        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
     783        <title>Управление серверами</title>
     784    </head>
     785    <body>
     786        <iframe src="http://192.168.0.61/cgi-bin/status.sh" style="width: 49%; height: 300px;"></iframe>
     787        <iframe src="http://192.168.0.62/cgi-bin/status.sh" style="width: 49%; height: 300px;"></iframe>
     788    </body>
     789</html>
     790}}}
     791
     792где вместо {{{192.168.0.61}}} и {{{192.168.0.62}}} впишем адреса серверов.
     793
     794Выполним рестарт lighttpd:
     795
     796{{{
     797$ sudo service lighttpd restart
     798}}}
     799
     800Проверим, что получилось, открыв браузером корневую страницу любого из серверов. Мы увидим что-то типа:
     801
     802[[Image(pic1.jpg)]]
     803
     804Проверим работу cgi-скриптов, нажимая кнопку "Деактивировать"/"Активировать". Нажатие должно приводить к появлению/пропаданию алиаса с общим адресом. Кроме этого, активация должна сопровождаться передачей трех ARP-пакетов для обновления ARP-таблиц сетевых устройств.