Как настроить высокодоступный NGINX с KeepAlived на CentOS 8
На этой странице
- Предпосылки
- Установите Nginx на оба узла
- Создайте файл Index.html на обоих узлах
- Установка и настройка Keepalived
- Настройте брандмауэр на обоих узлах
- Проверка активности
- Заключение
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 "<h1>This is My First NGINX Web Server Node</h1>" | tee /usr/share/nginx/html/index.html
На втором узле создайте файл index.html с помощью следующей команды:
echo "<h1>This is My Second NGINX Web Server Node</h1>" | tee /usr/share/nginx/html/index.html
Сохраните и закройте файл, когда закончите.
Установите и настройте Keepalived
Далее вам нужно будет установить Keepalived на обоих узлах. По умолчанию пакет Keepalived доступен в репозитории CentOS 8 по умолчанию. Вы можете установить его, выполнив следующую команду:
dnf install keepalived -y
После установки пакета поддержки активности на обоих узлах вам потребуется отредактировать файл конфигурации по умолчанию для поддержки активности на обоих узлах.
На первом узле отредактируйте файл keepalived.conf:
nano /etc/keepalived/keepalived.conf
Удалите содержимое по умолчанию и добавьте следующее содержимое:
global_defs { # Keepalived process identifier router_id nginx } # Script to check whether Nginx is running or not vrrp_script check_nginx { script "/bin/check_nginx.sh" interval 2 weight 50 } # Virtual interface - The priority specifies the order in which the assigned interface to take over in a failover vrrp_instance VI_01 { state MASTER interface eth0 virtual_router_id 151 priority 110 # The virtual ip address shared between the two NGINX Web Server which will float 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 process identifier router_id nginx } # Script to check whether Nginx is running or not vrrp_script check_nginx { script "/bin/check_nginx.sh" interval 2 weight 50 } # Virtual interface - The priority specifies the order in which the assigned interface to take over in a failover vrrp_instance VI_01 { state BACKUP interface eth0 virtual_router_id 151 priority 100 # The virtual ip address shared between the two NGINX Web Server which will float 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
Наконец, запустите службу поддержки активности и включите ее запуск при перезагрузке системы с помощью следующей команды:
systemctl start keepalived
systemctl enable 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: <LOOPBACK,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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
firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent
Затем перезагрузите firewalld, чтобы применить изменения:
firewall-cmd –reload
Проверить активность
На этом этапе Nginx и Keepalived установлены и настроены. Пришло время проверить, работает ли высокая доступность Nginx или нет.
Откройте веб-браузер и перейдите по URL-адресу http://your-virtual-ip. Вы должны увидеть следующую страницу:
Теперь остановите службу Nginx на главном узле и проверьте, переключается ли виртуальный IP-адрес с узла 1 на узел 2.
На главном узле остановите службу Nginx с помощью следующей команды:
systemctl stop nginx
Затем войдите в Node2 и проверьте виртуальный IP-адрес, используя следующую команду:
ip add show
Вы должны увидеть свой виртуальный IP-адрес в следующем выводе:
1: lo: <LOOPBACK,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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. Вы должны увидеть страницу Node2:
Заключение
Поздравляем! вы успешно настроили высокодоступный сервер Nginx с Keepalived. Надеюсь, теперь у вас достаточно знаний, чтобы настроить высокодоступный сервер Nginx в производственной среде.