NGINX, KeepAlived · 6 min read · Nov 08, 2025

Как настроить высокодоступный NGINX с KeepAlived на CentOS 8

Nginx — это бесплатный, с открытым исходным кодом и один из самых популярных веб-серверов в мире. Он также может использоваться в качестве обратного прокси, балансировщика нагрузки и HTTP-кэша. Высокая доступность позволяет приложению перенаправлять работу на другую систему в случае сбоя. Существуют различные технологии для настройки высокодоступной системы.

Keepalived — это системный демон, который непрерывно мониторит службы или системы и обеспечивает высокую доступность в случае сбоя. Если один узел выходит из строя, второй узел предоставляет ресурсы.

В этом руководстве я покажу вам, как настроить высокодоступный веб-сервер Nginx с KeepAlived на CentOS 8.

Предварительные требования

  • Два сервера с CentOS 8: один для основного узла и один для резервного узла.
  • Пароль root настроен на вашем сервере.

Установка Nginx на обоих узлах

Сначала вам нужно установить пакет Nginx на обоих узлах. Вы можете установить его, используя следующую команду:

dnf install nginx -y

После установки Nginx на обоих узлах запустите службу Nginx и включите ее автозагрузку при перезагрузке системы:

systemctl start nginx  
systemctl enable nginx

Когда вы закончите, вы можете перейти к следующему шагу.

Создание файла Index.html на обоих узлах

Далее вам нужно создать пользовательский файл index.html на обоих узлах, чтобы идентифицировать каждый узел.

На первом узле создайте файл index.html с помощью следующей команды:

echo "

Это мой первый узел веб-сервера NGINX

" | tee /usr/share/nginx/html/index.html

На втором узле создайте файл index.html с помощью следующей команды:

echo "

Это мой второй узел веб-сервера NGINX

" | tee /usr/share/nginx/html/index.html

Сохраните и закройте файл, когда закончите.

Установка и настройка Keepalived

Далее вам нужно установить Keepalived на обоих узлах. По умолчанию пакет Keepalived доступен в стандартном репозитории CentOS 8. Вы можете установить его, выполнив следующую команду:

dnf install keepalived -y

После установки пакета keepalived на обоих узлах вам нужно будет отредактировать файл конфигурации keepalived по умолчанию на обоих узлах.

На первом узле отредактируйте файл keepalived.conf:

nano /etc/keepalived/keepalived.conf

Удалите содержимое по умолчанию и добавьте следующее содержимое:

global_defs {
  # Идентификатор процесса Keepalived
  router_id nginx
}

# Скрипт для проверки, работает ли Nginx
vrrp_script check_nginx {
  script "/bin/check_nginx.sh"
  interval 2
  weight 50
}

# Виртуальный интерфейс - приоритет определяет порядок, в котором назначенный интерфейс должен взять на себя в случае сбоя
vrrp_instance VI_01 {
  state MASTER
  interface eth0
  virtual_router_id 151
  priority 110

  # Виртуальный IP-адрес, общий между двумя веб-серверами NGINX, который будет перемещаться
  virtual_ipaddress {
    192.168.1.10/24
  }
  track_script {
    check_nginx
  }
  authentication {
    auth_type AH
    auth_pass secret
  }
}

Сохраните и закройте файл, когда закончите.

На втором узле отредактируйте файл keepalived.conf:

nano /etc/keepalived/keepalived.conf

Удалите содержимое по умолчанию и добавьте следующее содержимое:

global_defs {
  # Идентификатор процесса Keepalived
  router_id nginx
}

# Скрипт для проверки, работает ли Nginx
vrrp_script check_nginx {
  script "/bin/check_nginx.sh"
  interval 2
  weight 50
}

# Виртуальный интерфейс - приоритет определяет порядок, в котором назначенный интерфейс должен взять на себя в случае сбоя
vrrp_instance VI_01 {
  state BACKUP
  interface eth0
  virtual_router_id 151
  priority 100

  # Виртуальный IP-адрес, общий между двумя веб-серверами NGINX, который будет перемещаться
  virtual_ipaddress {
    192.168.1.10/24
  }
  track_script {
    check_nginx
  }
  authentication {
    auth_type AH
    auth_pass secret
  }
}

