GNU/Linux >> Znalost Linux >  >> Linux

Jak nastavit vysoce dostupný NGINX s KeepAlived v Linuxu

Jak víme, NGINX je vysoce hodnocený webový server, který lze také použít jako reverzní proxy, vyrovnávání zatížení a mezipaměť HTTP. V tomto článku si ukážeme, jak nastavit vysoce dostupný (HA) webový server NGINX s funkcí keepalived v Linuxu. Keepalived funguje na protokolu VRRP (Virtual Router Redundancy Protocol), který umožňuje přepnutí jedné statické IP při selhání mezi dvěma systémy Linux.

Níže jsou uvedeny podrobnosti o mé laboratoři pro NGINX HA:

  • Uzel 1 – 192.168.1.130 – nginx1.example.com – minimální CentOS 8 / RHEL 8
  • Uzel 2 – 192.168.1.140 – nginx2.example.com – minimální CentOS 8 / RHEL 8
  • Virtuální IP (VIP) – 192.168.1.150
  • uživatel sudo pkumar
  • Firewall je povolen
  • SELinux běží

Pojďme se vrhnout na kroky instalace a konfigurace,

Krok 1) Nainstalujte webový server NGINX z příkazového řádku

Balíček NGINX je k dispozici ve výchozích úložištích CentOS 8 / RHEL 8, takže spusťte pod příkazem dnf na obou uzlech a nainstalujte webový server nginx

$ sudo dnf install -y nginx

Pro CentOS 7 / RHEL 7

Balíček NGINX není k dispozici ve výchozích repozitářích CentOS 7 / RHEL 7, takže pro jeho instalaci musíme nejprve povolit úložiště epel. Spusťte následující příkaz na obou uzlech

$ sudo yum install epel-release -y
$ sudo yum install -y nginx

Pro Ubuntu / Debian

Pro distribuce Linuxu založené na Debianu je balíček webového serveru nginx dostupný ve výchozích úložištích balíčků, takže pro instalaci nginx spusťte

$ sudo apt update
$ sudo apt install -y nginx

Krok 2) Nakonfigurujte vlastní soubor index.html pro oba uzly

Vytvořme vlastní soubor index.html pro oba uzly, abychom mohli snadno identifikovat, který server obsluhuje webovou stránku při přístupu přes virtuální IP.

Pro uzel 1 spusťte následující příkaz echo,

[[email protected] ~]$ echo "<h1>This is NGINX Web Server from Node 1</h1>" | sudo tee /usr/share/nginx/html/index.html

Pro uzel 2 spusťte

[[email protected] ~]$ echo "<h1>This is NGINX Web Server from Node 2</h1>" | sudo tee /usr/share/nginx/html/index.html

Krok 3) Povolte port NGINX ve firewallu a spusťte jeho službu

V případě, že je firewall povolen a běží na obou uzlech, povolte port 80 provedením následujících příkazů,

Pro systém CentOS / RHEL

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd –reload

Pro systém Ubuntu / Debian

$ sudo ufw allow 'Nginx HTTP'

Spusťte a povolte službu nginx spuštěním příkazů pod příkazy na obou uzlech

$ sudo systemctl start nginx
$ sudo systemctl enable nginx

Otestujte NGINX webový server obou uzlů spuštěním následujícího příkazu curl zvenčí

$ curl http://192.168.1.130
<h1>This is NGINX Web Server from Node 1</h1>
$ curl http://192.168.1.140
<h1>This is NGINX Web Server from Node 2</h1>

Perfektní, výše uvedený výstup příkazu potvrzuje, že nginx běží a je přístupný zvenčí pomocí systémové ip adresy.

Krok 4) Nainstalujte a nakonfigurujte Keepalived

U systémů CentOS / RHEL je balíček keepalived a jeho závislosti dostupné ve výchozích úložištích balíčků, takže jeho instalace je přímočará, stačí spustit pod příkazem na obou uzlech.

$ sudo dnf install -y keepalived       // CentOS 8/ RHEL 8
$ sudo yum install -y keepalived      // CentOS 7 / RHEL 7

Pro systém Ubuntu / Debian

$ apt install -y keepalived

Jakmile je keepalived nainstalován, nakonfigurujte jej úpravou jeho konfiguračního souboru ‘/etc/keepalived/keepalived.conf’. Uzel 1 ponecháme jako hlavní uzel a uzel 2 jako záložní uzel.

Proveďte zálohu konfiguračního souboru,

[[email protected] ~]$ sudo cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf-org

Nahraďte obsah souboru keepalived.conf níže:

[[email protected] ~]$ echo -n | sudo tee /etc/keepalived/keepalived.conf
[[email protected] ~]$ sudo vi /etc/keepalived/keepalived.conf

Vložte následující obsah

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 enp0s3
  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.150/24
  }
  track_script {
    check_nginx
  }
  authentication {
    auth_type AH
    auth_pass secret
  }
}

