Протокол маршрутизатора с горячим резервированием (HSRP) и протокол резервирования виртуального маршрутизатора (VRRP): различия между версиями
imported>Vix Нет описания правки |
Vix (обсуждение | вклад) |
||
| (не показано 15 промежуточных версий этого же участника) | |||
| Строка 1: | Строка 1: | ||
=='''Сетевые сервисы VRRP'''== | |||
* Как настроить VRRP на Debian | |||
Установку и настройку будем проводить на примере серверов SRV1 и SRV2 с выданным диапазоном адресов 91.142.82.216/29<br> | |||
ipv4 и ipv6 выдаются только подсетями<br> | |||
Минимальный размер подсети ipv4: /29, ipv6: /64.<br> | |||
Пример: выдана подсеть ipv4 адресов 91.142.82.216/29<br> | |||
91.142.82.217 - виртуальный ip (который является шлюзом по умолчанию) | |||
91.142.82.218 - служебный ip | |||
91.142.82.219 - служебный ip | |||
91.142.82.220 - клиентский ip | |||
91.142.82.221 - клиентский ip | |||
91.142.82.222 - плавающий ip | |||
У каждого Linux сервера есть два физических сетевых интерфейса: eth1 с белым IP адресом и доступом в Интернет, eth0 свободен<br> | |||
В качестве реальных IP адресов серверов используются: | |||
91.142.82.220 — для SRV1 | |||
91.142.82.221 — для SRV2 | |||
В качестве виртуального IP адреса, который будет автоматически переключаться между серверами в случае сбоев используется: | |||
< | 91.142.82.222 | ||
* '''Важно.''' При настройке '''VRRP''', в качестве адреса для виртуального '''IP''' не используется реальный адрес сервера, так как, в случае сбоя, его адрес переместится на соседний, и при восстановлении, он окажется изолированным от сети. Дело в том, чтобы вернуть свой адрес, нужно отправить в сеть '''VRRP''' пакет, но не будет '''IP''' адреса, с которого это возможно сделать. | |||
* Установка и настройка | |||
Установить пакет keepalived нужно на обоих серверах, командой: | |||
apt-get install keepalived | |||
После завершения установки на обоих серверах правим конфигурационный файл | |||
nano /etc/keepalived/keepalived.conf | |||
Разберем опции более подробно: | |||
* vrrp_instance <название> — секция, определяющая экземпляр VRRP; | |||
* state <MASTER|BACKUP> — начальное состояние при запуске; | |||
* interface <название интефейса> — интерфейс, на котором будет работать VRRP; | |||
* virtual_router_id <число от 0 до 255> — уникальный идентификатор VRRP экземпляра, должен совпадать на всех серверах; | |||
* priority <число от 0 до 255> — задает приоритет при выборе MASTER, сервер с большим приоритетом становится MASTER; | |||
* virtual_ipaddress — блок виртуальных IP адресов, которые будут активны на сервере в состоянии MASTER. Должны совпадать на всех серверах внутри VRRP экземпляра. | |||
* Таким образом, при штатной работе, сервер SRV1 будет MASTER для виртуального IP 91.142.82.222 | |||
Если на сервере активирован файрвол, то нужно добавить разрешающие правила для multicast трафика и vrrp протокола с помощью iptables: | |||
Для SRV1: | |||
iptables -I INPUT -p vrrp -j ACCEPT | |||
iptables -I OUTPUT -p vrrp -j ACCEPT | |||
Для SRV2: | |||
iptables -I INPUT -p vrrp -j ACCEPT | |||
iptables -I OUTPUT -p vrrp -j ACCEPT | |||
Активируем автозагрузки и запустим службу keepalived на обоих серверах: | |||
sudo /etc/init.d/keepalived start | |||
После запуска службы keepalived, виртуальные IP будут присвоены интерфейсам из конфигурационного файла. Посмотрим текущие IP адреса на интерфейсе eth1 серверов: | |||
SRV1: пример '''ifconfig''' | |||
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 | |||
inet 10.0.0.3 netmask 255.255.255.0 broadcast 10.0.0.255 | |||
ether bc:24:11:71:2c:32 txqueuelen 1000 (Ethernet) | |||
RX packets 4104674 bytes 1329684333 (1.2 GiB) | |||
RX errors 0 dropped 18748 overruns 0 frame 0 | |||
TX packets 4370060 bytes 547449092 (522.0 MiB) | |||
TX errors 0 dropped 2275 overruns 0 carrier 0 collisions 0 | |||
'''eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500''' | |||
'''inet 10.0.0.30 netmask 255.255.255.0 broadcast 0.0.0.0''' | |||
'''ether bc:24:11:71:2c:32 txqueuelen 1000 (Ethernet)''' | |||
SRV2: '''ifconfig''' | |||
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 | |||
inet 10.0.0.4 netmask 255.255.255.0 broadcast 10.0.0.255 | |||
ether bc:24:11:71:2c:32 txqueuelen 1000 (Ethernet) | |||
RX packets 4104674 bytes 1329684333 (1.2 GiB) | |||
RX errors 0 dropped 18748 overruns 0 frame 0 | |||
TX packets 4370060 bytes 547449092 (522.0 MiB) | |||
TX errors 0 dropped 2275 overruns 0 carrier 0 collisions 0 | |||
Проверим работоспособность настроенной службы keepalived командой: | |||
traceroute 8.8.8.8 –source=10.0.0.30 | |||
* Если используете в конфигурации скрипт контроля чего либо и на его основании переключаете MASTER\BACKUP - то в скрипте возвращайте только '''true''' или '''false'''!<br> | |||
Скрипт должен иметь права только от пользователя '''chown:root:r00t''' и '''chmod:700''' | |||
** Пример: | |||
/etc/keepalived/keepalived.conf | |||
... | |||
global_defs { | |||
dynamic_interfaces | |||
'''enable_script_security''' | |||
max_auto_priority | |||
'''script_user root''' | |||
... | |||
## контроль статуса zabbix | |||
'''vrrp_script zabbix_check {''' | |||
'''script "/etc/keepalived/check_zabbix.sh"''' | |||
'''interval 5''' | |||
'''}''' | |||
## настройка виртуального ip | |||
vrrp_instance VI_1 { | |||
state BACKUP | |||
interface eth0 | |||
virtual_router_id 111 | |||
priority 10 | |||
unicast_peer { | |||
10.0.0.4 | |||
} | |||
virtual_ipaddress { | |||
10.0.0.30/24 dev eth0 label eth0:1 | |||
} | |||
'''track_script {''' | |||
'''zabbix_check''' | |||
'''}''' | |||
} | |||
... | |||
Пример скрипта bash: | |||
#!/bin/bash | |||
# - скрипт проверяет запущен ли сервер '''zabbix''' и если он в кластере активен то - '''true''' | |||
PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin"; | |||
if [ "$(/usr/bin/systemctl is-active zabbix-server >/dev/null && echo 1 || echo 0 )" != "0" ];then | |||
if [ "$(/usr/sbin/zabbix_server -R ha_status|grep $HOSTNAME|awk '{print$5}')" == "active" ];then | |||
'''true''' | |||
else | |||
'''false''' | |||
fi | |||
else | |||
'''false''' | |||
fi | |||
==ИСТОЧНИКИ== | |||
* [https://help.miran.ru/main/notes/kak-nastroit-vrrp-na-debian Как настроить VRRP на Debian] | |||
* [https://habr.com/en/post/452490/ Принцип работы протокола VRRP] | * [https://habr.com/en/post/452490/ Принцип работы протокола VRRP] | ||
* [http://espressocode.top/hot-standby-router-protocol-hsrp-virtual-router-redundancy-protocol-vrrp/ Протокол маршрутизатора с горячим резервированием (HSRP) и протокол резервирования виртуального маршрутизатора (VRRP) ] | * [http://espressocode.top/hot-standby-router-protocol-hsrp-virtual-router-redundancy-protocol-vrrp/ Протокол маршрутизатора с горячим резервированием (HSRP) и протокол резервирования виртуального маршрутизатора (VRRP) ] | ||
* [https://habr.com/ru/post/128770/ VRRP в Linux] | * [https://habr.com/ru/post/128770/ VRRP в Linux] | ||
* [https://tuxnotes.com/snippet/vrrp-%D0%BD%D0%B0-%D0%B1%D0%B0%D0%B7%D0%B5-keepalived-linux-debian-dns vrrp на базе keepalived linux debian dns] | * [https://tuxnotes.com/snippet/vrrp-%D0%BD%D0%B0-%D0%B1%D0%B0%D0%B7%D0%B5-keepalived-linux-debian-dns vrrp на базе keepalived linux debian dns] | ||
* [https://ru.wikipedia.org/wiki/GlusterFS GlusterFS] | * [https://ru.wikipedia.org/wiki/GlusterFS GlusterFS] | ||
=='''ПОЛЕЗНОЕ'''== | |||
* [https://serverspace.ru/support/help/povyshenie-otkazoustojchivosti-sajta-pri-pomoshhi-haproxy-i-keepalived/?utm_source=yandex.ru&utm_medium=organic&utm_campaign=yandex.ru&utm_referrer=yandex.ru Повышение отказоустойчивости сайта при помощи HAProxy и keepalived] | |||
* [https://internet-lab.ru/keepalived_ubuntu Установка и настройка keepalived на примере MultiFactor Ldap Adapter] | |||
* [https://efsol.ru/manuals/haproxy-vrrp.html Настройка кластера HAproxy при помощи VRRP] | |||
* [https://translated.turbopages.org/proxy_u/en-ru.ru.6599453c-66435892-4a9a5803-74722d776562/https/docs.oracle.com/en/operating-systems/oracle-linux/8/balancing/balancing-SettingUpLoadBalancingbyUsingKeepalived.html Настройка балансировки нагрузки с помощью Keepalived] | |||
* [https://habr.com/ru/articles/524688/ Отказоустойчивый кластер с балансировкой нагрузки с помощью keepalived] | |||
* [https://nixhub.ru/posts/haproxy-exch2016-lb/ HAProxy - балансировщик для Exchange Server 2016/2019 ] | |||
* [https://docs.eltex-co.ru/display/doc/v1.20_Keepalived Keepalived RU] | |||
* [https://readthedocs.org/projects/keepalived/downloads/pdf/latest/ Official manual] | |||
Текущая версия от 13:54, 25 июля 2025
Сетевые сервисы VRRP
- Как настроить VRRP на Debian
Установку и настройку будем проводить на примере серверов SRV1 и SRV2 с выданным диапазоном адресов 91.142.82.216/29
ipv4 и ipv6 выдаются только подсетями
Минимальный размер подсети ipv4: /29, ipv6: /64.
Пример: выдана подсеть ipv4 адресов 91.142.82.216/29
91.142.82.217 - виртуальный ip (который является шлюзом по умолчанию) 91.142.82.218 - служебный ip 91.142.82.219 - служебный ip 91.142.82.220 - клиентский ip 91.142.82.221 - клиентский ip 91.142.82.222 - плавающий ip
У каждого Linux сервера есть два физических сетевых интерфейса: eth1 с белым IP адресом и доступом в Интернет, eth0 свободен
В качестве реальных IP адресов серверов используются:
91.142.82.220 — для SRV1 91.142.82.221 — для SRV2
В качестве виртуального IP адреса, который будет автоматически переключаться между серверами в случае сбоев используется:
91.142.82.222
- Важно. При настройке VRRP, в качестве адреса для виртуального IP не используется реальный адрес сервера, так как, в случае сбоя, его адрес переместится на соседний, и при восстановлении, он окажется изолированным от сети. Дело в том, чтобы вернуть свой адрес, нужно отправить в сеть VRRP пакет, но не будет IP адреса, с которого это возможно сделать.
- Установка и настройка
Установить пакет keepalived нужно на обоих серверах, командой:
apt-get install keepalived
После завершения установки на обоих серверах правим конфигурационный файл
nano /etc/keepalived/keepalived.conf
Разберем опции более подробно:
- vrrp_instance <название> — секция, определяющая экземпляр VRRP;
- state <MASTER|BACKUP> — начальное состояние при запуске;
- interface <название интефейса> — интерфейс, на котором будет работать VRRP;
- virtual_router_id <число от 0 до 255> — уникальный идентификатор VRRP экземпляра, должен совпадать на всех серверах;
- priority <число от 0 до 255> — задает приоритет при выборе MASTER, сервер с большим приоритетом становится MASTER;
- virtual_ipaddress — блок виртуальных IP адресов, которые будут активны на сервере в состоянии MASTER. Должны совпадать на всех серверах внутри VRRP экземпляра.
- Таким образом, при штатной работе, сервер SRV1 будет MASTER для виртуального IP 91.142.82.222
Если на сервере активирован файрвол, то нужно добавить разрешающие правила для multicast трафика и vrrp протокола с помощью iptables:
Для SRV1:
iptables -I INPUT -p vrrp -j ACCEPT iptables -I OUTPUT -p vrrp -j ACCEPT
Для SRV2:
iptables -I INPUT -p vrrp -j ACCEPT iptables -I OUTPUT -p vrrp -j ACCEPT
Активируем автозагрузки и запустим службу keepalived на обоих серверах:
sudo /etc/init.d/keepalived start
После запуска службы keepalived, виртуальные IP будут присвоены интерфейсам из конфигурационного файла. Посмотрим текущие IP адреса на интерфейсе eth1 серверов:
SRV1: пример ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.3 netmask 255.255.255.0 broadcast 10.0.0.255
ether bc:24:11:71:2c:32 txqueuelen 1000 (Ethernet)
RX packets 4104674 bytes 1329684333 (1.2 GiB)
RX errors 0 dropped 18748 overruns 0 frame 0
TX packets 4370060 bytes 547449092 (522.0 MiB)
TX errors 0 dropped 2275 overruns 0 carrier 0 collisions 0
eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.30 netmask 255.255.255.0 broadcast 0.0.0.0
ether bc:24:11:71:2c:32 txqueuelen 1000 (Ethernet)
SRV2: ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.4 netmask 255.255.255.0 broadcast 10.0.0.255
ether bc:24:11:71:2c:32 txqueuelen 1000 (Ethernet)
RX packets 4104674 bytes 1329684333 (1.2 GiB)
RX errors 0 dropped 18748 overruns 0 frame 0
TX packets 4370060 bytes 547449092 (522.0 MiB)
TX errors 0 dropped 2275 overruns 0 carrier 0 collisions 0
Проверим работоспособность настроенной службы keepalived командой:
traceroute 8.8.8.8 –source=10.0.0.30
- Если используете в конфигурации скрипт контроля чего либо и на его основании переключаете MASTER\BACKUP - то в скрипте возвращайте только true или false!
Скрипт должен иметь права только от пользователя chown:root:r00t и chmod:700
- Пример:
/etc/keepalived/keepalived.conf
...
global_defs {
dynamic_interfaces
enable_script_security
max_auto_priority
script_user root
...
## контроль статуса zabbix
vrrp_script zabbix_check {
script "/etc/keepalived/check_zabbix.sh"
interval 5
}
## настройка виртуального ip
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 111
priority 10
unicast_peer {
10.0.0.4
}
virtual_ipaddress {
10.0.0.30/24 dev eth0 label eth0:1
}
track_script {
zabbix_check
}
}
...
Пример скрипта bash:
#!/bin/bash
# - скрипт проверяет запущен ли сервер zabbix и если он в кластере активен то - true
PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin";
if [ "$(/usr/bin/systemctl is-active zabbix-server >/dev/null && echo 1 || echo 0 )" != "0" ];then
if [ "$(/usr/sbin/zabbix_server -R ha_status|grep $HOSTNAME|awk '{print$5}')" == "active" ];then
true
else
false
fi
else
false
fi
ИСТОЧНИКИ
- Как настроить VRRP на Debian
- Принцип работы протокола VRRP
- Протокол маршрутизатора с горячим резервированием (HSRP) и протокол резервирования виртуального маршрутизатора (VRRP)
- VRRP в Linux
- vrrp на базе keepalived linux debian dns
- GlusterFS
ПОЛЕЗНОЕ
- Повышение отказоустойчивости сайта при помощи HAProxy и keepalived
- Установка и настройка keepalived на примере MultiFactor Ldap Adapter
- Настройка кластера HAproxy при помощи VRRP
- Настройка балансировки нагрузки с помощью Keepalived
- Отказоустойчивый кластер с балансировкой нагрузки с помощью keepalived
- HAProxy - балансировщик для Exchange Server 2016/2019
- Keepalived RU
- Official manual
