CARP — Common Address Redundancy Protocol
Другими словами это протокол избыточности, который позволяет двум или более компьютерам в одной подсети иметь одновременно один и тот же IP адрес, при этом возможна настройка этой группы компьютеров как взаимозаменяемые (главный компьютер отключился/сломался — вместо него сразу же принимается за работу другой, у которого приоритет выше) и так по кругу. Максимально количество компьютеров в группе — 256, в сети между ними не должно быть роутеров.
Также возможна конфигурация данной группы как некий кластер, который будет обрабатывать приходящие пакеты по кругу( 1-2-3-4-5…..256-1-2-3-4), то есть распределяя нагрузку на сервис.
Вариант первый. Резервирование.
1) Необходимо на всех компьютерах группы включить в ядро опцию
device carp
Пересобрать его и установить.
cd /usr/src
make buildkernel KERNCONF=PARANOID #PARANOID — мое название конфигурации ядра.
make installkernel KERNCONF=PARANOID
2) Выставить на каждом компьютере группы опцию sysctl
sysctl net.inet.carp.preempt=1
и добавить в /etc/sysctl.conf # Чтоб при следующей загрузке данный параметр автоматически выставился в 1.
net.inet.carp.preempt=1
Данная опция включает в CARP функцию резервирования.
3) Настроить сетевые карты каждого из группы компьютеров на ОТДЕЛЬНЫЙ ip адрес из одной подсети. ВАЖНО ! Так как можно запутаться и писать на интерфейс сразу у всей группы один и тот-же адрес, что вызовет конфликт адресов.
Например:
PC1 — 10.100.0.1/24
PC2 — 10.100.0.2/24
PC3 — 10.100.0.3/24
4) Создать интерфейс carp, прописать ему ip (именно на этом IP будет висеть ваш сервис), VHID (Идентификатор CRAP группы), и выдать каждому CARP интефейсу на каждом из компьютеров группы свой УНИКАЛЬНЫЙ advskew (приоритет сервера) чем он ниже — тем раньше, в случае сбоя, этот сервер присвоит себе IP и будет обрабатывать запросы, и пароль группы pass (Также должен быть одинаковый в одной группе)
PC1
ifconfig carp0 create
ifconfig carp0 vhid 1 pass VeRySeCrEtPaSsWoRd 10.100.0.4/24 advskew 0
PC2
ifconfig carp0 create
ifconfig carp0 vhid 1 pass VeRySeCrEtPaSsWoRd 10.100.0.4/24 advskew 1
PC3
ifconfig carp0 create
ifconfig carp0 vhid 1 pass VeRySeCrEtPaSsWoRd 10.100.0.4/24 advskew 2
Таким образом получается что если ломается PC1, то тут-же за него начинает работать PC2, если и он ломается, и при этом PC1 все еще не восстановлен, то в работу включается PC3.
Синхронизировать сервера можно по физическим интерфейсам с IP 10.100.0.1-3, но своими силами.
Вариант второй. Распределение нагрузки.
Ядро так-же собираем с поддержкой CARP но в sysctl выставляем значение уже arpbalance в 1
sysctl net.inet.carp.arpbalance=1
и соотвественно в /etc/sysctl.conf
net.inet.carp.arpbalance=1
Как видно из названия обьекта, балансировка происходит на основании MAC-адреса клиентского компьютера, соответственно, роутеров между сервером и клиентом не должно быть.
Затем на каждом из серверов группы надо настроить 2 CARP интерфейса и 1 физический (vlan-ы тоже поддерживаются) с разными vhid (Если на одном РС у этого VHID advskew=100, то на другом РС на этом-же VHID должен быть advskew=0).
PC1
ifconfig em0 10.100.0.1/24
ifconfig carp0 create
ifconfig carp0 vhid 1 pass SeCrEt 10.100.0.2/24 advskew 0
ifconfig carp1 create
ifconfig carp1 vhid 2 pass AnoTheRSeCrEt 10.100.0.2/24 advskew 100
PC2
ifconfig em0 10.100.0.3/24
ifconfig carp0 create
ifconfig carp0 vhid 1 pass SeCrEt 10.100.0.2/24 advskew 100
ifconfig carp1 create
ifconfig carp1 vhid 2 pass AnoTheRSeCrEt 10.100.0.2/24 advskew 0
Теперь при обращении к IP 10.100.0.2 для каждого отдельного физического устройства сервера будут отзываться по очереди. В случае падения одного из серверов отвечать на запросы будет оставшиеся.
З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !