UCARP — реализация протокола отказоустойчивой маршрутизации CARP в пространстве пользователя (user-space)
CARP (Common Address Redundancy Protocol) позволяет сделать так, чтобы у нескольких хостов в одной сети (широковещательном домене) был общий IP-адрес. Эта группа хостов называется группой избыточности (redundancy group). Группе назначается один IP-адрес, которые используется совместно (но не одновременно!) всеми членами этой группы. Внутри группы есть один основной хост (master) и остальные -запасные (backups). IP-адрес в один момент времени есть только у основного хоста (master host), он отвечает на все ARP-запросы по этому адресу. Каждый хост в одно и то же время может входить в несколько различных групп.
Протокол CARP был разработан и предложен командой OpenBSD как свободная замена протокола VRRP, имеющего некоторые сложности с патентами, поскольку он основывается на проприетарном и запатентованном протоколе HSRP.
Выбор ucarp-мастера среди нескольких кандидатов происходит следующим образом:
1.Проверяется директива ucarp-master, если установлена в yes — больший приоритет;
2.Рассчитывается формула advbase + advskew/255, меньшее значение — больший приоритет;
3.Сравниваются ip-адреса хостов, меньший ip-адрес — больший приоритет.
В одной сети может быть несколько кластеров, нужно только следить, чтобы ID виртуальных кластеров (ucarp-vid) различались.
Используем два сервера:
Debian8 -192.168.1.85 (master)
Ubuntu14-192.168.1.84 (backup)
Отказоустойчивый IP-адрес(VIP), который будет балансировать между двумя серверами — 192.168.1.125
1.Настройка Ucarp на первом сервере(Debian8)
Проверка текущих сетевых настроек
1 |
# cat /etc/network/interfaces |
1 2 3 4 5 6 7 8 9 10 11 12 |
auto lo iface lo inet loopback # The primary network interface #allow-hotplug eth0 #iface eth0 inet dhcp allow-hotplug eth0 iface eth0 inet static address 192.168.1.85 netmask 255.255.255.0 gateway 192.168.1.1 |
2.Установка Ucarp
1 |
# apt-get install ucarp |
3.Настройка Ucarp
В файл с настройками сети добавляем
1 |
# nano /etc/network/interfaces |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# номер группы (число от 1 до 255) одинаковый для всех серверов; ucarp-vid 1 # отказоустойчивый IP-адрес(VIP) ucarp-vip 192.168.1.125 # пароль/ключ для шифрования сетевого протокола, одинаковый для серверов в пределах группы; ucarp-password fahDo7zaze # управление приоритетом выбора мастера из нескольких кандидатов группы (Чем больше число, тем меньше вероятность, что хост станет Мастером) ucarp-advskew 1 # интервал оповещения хостов в группе о своем статусе; ucarp-advbase 1 # Роль в группе при запуске. используется для повышения приоритета при выборе мастера. ucarp-master yes # Виртуальный интерфейс iface eth0:ucarp inet static address 192.168.1.125 netmask 255.255.255.0 |
Перезапускаем сетевые настройки и проверяем наличие отказоустойчивого IP-адреса
1 |
# /etc/init.d/networking restart |
1 |
[ ok ] Restarting networking (via systemctl): networking.service. |
1 |
root@debian81:~# ps ax | grep [u]carp |
1 |
3357 ? Ss 0:00 /usr/sbin/ucarp -i eth0 -s 192.168.1.85 -B -z -v 1 -p fahDo7zaze -a 192.168.1.125 -u /usr/share/ucarp/vip-up -d /usr/share/ucarp/vip-down -P -k 1 -b 1 |
Описания параметров, доступных из ucarp —help
1 |
-i |
– интерфейс, на котором слушать запросы
1 |
-s |
– реальный IP-адрес хоста
1 |
-B |
– запускаться как служба/демон в фоновом режиме
1 |
-z |
– вызывать скрипт выключения при выходе
1 |
-v |
— номер группы – параметр ucarp-vid
1 |
-p |
– пароль — параметр ucarp-password
1 |
-a |
– VIP-адрес (отказоустойчивый адрес) – параметр ucarp-vip
1 |
-u |
– запускать скрипт при получении роли master
1 |
-d |
– запускать скрипт при получении роли backup
1 |
-P |
– вынуждает Backup-сервер с более высоким приоритетом пытаться перехватить на себя роль Master у текущего Master-сервера с более низким приоритетом.
1 |
-k |
— управление приоритетом выбора мастера из нескольких кандидатов группы – параметр ucarp-advskew
1 |
-b |
— интервал оповещения хостов в группе о своем статусе –параметр ucarp-advbase
1 |
# ifconfig |
1 2 3 4 5 6 7 8 9 10 11 |
eth0 Link encap:Ethernet HWaddr 00:0c:29:0d:01:00 inet addr:192.168.1.85 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:5150 errors:0 dropped:0 overruns:0 frame:0 TX packets:3045 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:4969007 (4.7 MiB) TX bytes:2791542 (2.6 MiB) eth0:ucarp Link encap:Ethernet HWaddr 00:0c:29:0d:01:00 inet addr:192.168.1.125 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 |
В логах
1 |
# grep -i ucarp /var/log/syslog |
1 2 3 |
Aug 22 23:17:59 debian81 ucarp[2954]: [INFO] Local advertised ethernet address is [00:0c:29:0d:01:00] Aug 22 23:17:59 debian81 ucarp[3357]: [WARNING] Switching to state: MASTER Aug 22 23:17:59 debian81 ucarp[3357]: [WARNING] Spawning [/usr/share/ucarp/vip-up eth0 192.168.1.125] |
C рабочей станции проверяем доступность отказоустойчивого IP-адреса и mac-адреса,который ему соответствует. Mac-адрес VIP-адреса должен соответствовать mac-адресу интерфейса eth0 на сервере 192.168.1.85
4.Настройка Ucarp на втором сервере (Ubuntu14)
Просмотр текущих сетевых настроек
1 |
# cat /etc/network/interfaces |
1 2 3 4 5 6 7 8 9 10 11 12 |
auto lo iface lo inet loopback # The primary network interface #auto eth0 #iface eth0 inet dhcp auto eth0 iface eth0 inet static address 192.168.1.84 netmask 255.255.255.0 gateway 192.168.1.1 |
5.Установка Ucarp
1 |
# apt-get install ucarp |
6.Настройка Ucarp
В файл с настройками сети добавляем
1 |
# nano /etc/network/interfaces |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# номер группы (число от 1 до 255) одинаковый для всех серверов; ucarp-vid 1 # отказоустойчивый IP-адрес ucarp-vip 192.168.1.125 # пароль/ключ для шифрования сетевого протокола, одинаковый для серверов в пределах группы; ucarp-password fahDo7zaze # управление приоритетом выбора мастера из нескольких кандидатов группы (Чем больше число, тем меньше вероятность, что хост станет Мастером) ucarp-advskew 1 # интервал оповещения хостов в группе о своем статусе; ucarp-advbase 1 # Роль в группе при запуске. используется для повышения приоритета при выборе мастера. ucarp-master no # Виртуальный интерфейс iface eth0:ucarp inet static address 192.168.1.125 netmask 255.255.255.0 |
Как видно из файла,отличие только в одной строке
ucarp-master no
т.к роль этому серверу будет присвоена как backup
Перезапускаем сетевые настройки и проверяем ОТСУТСТВИЕ отказоустойчивого IP-адреса на интерфейсе, но ЗАПУЩЕННЫЙ ucapr-процесс
1 |
# /etc/init.d/networking restart |
1 |
root@ubuntu141:~# ps ax | grep [u]carp |
1 |
25894 ? Ss 0:00 /usr/sbin/ucarp -i eth0 -s 192.168.1.84 -B -z -v 1 -p fahDo7zaze -a 192.168.1.125 -u /usr/share/ucarp/vip-up -d /usr/share/ucarp/vip-down -k 1 -b 1 |
1 |
root@ubuntu141:~# ifconfig |
1 2 3 4 5 6 7 |
eth0 Link encap:Ethernet HWaddr 00:0c:29:5a:c2:60 inet addr:192.168.1.84 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:12379 errors:0 dropped:0 overruns:0 frame:0 TX packets:6931 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:14860558 (14.8 MB) TX bytes:3390394 (3.3 MB) |
В логах
1 |
# grep -i ucarp /var/log/syslog |
1 2 3 |
Aug 22 23:36:50 ubuntu141 ucarp[25894]: [INFO] Local advertised ethernet address is [00:0c:29:5a:c2:60] Aug 22 23:36:50 ubuntu141 ucarp[25894]: [WARNING] Switching to state: BACKUP Aug 22 23:36:50 ubuntu141 ucarp[25894]: [WARNING] Spawning [/usr/share/ucarp/vip-down eth0 192.168.1.125] |
Тестируем балансировку отказоусточивого IP-адреса
Например, при наличии доступа к консоли сервера, отключим сеть на master-сервере
1 |
root@debian81:~# /etc/init.d/networking stop |
1 |
Stopping networking (via systemctl): networking.service |
В логах backup-сервера указывается,что он взял нас себя роль master-сервера
1 |
# grep -i ucarp /var/log/syslog |
1 2 |
Aug 22 23:47:42 ubuntu141 ucarp[25894]: [WARNING] Switching to state: MASTER Aug 22 23:47:42 ubuntu141 ucarp[25894]: [WARNING] Spawning [/usr/share/ucarp/vip-up eth0 192.168.1.125] |
Проверяем наличие VIP-адреса на втором сервере
1 |
root@ubuntu141:~# ifconfig |
1 2 3 4 5 6 7 8 9 10 11 |
eth0 Link encap:Ethernet HWaddr 00:0c:29:5a:c2:60 inet addr:192.168.1.84 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:13464 errors:0 dropped:0 overruns:0 frame:0 TX packets:7519 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:14948493 (14.9 MB) TX bytes:3457910 (3.4 MB) eth0:ucarp Link encap:Ethernet HWaddr 00:0c:29:5a:c2:60 inet addr:192.168.1.125 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 |
С рабочей станции проверяем доступность VIP-адреса и mac-адрес,который за ним закреплен
Mac-адрес VIP-адреса должен соответствовать mac-адресу интерфейса eth0 на сервере 192.168.1.84
При просмотре пакетов c помощью tcpdump на обоих серверах увидим
1 2 3 |
IP 192.168.1.84 > 224.0.0.18: VRRPv2, Advertisement, vrid 1, prio 1, authtype none, intvl 1s, length 36 IP 192.168.1.84 > 224.0.0.18: VRRPv2, Advertisement, vrid 1, prio 1, authtype none, intvl 1s, length 36 IP 192.168.1.84 > 224.0.0.18: VRRPv2, Advertisement, vrid 1, prio 1, authtype none, intvl 1s, length 36 |
Текущий на данный момент master-сервер(192.168.1.84) ежесекундно(intvl 1s) отправляет сообщения/объявления по протоколу VRRPv2(Virtual Router Redundancy Protocol) о своем состоянии и приоритете(prio1) с ассоциированным номером группы(vrid1) на зарезервированный групповой адрес 224.0.0.18, оповещая таким образом все backup-сервера о своем состоянии.
Источник:
https://ru.wikipedia.org/wiki/CARP
https://letsclearitup.com.ua/ubuntu/otkazoustoychivyiy-ip-adres-s-ispolzovaniem-ucarp.html
https://rbgeek.wordpress.com/2012/09/02/simple-failover-cluster-using-ucarp-on-ubuntu/
http://sysadm.pp.ua/linux/carp-ubuntu.html
http://www.oslogic.ru/knowledge/515/ucarp-prostejshij-otkazoustojchivyj-klaster/