Нуждаетесь в помощи?
19 Дек 2016
Перед нами стоит задача: построить отказоустойчивый web-сервис с минимальными затратами.
Для решения поставленной задачи предлагается достаточно много вариантов реализации. У каждой из реализаций присутствует ряд проблем или скрытых моментов, о которых авторы не упоминали.
В итоге решение было найдено достаточно простое и красивое. Не берем в расчет руководства, основывающиеся на ручном переключении сетевых кабелей и подобные им.
Для построения полноценного отказоустойчивого решения мы использовали два виртуальных сервера с ОС Ubuntu 16.04 server и параметрами: 1CPU, 512 ОЗУ,10Гб HDD.
Параметры сети для каждого из серверов test1:10.254.2.21, test2:10.254.2.22, где ip адрес 10.254.2.23 будет перемещаться с одного сервера на другой, на случай, если один из серверов какое-то время будет недоступен.
Для решения данной задачи был выбран протокол отказоустойчивой маршрутизации Ucarp. Ucarp может использоваться для организации кластеров маршрутизации в различных Unix-системах, в том числе в Linux.
Инструкция по построению отказоустойчивой системы
В результате мы получили два сервера с отказоустойчивым ip-адресом. При выходе из строя любого из серверов downtime переключения ip будет равен 0. Решение данной задачи, как показала практика, не трудоемкое и требует минимальных облачных ресурсов.
Следите за дальнейшими публикациями в нашем Блоге.
comments powered by Disqus
Построение отказоустойчивого web-сервиса. Пошаговое руководство
19.12.2016

Перед нами стоит задача: построить отказоустойчивый web-сервис с минимальными затратами.
Для решения поставленной задачи предлагается достаточно много вариантов реализации. У каждой из реализаций присутствует ряд проблем или скрытых моментов, о которых авторы не упоминали.
В итоге решение было найдено достаточно простое и красивое. Не берем в расчет руководства, основывающиеся на ручном переключении сетевых кабелей и подобные им.
Для построения полноценного отказоустойчивого решения мы использовали два виртуальных сервера с ОС Ubuntu 16.04 server и параметрами: 1CPU, 512 ОЗУ,10Гб HDD.
Параметры сети для каждого из серверов test1:10.254.2.21, test2:10.254.2.22, где ip адрес 10.254.2.23 будет перемещаться с одного сервера на другой, на случай, если один из серверов какое-то время будет недоступен.
Для решения данной задачи был выбран протокол отказоустойчивой маршрутизации Ucarp. Ucarp может использоваться для организации кластеров маршрутизации в различных Unix-системах, в том числе в Linux.
Инструкция по построению отказоустойчивой системы
- Устанавливаем ucarp на обоих серверах.
apt-get install ucarp - Редактируем файл /etc/network/interfaces.
- Для второго сервера действуем по аналогии:
- Правка файлов vip-up, vip-down (для первого сервера).
Во время установки у нас появляются 2-а файла: vip-up, vip-down в директории /usr/share/ucarp/, на базе которых будем выполнять дальнейшую настройку. На обоих серверах файлы /usr/share/ucarp/vip-up и /usr/share/ucarp/vip-down делаем исполняемыми:
mv /usr/share/ucarp/vip-up /usr/share/ucarp/vip-up.sh
mv /usr/share/ucarp/vip-down /usr/share/ucarp/vip-down.sh
chmod +x /usr/share/ucarp/vip-up.sh
chmod +x /usr/share/ucarp/vip-down.sh
vip-up.sh – отвечает за поднятие интерфейса.
vip-down.sh – отвечает за выключение интерфейса.
- Для второго сервера – все аналогично.
ucarp -i eth0 -s 10.254.2.22 -v 10 -p secret -a 10.254.2.23 --upscript=/usr/share/ucarp/vip-up.sh --downscript=/usr/share/ucarp/vip-down.sh -B
Осуществляем перезагрузку.
В консоли видим следующий результат:


Добавляем строчки:
iface eth0:ucarp:0 inet static
address 10.254.2.23
netmask 255.255.255.0.

Тем самым мы указали, что будет еще дополнительный (виртуальный) интерфейс с плавающим ip адресом 10.254.2.23. Сохраняем.


Редактируем строку /sbin/ifup $1:ucarp , приводим к виду $1:ucarp:0 . Это необходимо для того, чтобы указать, что первый виртуальный интерфейс будет нулевым (это как?). В более общем случае можно создать более, чем 2 виртуальных интерфейса.


Редактируем строку /sbin/ifdown $1:ucarp , приводим к виду $1:ucarp:0:

Чтобы скрипт запускался при загрузке, необходимо прописать его в файле /etc/rc.local до строчки exit 0. Если данный файл отсутствует, создайте его и вставьте в него следующее содержимое:

Добавляем строчку ucarp -i eth0 -s 10.254.2.21 -v 10 -p secret -a 10.254.2.23 --upscript=/usr/share/ucarp/vip-up.sh --downscript=/usr/share/ucarp/vip-down.sh -P -B.
Разберем подробно добавляемую строку:
ucarp – команда для обращения к протоколу.
-i – интерфейс (к какому интерфейсу идет привязка).
eth0 – наш сетевой интерфейс.
-s – реальный ip адрес на сетевом интерфейсе eth0.
10.254.2.21 – ip адрес на сетевом интерфейсе eth0.
-v – виртуальный ip идентификатор, который может быть в диапазоне от 1 до 255, в нашем случае мы выбрали 10.
-p – пароль который используется для авторизации, в нашем случае это «secret».
-a – виртуальный шаред ip адрес (плавающий ip), в нашем случае это 10.254.2.23.
--upscript=/usr/share/ucarp/vip-up.sh – указатель для скрипта, который будет поднимать шаред ip адрес и путь к скрипту.
--downscript=/usr/share/ucarp/vip-down.sh – указатель для скрипта, который будет выключать шаред ip адрес и путь к скрипту.
-P – означает первичный(master), без указания по умолчанию вторичный(slave)
-B – запускать как демон.
Выводы
В результате мы получили два сервера с отказоустойчивым ip-адресом. При выходе из строя любого из серверов downtime переключения ip будет равен 0. Решение данной задачи, как показала практика, не трудоемкое и требует минимальных облачных ресурсов.
Следите за дальнейшими публикациями в нашем Блоге.
Связаться с консультантом