Nyní vytvořte skript s následujícím obsahem, který zkontroluje, zda služba nginx běží nebo ne. Keepalived vždy zkontroluje výstup skriptu check_nginx.sh, pokud zjistí, že služba nginx je zastavena nebo neodpovídá, přesune virtuální ip adresu na záložní uzel.

[[email protected] ~]$ sudo vi /bin/check_nginx.sh
#!/bin/sh
if [ -z "`pidof nginx`" ]; then
  exit 1
fi

uložte a zavřete soubor a nastavte požadovaná oprávnění pomocí příkazu chmod,

[[email protected] ~]$ sudo chmod 755 /bin/check_nginx.sh

Nyní zkopírujte soubory keepalived.conf a check_nginx.sh z uzlu 1 do uzlu 2 pomocí následujícího příkazu scp.

[[email protected] ~]$ scp /etc/keepalived/keepalived.conf [email protected]:/etc/keepalived/
[[email protected] ~]$ scp /bin/check_nginx.sh [email protected]0:/bin/

Jakmile jsou soubory zkopírovány, přihlaste se do Node 2 a proveďte několik změn v souboru keepalived.conf. Změňte stav z MASTER na BACKUP a snižte prioritu nastavením na 100. Po provedení změn bude keepalived.conf na Node 2 vypadat takto,

V případě, že je spuštěn firewall OS, povolte VRRP spuštěním následujících příkazů,

Poznámka – Proveďte tyto příkazy na obou uzlech

Pro systémy CentOS / RHEL

$ sudo firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent
$ sudo firewall-cmd --reload

Pro systémy Ubuntu / Debian

Povolte VRRP provedením následujících akcí z hlavního uzlu (Uzel 1), spusťte

$ sudo ufw allow to 224.0.0.18 comment 'VRRP Broadcast'
$ sudo ufw allow from 192.168.1.140 comment 'VRRP Router'

Ze záložního / podřízeného uzlu (Uzel 2)

$ sudo ufw allow to 224.0.0.18 comment 'VRRP Broadcast'
$ sudo ufw allow from 192.168.1.130 comment 'VRRP Router'

Nyní konečně spusťte službu keepalived spuštěním příkazů systemctl z obou uzlů

$ sudo systemctl start keepalived
$ sudo systemctl enable keepalived

Ověřte službu keepalived spuštěním níže:

$ sudo systemctl status keepalived

Perfektní, nyní ověřte stav VIP (virtuální IP adresa) na hlavním uzlu, v našem případě je VIP 192.168.1.130

$ ip add show

Výše uvedený výstup potvrzuje, že VIP je nakonfigurován na hlavním uzlu na jeho rozhraní enp0s3. Pojďme tedy v dalším kroku provést keepalved a nginx testování.

Krok 5) Keepalived a testování NGINX

Chcete-li provést testování, zkuste přistupovat k webovému serveru nginx s virtuální IP (192.168.1.150), aktuálně by nám měl ukazovat stránku nginx uzlu 1.

Otevřete prohlížeč wen a zadejte „http://192.168.1.150“ a stiskněte Enter,

Nyní zkuste zastavit službu NGINX na uzlu 1 a zjistěte, zda je virtuální IP přepnuta z uzlu 1 na uzel 2, a poté zkuste přistupovat na webovou stránku nginx pomocí VIP (192.168.1.150) a tentokrát by nám měla ukázat stránku nginx z uzlu 2 .

[[email protected] ~]$ sudo systemctl stop nginx
[[email protected] ~]$ ip add show

Přihlaste se k uzlu 2 a spusťte příkaz ip, abyste viděli ověření virtuální IP adresy,

[[email protected] ~]$ ip add show

Nyní zkusme přistupovat na webovou stránku pomocí virtuální IP,

Skvělé, výše potvrzuje, že jsme úspěšně nastavili vysoce dostupný webový server NGINX s funkcí keepalived. To je z tohoto článku vše, podělte se prosím o své názory, komentáře a návrhy.


Linux
  1. Jak nainstalovat webový server Nginx na Linux

  2. Jak nainstalovat ModSecurity s Nginx na Rocky Linux 8

  3. Jak nainstalovat a nastavit MERN Stack s Nginx na Ubuntu 20.04

  1. Jak nastavit přihlášení SSH bez hesla v Linuxu pomocí klíčů

  2. Jak nastavit oprávnění Sudo pro uživatele v Linuxu

  3. Jak nastavit jednoduchou aplikaci nodejs s nginx a pm2 na serveru ubuntu

  1. Jak nastavit vysoce dostupný NGINX s KeepAlived na CentOS 8

  2. Jak nastavit ukončení Varnish SSL s webovým serverem Nginx na Rocky Linux 8

  3. Jak nainstalovat phpMyAdmin s Nginx na Linux Mint 19 / Linux Mint 18