Keepalived не работает для перенаправления запросов

Вопрос или проблема

Я настраиваю KeepAlived для HA на nginx.

В моей конфигурации это должно работать так:

VIP 1 – 192.168.97.180 (веб-страницы)

-> Сервер 1 – 192.168.97.200

-> Сервер 2 – 192.168.97.230

VIP 2 – 192.168.97.181 (REST API)

-> Сервер 1 – 192.168.97.201

-> Сервер 2 – 192.168.97.231

Тот же URL, который я тестирую на 192.168.97.180, должен возвращать http 200, НО на vip 192.168.97.181 должен возвращать ошибку 404 не найдено.

Но когда я выполняю curl для тестирования URL, он всегда возвращает 404… У меня складывается впечатление, что он перенаправляет на IP сервера 192.168.97.220, а не на VIP-сервера.

vrrp_instance VI_1 {
       state MASTER
       interface ens37
       virtual_router_id 01
       priority 150
       advert_int 1
       unicast_src_ip 192.168.97.200
       unicast_peer {
              192.168.97.230
       }
       virtual_ipaddress {
              192.168.97.180/24
       }
}

vrrp_instance VI_2 {
       state MASTER
       interface ens37
       virtual_router_id 02
       priority 150
       advert_int 1
       unicast_src_ip 192.168.97.201
       unicast_peer {
              192.168.97.231
       }
       virtual_ipaddress {
              192.168.97.181/24
       }
}

Журнал Keepalived:

Dec 18 11:59:35 systemd[1]: /usr/lib/systemd/system/keepalived.service:8: PIDFile= указывает на путь ниже устаревшего каталога /var/run/, обновление /var/run/keepalived.pid → /run/keepalived.pid; пожалуйста, обновите файл юнита соответственно.
Dec 18 11:59:35 systemd[1]: Запуск LVS и монитора высокой доступности VRRP...
Dec 18 11:59:35 Keepalived[81578]: Запуск Keepalived v2.3.1 (05/24,2024)
Dec 18 11:59:35 Keepalived[81578]: Работает на Linux 5.14.0-427.42.1.el9_4.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Oct 18 14:35:40 EDT 2024 (собран для Linux 5.14.0)
Dec 18 11:59:35 Keepalived[81578]: Командная строка: '/usr/sbin/keepalived' '-D'
Dec 18 11:59:35 Keepalived[81578]: Открытие файла '/etc/keepalived/keepalived.conf'.
Dec 18 11:59:35 Keepalived[81578]: Файл конфигурации /etc/keepalived/keepalived.conf
Dec 18 11:59:47 Keepalived[81649]: УВЕДОМЛЕНИЕ: установка параметра конфигурации max_auto_priority должна привести к лучшей производительности keepalived
Dec 18 11:59:47 Keepalived[81649]: Запуск дочернего процесса VRRP, pid=81650
Dec 18 11:59:47 systemd[1]: Запущен LVS и монитор высокой доступности VRRP.
Dec 18 11:59:47 Keepalived_vrrp[81650]: Регистрация рефлектора netlink ядра
Dec 18 11:59:47 Keepalived_vrrp[81650]: Регистрация канала команд netlink ядра
Dec 18 11:59:47 Keepalived_vrrp[81650]: Назначен адрес 192.168.97.220 для интерфейса ens37
Dec 18 11:59:47 Keepalived_vrrp[81650]: Регистрация канала бесплатного ARP
Dec 18 11:59:47 Keepalived_vrrp[81650]: (VI_1) удаление VIP.
Dec 18 11:59:47 Keepalived_vrrp[81650]: (VI_2) удаление VIP.
Dec 18 11:59:47 Keepalived[81649]: Запуск завершен
Dec 18 11:59:47 Keepalived_vrrp[81650]: (VI_1) Переход в РЕЗЕРВНОЕ СОСТОЯНИЕ (init)
Dec 18 11:59:47 Keepalived_vrrp[81650]: (VI_2) Переход в РЕЗЕРВНОЕ СОСТОЯНИЕ (init)
Dec 18 11:59:47 Keepalived_vrrp[81650]: Пул сокетов VRRP: [ifindex(  5), family(IPv4), proto(112), fd(13,14) , unicast, address(192.168.97.200)]
Dec 18 11:59:47 Keepalived_vrrp[81650]: Пул сокетов VRRP: [ifindex(  5), family(IPv4), proto(112), fd(15,16) , unicast, address(192.168.97.201)]
Dec 18 11:59:50 Keepalived_vrrp[81650]: (VI_1) Время ожидания рекламы
Dec 18 11:59:50 Keepalived_vrrp[81650]: (VI_1) Переход в МАСТЕР СОСТОЯНИЕ
Dec 18 11:59:50 Keepalived_vrrp[81650]: (VI_1) настройка VIP.
Dec 18 11:59:50 Keepalived_vrrp[81650]: (VI_1) Отправка/очередь бесплатных ARP на ens37 для 192.168.97.180
Dec 18 11:59:50 Keepalived_vrrp[81650]: Отправка бесплатного ARP на ens37 для 192.168.97.180
Dec 18 11:59:50 Keepalived_vrrp[81650]: (VI_2) Время ожидания рекламы
Dec 18 11:59:50 Keepalived_vrrp[81650]: (VI_2) Переход в МАСТЕР СОСТОЯНИЕ
Dec 18 11:59:50 Keepalived_vrrp[81650]: (VI_2) настройка VIP.
Dec 18 11:59:50 Keepalived_vrrp[81650]: (VI_2) Отправка/очередь бесплатных ARP на ens37 для 192.168.97.181
Dec 18 11:59:50 Keepalived_vrrp[81650]: Отправка бесплатного ARP на ens37 для 192.168.97.181
Dec 18 11:59:55 Keepalived_vrrp[81650]: (VI_1) Отправка/очередь бесплатных ARP на ens37 для 192.168.97.180
Dec 18 11:59:55 Keepalived_vrrp[81650]: Отправка бесплатного ARP на ens37 для 192.168.97.180
Dec 18 11:59:55 Keepalived_vrrp[81650]: (VI_2) Отправка/очередь бесплатных ARP на ens37 для 192.168.97.181
Dec 18 11:59:55 Keepalived_vrrp[81650]: Отправка бесплатного ARP на ens37 для 192.168.97.181
Dec 18 11:59:55 Keepalived_vrrp[81650]: Отправка бесплатного ARP на ens37

