...
...
...

введение в Common Address Redundancy Protocol

Основной целью Common Address Redundancy Protocol (CARP ) является использование одного IP-адреса в пределах одного сегмента сети несколькими машинами. CARP является свободной, безопасной альтернативой протоколам Virtual Router Redundancy Protocol и Hot Standby Router Protocol. CARP позволяет выделить группу хостов в сегменте сети и назначить ей один IP-адрес. Такая группа называется "redundancy group" (группа избыточности). В пределах этой группы один из хостов становится "главным", а остальные обозначаются как "резервные". В каждый момент времени мастер-хост отвечает на ARP-запросы к назначенному IP-адресу и обрабатывает трафик, идущий к этому адресу. Каждый хост одновременно может принадлежать к нескольким группам.

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

При использовании CARP снижаются требования к аппаратному обеспечению отказоустойчивых систем. Дорогое оборудование окажется бессильным к выдернутому шнуру питания или перед администратором, случайно отправившим сервер в перезагрузку. CARP также облегчает процесс обновления программного обеспечения, так цикл обновления и перезагрузки прозрачен для пользователей. Становится проще и процесс тестирования программного или аппаратного обеспечения - вы всегда можете положиться на резерв, пока не устраните проблему.

Однако есть ситуации, когда CARP не может помочь. Дизайн CARP требует, чтобы члены одной группы физически находились в одной подсети с одним статическим IP-адресом, хотя с введением директивы carpdev необходимости назначать адрес на физический интерфейс нет. Сервисы, требующие постоянного соединения с сервером (такие, как SSH и IRC) не могут быть прозрачно переброшены в случае отказа и потребуют переподключения. CARP не может синхронизировать данные между приложениями.

CARP поддерживает IPv4 и IPv6.

принцип работы CARP

Мастер-хост группы регулярно рассылает объявления по сети, с целью оповестить остальные машины группы, что он все еще работоспособен. В случае, если резервной машиной объявление не будет получено в течение заданного интервала, то она перехватывает функции мастер-хоста.

Объявления CARP содержат Virtual Host ID, который позволяет членам группы идентифицировать, предназначено ли объявление для данной группы. Для предотвращения спуфинга объявлений CARP, каждая группа может быть сконфигурирована на использование пароля. В этом случае, каждый CARP пакет в группе шифруется по алгоритму SHA1 HMAC.

конфигурирование CARP

Потренируемся настраивать CARP на примере NetBSD.

Итак, каждая отказоустойчивая группа представлена виртуальным сетевым интерфейсом carp. Как следствие, CARP конфигурируется с помощью ifconfig. Доступны следущие опции:

- carpN - имя виртуального интерфейса carp(4), где N - целое число, обозначающее номер интерфейса (например carp0);

- vhid - Virtual Host ID. Уникальное число, которое используется для обозначения группы избыточности. Возможные значения лежат в диапазоне от 1 до 255. Это позволяет иметь несколько групп в пределах одной сети;

- password - пароль, используемый для обмена сообщениями CARP. Должен быть одинаковым в пределах группы;

- carpdev - опциональный параметр, указывающий на физический сетевой интерфейс, принадлежащий группе избыточности. По умолчанию, CARP будет пытаться использовать тот интерфейс, к которому присвоен адрес из той же подсети, что и на интерфейсе carp;

- advbase - этот опциональный параметр определяет, как часто происходят объявления о членстве в группе избыточности. Значение по умолчанию - 1 секунда. Возможные значения лежат в диапазоне от 1 до 255;

- advskew - этот опциональный параметр указывает, насколько будет задержано обьявление advbase. Управляя параметром advbase, можно
контролировать, какой хост станет мастером. Чем выше это число, тем меньше статус этого хоста. Значение по умолчанию - 0. Возможные значения лежат в диапазоне от 1 до 254;

- state - перевести интерфейс carp в определенное состояние. Может принимать значения init, backup и master;

- ipaddress - адрес, назначенный группе избыточности. Данный адрес должен быть в одной сети с адресом на физическом интерфейсе (если он назначен);

- mask - маска подсети группы.

Поведением CARP можно управлять с помощью sysctl.

- net.inet.carp.allow - принимать входящие пакеты CARP. Установлено по умолчанию;

