ucarp при балансировке и отказоустойчивый IP адрес


ucarp — пакет, доступный в репозиториях Ubuntu, позволяющий обеспечивать гарантированную доступность IP адреса.



Отказоустойчивый IP адрес может быть нужен при использовании некоторых решений для балансировки нагрузки. Рассмотрим как выглядит система на примере кластера MySQL к которому обращается по адресу 192.168.3.10 веб-сервер. Хотя почти всегда лучше настраивать работу через localhost,  такая конфигурация тоже встречается.


Допустим, что адрес 192.168.3.10 из приватного диапазона прописан в коде приложения и изменять его по какой-то причине нежелательно. При этом нужна кластеризация MySQL — решением может быть настройка отказоустойчивого IP адреса и использованием системной службы работающей по протоколу CARP (Common Address Redundancy Protocol).



Схема работы будет выглядеть следующим образом:

ucarp


Один из серверов является мастером, два других не используются. Все машины при этом объединены в локальную сеть и имеют серые IP адреса. Каким-то образом обеспечивается консистентность данных в MySQL (одно из возможных решений — Galera Cluster, при этом не нужен никакой фронтэнд. распределяющий запросы).



Если становится недоступен мастер-хост его роль принимает другая машина.

ucarp linux


Меняется аппаратный адрес второго уровня OSI — на третьем все выглядит точно также. Приложение и веб-сервер обращаются к 192.168.3.10 и получают ожидаемый ответ.



Если падает второй сервер роль вновь переходит к другой машине, которая становится MASTER хостом, меняется также только MAC.

отказоустойчивый IP адрес для сервера


Установка и настройка ucarp


Устанавливается пакет из стандартного репозитория, он нужен на каждом сервере, который участвует в процессе

apt-get install ucarp

Настройка не представляет никакой сложности, всю информацию можно найти в  README пакета



less /usr/share/doc/ucarp/README

/etc/network/interfaces для каждого хоста нужно скорректировать по образцу (со стороны сетевых настроек для VDS нужен brige):

auto eth1
iface eth1 inet static
address 192.168.3.1
netmask 255.255.255.0
# ID of this machine in cluster
ucarp-vid 3
# Shared between hosts IP
ucarp-vip 192.168.3.10
# Password shared between CARP hosts
ucarp-password jYhems8i3jd7

#Can be increased to lessen the apportunity to become Master for certain host
ucarp-advskew 1

#Frequency of sending notificatio to other hosts
ucarp-advbase 1

#Status on start
ucarp-master no
iface eth0:ucarp inet static
address 192.168.3.1
netmask 255.255.255.0



Потом опускается и вновь поднимается интерфейс eth0 — также можно перезагрузить сервер

ifdown eth1 && ifup eth1

Просмотрев syslog можно увидеть, что служба запущена.

tail -500 /var/log/syslog | grep ucarp


В выводе grep будет статус BACKUP для двух машин и статус MASTER для одной.



На этом настройка завершена. Теперь в случае недоступности MASTER хоста его место займет один из BACKUP хостов. При этом сохраняется IP адрес (меняется только MAC). Веб-сервер, для которого весь кластер невидим, и который обращается к одному IP адресу, и приложение не заметят того, что конфигурация изменилась.



В кластер с отказоустойчивым IP адресом можно включить от двух машин, количество их не ограничено и определяется архитектурой проекта. Работать таким образом можно не только с MySQL, но и с бэкенд/фронтэнд серверами.

Часто так кластеризуется HAPROXY и Nginx.

Сказать спасибо