Сервисы, требующие высокой доступности, обычно используют плавающие IP-адреса. Плавающий IP-адрес может быть автоматически переброшен между несколькими серверами в ходе переключения на резерв из-за выхода из строя основного сервера или для обновления программного обеспечения без простоев.
В этой статье мы рассмотрим простейшую конфигурацию с плавающим IP-адресом на базе keepalived под CentOS 7. Keepalived использует протокол VRRP и IP-мультикастинг для межсерверной коммуникации.
Предварительные требования
Выделенные серверы. Настройка плавающего IP-адреса возможна только с выделенными серверами, но не с облачными.
L2-сегмент. Серверы должны быть объединены в один L2-сегмент (то есть VLAN). Обратите внимание, что создание пользовательских L2-сегментов доступно в некоторых из наших дата-центров, поэтому серверы должны находиться в одном из них. Вы можете посмотреть список подходящих ДЦ в диалоговом окне создания L2-сегмента в панели управления.
Создание L2-сегмента и аренда IP-алиаса
Пусть у нас есть два выделенных сервера «master-keepalived» и «slave-keepalived» в дата-центре MOW1.
Нам нужно создать новый L2-сегмент в разделе «Сети > L2 сегменты» панели управления. Тип VLAN нужно выбрать «Native», поскольку мы используем только одну VLAN, а тип L2-сегмента – «Публичный», потому что мы будем использовать публичное адресное пространство. Имя – на ваше усмотрение, и нам нужно добавить оба наших сервера в подраздел «Серверы».
Требуется 3-5 минут для создания нового L2-сегмента. Используйте кнопку «Обновить» рядом со статусом сегмента, чтобы проверить, изменился ли статус с «pending» на «active».
После того, как сегмент стал активным, нужно добавить IP-алиас, который и будет плавающим IP. Добавьте один, нажмите «Сохранить».
Настройка keepalived
Установите и включите демон keepalived на каждом из серверов:yum install keepalived systemctl enable keepalived
В нашей демо-конфигурации два сервера: MASTER и BACKUP. Плавающий IP-адрес назначается MASTER в штатном порядке. Задача сервера BACKUP заключается в том, чтобы взять на себя плавающий IP-адрес и нагрузку с сервера MASTER в случае его сбоя и наоборот.
Нет необходимости настраивать IP-алиас где-либо, кроме файла конфигурации keepalived. Keepalived позаботится о назначении IP-адреса нужному сетевому интерфейсу.
Конфигурация MASTER (/etc/keepalived/keepalived.conf) выглядит следующим образом:! Configuration File for keepalived global_defs { router_id uMASTER } vrrp_instance VI_1 { state MASTER interface agge virtual_router_id 230 priority 101 # PAY ATTENTION ON PRIORITY!! advert_int 1 authentication { auth_type PASS auth_pass SecPassWord #changepass if need } virtual_ipaddress { 173.0.146.251/32 dev agge label agge:0 } }
Конфигурация BACKUP (/etc/keepalived/keepalived.conf) выглядит следующим образом:! Configuration File for keepalived global_defs { router_id uBACKUP } vrrp_instance VI_1 { state BACKUP interface agge virtual_router_id 230 priority 100 # PAY ATTENTION ON PRIORITY!! advert_int 1 authentication { auth_type PASS auth_pass SecPassWord #changepass if need } virtual_ipaddress { 173.0.146.251/32 dev agge label agge:0 } }
Некоторые пояснения по директивам конфигурационного файла:state BACKUP, MASTER — роль сервера. 173.0.146.251/32 dev agge label agge:0 — интерфейс для назначения IP-алиаса.
Теперь мы готовы к запуску keepalived на каждом из серверов:systemctl start keepalived
Проверка переключения в случае отказа
В выводе ifconfig вы можете видеть, что плавающий IP по умолчанию назначается серверу MASTER:# ifconfig agge:0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500 inet 173.0.146.251 netmask 255.255.255.255 broadcast 0.0.0.0 ether 20:47:47:85:e4:3e txqueuelen 1000 (Ethernet)
Чтобы проверить переключение при отказе, начните пинговать плавающий IP-адрес, а затем остановите keepalived на MASTER:systemctl stop keepalived
Вы увидите кратковременную потерю пакетов в выводе ping, которая происходит во время перехода плавающего IP и нагрузки к BACKUP:ping 173.0.146.251 64 bytes from 173.0.146.251: icmp_seq=59 ttl=53 time=260.582 ms 64 bytes from 173.0.146.251: icmp_seq=60 ttl=53 time=314.723 ms 64 bytes from 173.0.146.251: icmp_seq=62 ttl=53 time=498.176 ms 64 bytes from 173.0.146.251: icmp_seq=63 ttl=53 time=167.139 ms Request timeout for icmp_seq 64 <—————————- 64 bytes from 173.0.146.251: icmp_seq=65 ttl=53 time=597.598 ms 64 bytes from 173.0.146.251: icmp_seq=66 ttl=53 time=172.361 ms 64 bytes from 173.0.146.251: icmp_seq=67 ttl=53 time=240.334 ms
Source: https://www.servers.ru/knowledge/linux-administration/how-to-setup-floating-ip-using-keepalived