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 для каждого отдельного физического устройства сервера будут отзываться по очереди. В случае падения одного из серверов отвечать на запросы будет оставшиеся.
З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !
Автор: Куликов Кирилл (TheFeaR)
Похожие статьи:
- Не найдено
Keeper-it сказал:
[quote]Также возможна конфигурация данной группы как некий кластер, который будет обрабатывать приходящие пакеты по кругу[/quote]
07.03.2010, 13:28Пакеты или соединения? Если пакеты.. то это снижает возможности применения балансировки в разы 🙁
temp сказал:
man carp /ARP level load balancing
Перевод:
27.03.2010, 06:34Балансирование нагрузки на уровне ARP
Протокол CARP обладает ограниченным набором возможностей для балансирования входящего трафика между хостами в ethernet-сети. Для использования балансирования нагрузки, нужно сконфигурировать несколько CARP-интерфейсов с одинаковым IP-адресом, но различными VHID. Таким образом, при получении ARP-запроса, протокол CARP применив функцию хеширования к IP-адресу источника ARP-запроса определит VHID хоста, которому этот запрос принадлежит. Если соответствующий CARP-интерфейс находится в состоянии «ведущий», будет отправлен ответ на ARP-запрос, в противном случае запрос будет проигнорирован. См. примеры использования балансирования нагрузки в разделе ПРИМЕРЫ.
Источник: http://redteapot.co.cc/articles/network-sw/20-carp_part2.html
D06PbIU сказал:
Подскажите пожалуйста, что-то я запутался: у меня два маршрутизатора, у каждого по три интерфейса (каждый в свою сеть смотрит), надо сделать балансировку между этими маршрутизаторами (), это надо для каждого физического интерфеса каждого маршрутизатора поднять по одному carp??
10.11.2011, 17:37admin сказал:
насколько я понимаю — да
12.11.2011, 07:49D06PbIU сказал:
admin сказал:
насколько я понимаю – да
——————————
Затем на каждом из серверов группы надо настроить 2 CARP интерфейса и 1 физический (vlan-ы тоже поддерживаются) с разными vhid (Если на одном РС у этого VHID advskew=100, то на другом РС на этом-же VHID должен быть advskew=0).
Два или одни carp нужно всетаки????
12.11.2011, 13:22