Сохраните и закройте файл, затем вам нужно будет создать скрипт для проверки, работает ли служба Nginx или нет. Вы можете создать его, используя следующую команду:

Примечание: Просто замените MASTER на BACKUP и 110 на 100 в вышеуказанном файле конфигурации.

nano /bin/check_nginx.sh

Добавьте следующие строки:

#!/bin/sh
if [ -z "`pidof nginx`" ]; then
  exit 1
fi

Сохраните и закройте файл, затем установите правильные разрешения с помощью следующей команды:

chmod 755 /bin/check_nginx.sh

Наконец, запустите службу keepalived и включите ее автозагрузку при перезагрузке системы, используя следующую команду:

systemctl start keepalived  
systemctl enable keepalived

Вы также можете проверить статус службы keepalived, используя следующую команду:

systemctl status keepalived

Вы должны получить следующий вывод:

? keepalived.service - LVS and VRRP High Availability Monitor
   Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
   Active: active (running) since Thu 2021-04-08 04:24:22 EDT; 5s ago
  Process: 3141 ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 3142 (keepalived)
    Tasks: 2 (limit: 12524)
   Memory: 2.1M
   CGroup: /system.slice/keepalived.service
           ??3142 /usr/sbin/keepalived -D
           ??3143 /usr/sbin/keepalived -D

Apr 08 04:24:22 node1 Keepalived_vrrp[3143]: (VI_01) Changing effective priority from 110 to 160
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) Receive advertisement timeout
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) Entering MASTER STATE
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) setting VIPs.
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) Sending/queueing gratuitous ARPs on eth0 for 192.168.1.10
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10

Вы также можете проверить статус виртуального IP-адреса на основном узле, используя следующую команду:

ip add show

Вы должны увидеть виртуальный IP-адрес 192.168.1.10 в следующем выводе:

1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:00:2d:3a:20:9b brd ff:ff:ff:ff:ff:ff
    inet 45.58.32.155/24 brd 45.58.32.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet 192.168.1.10/24 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::200:2dff:fe3a:209b/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1:  mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:00:0a:3a:20:9b brd ff:ff:ff:ff:ff:ff
    inet6 fe80::200:aff:fe3a:209b/64 scope link 
       valid_lft forever preferred_lft forever

Когда вы закончите, вы можете перейти к следующему шагу.

Настройка брандмауэра на обоих узлах

Далее вам нужно будет разрешить порт 80 и разрешить VRRP на обоих узлах. Вы можете сделать это, используя следующую команду:

firewall-cmd --permanent --add-service=http  
firebase-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent

Затем перезагрузите firewalld, чтобы применить изменения:

firewall-cmd –reload

Проверка Keepalived

На данный момент Nginx и Keepalived установлены и настроены. Пора протестировать, работает ли высокая доступность Nginx.

Откройте веб-браузер и перейдите по URL http://your-virtual-ip. Вы должны увидеть следующую страницу:

Страница Nginx на узле 1

Теперь остановите службу Nginx на основном узле и проверьте, переключился ли виртуальный IP с узла 1 на узел 2.

На основном узле остановите службу Nginx, используя следующую команду:

systemctl stop nginx

Затем войдите на узел 2 и проверьте виртуальный IP, используя следующую команду:

ip add show

Вы должны увидеть ваш виртуальный IP в следующем выводе:

1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:00:2d:3a:26:37 brd ff:ff:ff:ff:ff:ff
    inet 45.58.38.55/24 brd 45.58.38.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet 192.168.1.10/24 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::200:2dff:fe3a:2637/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1:  mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:00:0a:3a:26:37 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::200:aff:fe3a:2637/64 scope link 
       valid_lft forever preferred_lft forever

Теперь перейдите на ваш веб-сервер Nginx, используя URL http://your-virtual-ip. Вы должны увидеть страницу узла 2:

Nginx на узле 2

Заключение

Поздравляю! Вы успешно настроили высокодоступный сервер Nginx с Keepalived. Я надеюсь, что теперь у вас достаточно знаний, чтобы настроить высокодоступный сервер Nginx в производственной среде.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.