CARP – протокол, позволяющий задействовать один IP-адрес для нескольких машин в сети. Таким образом можно реализовать отказоустойчивость (избыточность) и масштабирование (увеличение нагрузки). Пусть у нас имеется два сервера с собственными ip-адресами – 10.0.0.2 и 10.0.0.3, и хочется дополнительно настроить общий адрес 10.0.0.1, который предоставляет какой-либо сервис пользователям (к примеру, маршрутизация или DNS). Инструкция по использованию технологии CARP под катом.
Ядро
Первым делом собираем свое ядро. Скачиваем исходники
sysinstall
Выбираем Configure – Distributions – src, отмечаем галочкой base и src.
Настраиваем конфиг ядра, кладем его в /root/kernels и компилируем. Проделываем эти действия на обоих серверах.
# cd /usr/src/sys/i386/conf # mkdir -p /root/kernels # cp GENERIC /root/kernels/CARP # ln -s /root/kernels/CARP # vim CARP device carp # cd /usr/src # make buildkernel KERNCONF=CARP # make installkernel KERNCONF=CARP # vim /etc/sysctl.conf net.inet.carp.preempt=1
Настраиваем carp-интерфейс на основном сервере:
# vim /etc/rc.conf cloned_interfaces="carp0" ifconfig_carp0="vhid 1 pass secretpassword advskew 0 10.0.0.1/24"
На запасном сервере:
# vim /etc/rc.conf cloned_interfaces="carp0" ifconfig_carp0="vhid 1 pass secretpassword advskew 100 10.0.0.1/24"
Объединяемые интерфейсы должны обладать одинаковыми параметрами vhid и pass. Параметр advskew отвечает за приоритет. Чем меньше – тем “главнее” будет интерфейс. Когда интерфейс с наименьшим advskew упадет, главным (т.е. MASTER) станет интерфейс со вторым по значению параметром advskew.
Перезагружаемся. Пробуем вытащить кабель из основного сервера. Радуемся, если все продолжает работать.
Также с помощью CARP можно создавать высокопроизводительные кластеры. Об этом, а также о том, как запускать сервисы по подъему CARP, в следующий раз.