База знаний по Open Source
Авторизация
Поиск по базе знаний

uCarp, на мой взгляд, лучшее решение для создания простейших отказоустойчивых кластеров на Ubuntu, проверенное уже много раз во многих организациях при промышленной эксплуатации систем. Отлично подходит для серверов приложений и других задач, где нет совсем или минимальны изменения данных на серверах.

Идея проста – при выходе из строя одного сервера (сервера целиком, а не каких-то определенных сервисов на нем!), все обращения автоматически перенаправляются к другому.

Для этого создается виртуальный кластер с определенным IP адресом – ucarp-vip, состоящий из двух или более одинаковых (в смысле софта) серверов, физических или виртуальных, каждый из которых имеет свой собственный IP. Клиентские машины обращаются за сервисом по IP-адресу кластера (ucarp-vip), по которому откликается один из серверов. При выходе из строя этого сервера (завис, вырубилось питание, оборвалась связь – короче становится невидимым в сети) IP адресом кластера завладевает другой сервер. Никаких других функций в Ubuntu (типа балансировки нагрузки, репликации и т.п.) uCarp не выполняет. Для репликации совместно с ucarp спользуются другие пакеты – я, например, использую Glasterfs или Unison в зависимости от конкретных задач.

Для примера, пусть будет кластер с IP-адресом 192.168.5.10, состоящий из двух серверов:

node1 - 192.168.5.20
node2 - 192.168.5.21

Устанавливается ucarp из стандартного репозитория Ubuntu на всех серверах кластера:

sudo apt-get install ucarp

Настройки на каждом сервере осуществляются непосредственно в файле /etc/network/interfaces. Для node1 в нем прописываем:

auto eth0
iface eth0 inet static
address 192.168.5.20
netmask 255.255.255.0
gateway 192.168.2.1
#ID виртуального кластера
ucarp-vid 1
#IP-адрес вируального кластера
ucarp-vip 192.168.5.10
#Пароль для шифрования трафика. Один для всех серверов кластера!!!
ucarp-password ubuntu
#Вес сервера в кластере
ucarp-advskew 1
#Интервал апдейта в секундах
ucarp-advbase 1
#Роль сервера. Роль мастера устанавливаем у одного, у остальных - no
ucarp-master yes
iface eth0:ucarp inet static
address 192.168.5.10
netmask 255.255.255.0

Для node2:

auto eth0
iface eth0 inet static
address 192.168.5.21
netmask 255.255.255.0
gateway 192.168.2.1
#ID виртуального кластера
ucarp-vid 1
#IP-адрес вируального кластера
ucarp-vip 192.168.5.10
#Пароль для шифрования трафика. Один для всех серверов кластера!!!
ucarp-password ubuntu
#Вес сервера в кластере
ucarp-advskew 10
#Интервал апдейта в секундах
ucarp-advbase 1
#Роль сервера. Роль мастера устанавливаем у одного, у остальных - no
ucarp-master no
iface eth0:ucarp inet static
address 192.168.5.10
netmask 255.255.255.0

Далее нужно перегрузить сервера и кластер по адресу 192.168.2.10 заработает. Можно выключить любой из серверов кластера, но адрес кластера и сервисы всегда будут доступны. Серверов в кластере может быть несколько, тогда при выходе из строя мастера, происходят выборы “боевого сервера” по критериям:

  • Мастер – высший приоритет
  • advbase + advskew/255 – чем меньше, тем приоритет выше
  • IP – чем меньше, тем приоритет выше

В одной сети может быть несколько кластеров, нужно только следить, чтобы ID виртуальных кластеров (ucarp-vid) различались.

Добавить комментарий

Еще по теме Отказоустойчивые кластеры