Changes between Version 14 and Version 15 of SoftswitchFailOver
- Timestamp:
- Mar 13, 2017, 3:50:21 PM (8 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
SoftswitchFailOver
v14 v15 473 473 === Автоматическое переключение === 474 474 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) общего адреса. 476 476 477 477 Устанавливаем пакет keepalived: … … 522 522 } 523 523 } 524 }}} 525 526 где "eth0" - имя сетевого интерфейса, "eth0:0" - алиас с общим адресом - меняем их в соответствии с именем интерфейса каждого сервера. 524 525 vrrp_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. 527 542 528 543 Запускаем keepalived на одном из серверов: … … 532 547 }}} 533 548 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. 537 552 538 553 Контролируем переход сервера из состояния BACKUP в состояние MASTER. Для этого на несколько секунд отключаем активный в данный момент MASTER от сети (или просто останавливаем на нем демон keepalived). Контролируцем, что сервер, находившийся в состоянии BACKUP, перешел в состояние MASTER. 539 554 540 Теперь необходимо изменить настройки odbc таким образом, чтобы оба сервера !FreeSwitch подключались к базе данных используя общий адрес и, таким образом, подключались к одному и тому же серверу mysql. Для этого в ранее созданном файле /etc/odbc.ini указываем адрес сервера {{{192.168.0.63}}}.555 Теперь необходимо изменить настройки odbc таким образом, чтобы оба сервера !FreeSwitch подключались к базе данных, используя общий адрес и, таким образом, подключались к одному и тому же серверу mysql. Для этого в ранее созданном файле /etc/odbc.ini указываем адрес сервера {{{192.168.0.66}}}. 541 556 542 557 Устанавливаем параметр sysctl net.ipv4.ip_nonlocal_bind в значение 1 чтобы дать возможность неактивному серверу !FreeSwitch слушать адрес, отсутствующий на его интерфейсах: … … 560 575 }}} 561 576 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: 569 578 570 579 {{{#!sh … … 574 583 profiles="internal internal6"; 575 584 576 # Если общий адрес еще не поднят, возвращаем успех.577 arping -q -c3 -W0.1 192.168.0.63 || exit 0578 579 # Если общий адрес поднят, проверяем работоспособность FreeSwitch580 585 RESULT=`/usr/bin/fs_cli -p$password -x "sofia xmlstatus"` 581 586 582 587 for P in $profiles; do 583 echo $RESULT | grep -q "<name>$ P</name>" || exit 1588 echo $RESULT | grep -q "<name>${P}</name>" || exit 1 584 589 done 585 590 … … 587 592 }}} 588 593 589 где "secert" заменяем на пароль доступа к event-socket !FreeSwitch-сервера, а переменной {{{profiles}}} присваиваем имена SIP-профилей, наличие которых необходимо контролировать. Теперь, если все перечисленные в {{{profiles}}} профили запущены, скрипт вернет 0, иначе - 1.594 где "secert" заменяем на пароль доступа к event-socket !FreeSwitch-сервера, а переменной {{{profiles}}} присваиваем имена SIP-профилей, наличие которых необходимо контролировать. Не забываем установить скрипту права доступа, чтобы ничто не мог украсть пароль. Теперь, если все перечисленные в {{{profiles}}} профили запущены, скрипт вернет 0, иначе - 1. 590 595 591 596 Если требуется контролировать только один профиль, скрипт можно сделать более лаконичным: … … 597 602 profile="internal"; 598 603 599 # Если общий адрес еще не поднят, возвращаем успех.600 arping -q -c3 -W0.1 192.168.0.63 || exit 0601 602 # Если общий адрес поднят, проверяем работоспособность FreeSwitch603 604 /usr/bin/fs_cli -p$password -x "sofia xmlstatus" | grep -q "<name>${profile}</name>" || exit 1 604 605 605 exit 0; 606 606 }}} 607 607 608 arping в начале скрипта нужен для разрешения проблемы яйца и курицы: keepalived не перейдет в состояние MASTER и не поднимет на сетевом интерфейсе общий адрес, пока наш скрипт не вернет 0, в то же время профиль !FreeSwitch не сможет стартовать, пока в сети не поднят общий адрес, так как именно этот адрес используется для подключения к базе данных. Благодаря строчке с arping при включении первого из двух серверов, когда общего адреса еще нет, скрипт вернет 0, keepalived успешно перейдет в состояние MASTER и активирует общий адрес.609 610 608 Проверим функционирование скрипта, запустив его вручную. Если все хорошо, укажем keepalived проверять работоспособность !FreeSwitch каждые 10 секунд. Для этого в /etc/keepalived/keepalived.conf добавляем секцию с описанием скрипта: 611 609 612 610 {{{ 613 611 vrrp_script chk_fs { 614 script "/etc/keepalived/ ka-status.sh"612 script "/etc/keepalived/fs-status.sh" 615 613 interval 10 616 614 } … … 637 635 }}} 638 636 639 Ждем 10 секунд и контролируем, что keepalivedперешел в состояние FAULT.637 Ждем 10 секунд и контролируем, что экземпляр VI_FREESW перешел в состояние FAULT. 640 638 641 639 === Ручное переключение ===