- net.inet.carp.preempt - позволяет виртуальным хостам резервировать друг друга. Эта функция используется для обеспечения отказоустойчивости в группе. Когда эта опция установлена и один из физических интерфейсов, на котором выполняется CARP, теряет связь, advskew устанавливает значение 240 на всех carp интерфейсах. Хост, у которого advskew меньше назначается главным в группе и на него направляются пакеты до отказа интерфейса. По умолчанию выключено;

- net.inet.carp.log - значение 0 отключает ведение журнального файла. Значение 1 фиксирует некорректные пакеты CARP и состояние интерфейса. По умолчанию 0;

- net.inet.carp.arpbalance - балансировка локального трафика с использованием ARP. по умолчанию выключено.

включение поддержки CARP

По умолчанию поддержка CARP не включена. Для использования carp необходимо в ядре включить опцию carp. Убедитесь, что в файле конфигурации ядра присутствует следущая строка:

pseudo-device carp # CARP

После того, как строка была добавлена, пересоберите и установите ядро. После перезагрузки в системе будет поддержка carp.

пример конфигурации CARP

# sysctl -w net.inet.carp.allow=1
# ifconfig carp0 create
# ifconfig carp0 vhid 1 pass lanpasswd carpdev em0 advskew 100 10.0.0.1 255.255.255.0


Где мы выполнили следующее:

- включили поддержку CARP (что, впрочем, и так есть по умолчанию);

- создали интерфейс carp;

- сконфигурировали carp0 на virtual host #1, установили пароль (lanpasswd), физическим интерфейсом назначили em0 и сделали этот хост резервным, установив advskew в 100 (при условии, что у мастера это значение меньше). Общим адресом для группы назначен 10.0.0.1/255.255.255.0. Воспользуемся командой ifconfig чтобы проверить состояние интерфейса:


# ifconfig carp0
carp0: flags=8802 mtu 1500
carp: BACKUP carpdev em0 vhid 1 advbase 1 advskew 100
inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255


расширенная конфигурация CARP

В следующем примере мы создадим кластер из двух отказоустойчивых, высоконадежных файрволлов. Схема соединения представлена на рис. 1.

+----| WAN/Internet |----+
| |
em1| |em1
+-----+ +-----+
| fw1 | | fw2 |
+-----+ +-----+
em0| |em0
| |
---+-------Shared LAN-------+---


Рис. 1.

В данном случае LAN подключена к em0 и WAN/Internet подключен к em1. Адреса назначены следующим образом:

- Firewall 1 (fw1) em0: 172.16.0.1;
- Firewall 1 (fw1) em1: 192.0.2.1;
- Firewall 2 (fw2) em0: 172.16.0.2;
- Firewall 2 (fw2) em1: 192.0.2.2.

Адреса, назначенные группе избыточности:

- WAN/Internet Shared IP: 192.0.2.100;
- LAN Shared IP: 172.16.0.100.

Считаем Firewall 1 (fw1) мастером. При этом его конфигурация будет выглядеть следующим образом:

sysctl -w net.inet.carp.preempt=1
ifconfig carp0 create
ifconfig carp0 vhid 1 pass lanpasswd carpdev em0 172.16.0.100 255.255.255.0
ifconfig carp1 create
ifconfig carp1 vhid 2 pass wanpasswd carpdev em1 192.0.2.100 255.255.255.0


Конфигурация Firewall 2 (fw2) отличается установленным параметром advskew:

sysctl -w net.inet.carp.preempt=1
ifconfig carp0 create
ifconfig carp0 vhid 1 pass lanpasswd carpdev em0 advskew 128 172.16.0.100 255.255.255.0
ifconfig carp1 create
ifconfig carp1 vhid 2 pass wanpasswd carpdev em1 advskew 128 192.0.2.100 255.255.255.0


принудительное понижение роли

Могут быть моменты, когда мастер-хост должен быть принудительно переведен в резерв. Это могут быть случаи планового обслуживания или ремонта. Наша задача заключается в том, чтобы данная операция прошла безболезненно для пользователей.

Для этого необходимо просто погасить интерфейс carp на мастер-хосте. Это заставит мастер-хост обьявлять себя с бесконечным advbase и advskew, что приведет к перехвату роли резервным хостом:

ifconfig carp0 down



Сгибнев Михаил


© Сетевые решения