Протокол маршрутизатора с горячим резервированием (HSRP) и протокол резервирования виртуального маршрутизатора (VRRP): различия между версиями

Материал из support.qbpro.ru
 
(не показано 7 промежуточных версий этого же участника)
Строка 55: Строка 55:
После запуска службы keepalived, виртуальные IP будут присвоены интерфейсам из конфигурационного файла. Посмотрим текущие IP адреса на интерфейсе eth1 серверов:
После запуска службы keepalived, виртуальные IP будут присвоены интерфейсам из конфигурационного файла. Посмотрим текущие IP адреса на интерфейсе eth1 серверов:


SRV1:
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


SRV2:
'''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 командой:
Проверим работоспособность настроенной службы keepalived командой:
  traceroute 8.8.8.8 –source=91.142.82.222
  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


==ИСТОЧНИКИ==
==ИСТОЧНИКИ==
Строка 77: Строка 143:
* [https://efsol.ru/manuals/haproxy-vrrp.html Настройка кластера HAproxy при помощи VRRP]
* [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://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

ИСТОЧНИКИ

ПОЛЕЗНОЕ