Что я делаю не так?

Ответ или решение

Проблема с перенаправлением запросов в Keepalived для Nginx

Вы описали ситуацию, в которой ваш конфиг Keepalived работает некорректно, что приводит к ответу HTTP 404 при обращении к VIP, который должен обслуживать веб-страницы, а не REST API. Разберем возможные причины и пути их решения.

1. Проверка конфигурации VIP

Ваши виртуальные IP-адреса (VIP) настроены следующим образом:

  • VIP 1 (192.168.97.180) должен перенаправлять запросы на сервера 1 (192.168.97.200) и 2 (192.168.97.230) для обработки веб-страниц.
  • VIP 2 (192.168.97.181) должен направлять запросы на сервера 1 (192.168.97.201) и 2 (192.168.97.231) для обработки REST API.

Убедитесь, что на серверах 1 и 2 запущен Nginx и корректно настроены соответствующие виртуальные хосты, которые прослушивают указанные IP-адреса. Для VIP 1 должен быть настроен корневой каталог сервера с веб-страницами, а для VIP 2 — с API.

2. Логи Keepalived

Из логов видно, что Keepalived установил VIP адреса и активно отправляет кампании ARP, что говорит о том, что VIP адреса были успешно получены:

( VI_1 ) sending gratuitous ARP on ens37 for 192.168.97.180
( VI_2 ) sending gratuitous ARP on ens37 for 192.168.97.181

Тем не менее, обратите внимание на сообщения о переходе в состояние BACKUP:

( VI_1 ) entering BACKUP STATE (init)
( VI_2 ) entering BACKUP STATE (init)

Это может указывать на то, что текущий мастер-узел не отвечает или его конфигурация не правильна. Проверьте, чтобы все участвующие ноды имели правильные данные и были доступны по IP-адресу.

3. Проверка Nginx

Убедитесь, что конфигурация Nginx корректная для обоих VIP. Например, конфигурация для VIP 1 может выглядеть как:

server {
    listen 80;
    server_name 192.168.97.180;

    location / {
        root /var/www/html;
        index index.html index.htm;
    }
}

Для VIP 2:

server {
    listen 80;
    server_name 192.168.97.181;

    location /api {
        proxy_pass http://backend_api;
        # другие настройки
    }
}

Запустите команду для проверки конфигурации Nginx:

nginx -t

Если есть ошибки, исправьте их, затем перезагрузите Nginx.

4. Проверка сетевой конфигурации

Убедитесь, что ваша сеть настроена правильно и что нет конфликтов. Проверьте, активен ли маршрут для доступа к VIP с необходимых интерфейсов и что фаервол не блокирует необходимые запросы.

Вы можете использовать утилиты, такие как ping и traceroute, для диагностики проблем с сетевыми соединениями.

5. Тестирование

Запустите тест с использованием curl, чтобы убедиться, что VIP 1 возвращает корректный ответ HTTP 200, а VIP 2 — 404:

curl -I http://192.168.97.180
curl -I http://192.168.97.181

Если VIP 1 возвращает 404, это означает, что запрос не попадает на нужный сервер или виртуальный хост.

Заключение

Убедитесь, что вы проверили и исправили все упомянутые настройки: конфигурацию Keepalived, Nginx, сетевые маршруты и т.д. Если проблемы продолжаются, возможно, имеет смысл посмотреть на уровень сетевого трафика с помощью tcpdump или аналогичного инструмента для более глубокого анализа.

Помните, что точная диагностика проблемы требует последовательного устранения возможных неисправностей и внимательного изучения логов.

Оцените материал
Добавить комментарий

Капча загружается...