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

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

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

 

 

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

Допустим, что адрес 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.