Vyhledávání na webu

Jak konfigurovat a udržovat vysokou dostupnost/shlukování v Linuxu


Vysoká dostupnost (HA) jednoduše odkazuje na kvalitu systému, který funguje nepřetržitě bez selhání po dlouhou dobu. Řešení HA lze implementovat pomocí hardwaru a/nebo softwaru a jedním z běžných řešení implementace HA je shlukování.

Ve výpočetní technice se cluster skládá ze dvou nebo více počítačů (běžně známých jako uzly nebo členové), které spolupracují na provedení úkolu. V takovém nastavení poskytuje službu pouze jeden uzel, přičemž sekundární uzel (uzly) převezme řízení, pokud selže.

Clustery se dělí na čtyři hlavní typy:

  • Úložiště: poskytuje konzistentní obraz systému souborů napříč servery v clusteru, což serverům umožňuje současně číst a zapisovat do jednoho sdíleného systému souborů.
  • Vysoká dostupnost: eliminujte jednotlivé body selhání a selhání služeb z jednoho uzlu clusteru do druhého v případě, že uzel přestane fungovat.
  • Vyrovnávání zátěže: odesílá požadavky na síťové služby do více uzlů clusteru, aby se vyrovnalo zatížení požadavků mezi uzly clusteru.
  • Vysoký výkon: provádějte paralelní nebo souběžné zpracování, čímž pomáháte zlepšit výkon aplikací.

Dalším široce používaným řešením poskytování HA je replikace (konkrétně replikace dat). Replikace je proces, při kterém lze jednu nebo více (sekundárních) databází udržovat v synchronizaci s jedinou primární (nebo hlavní) databází.

K nastavení clusteru potřebujeme alespoň dva servery. Pro účely této příručky použijeme dva linuxové servery:

  • Uzel1: 192.168.10.10
  • Uzel2: 192.168.10.11

V tomto článku si ukážeme základy toho, jak nasadit, nakonfigurovat a udržovat vysokou dostupnost/clustering v Ubuntu 16.04/18.04 a CentOS 7. Ukážeme si, jak přidat službu Nginx HTTP do clusteru.

Konfigurace místního nastavení DNS na každém serveru

Aby spolu oba servery komunikovaly, musíme na obou serverech nakonfigurovat příslušná místní nastavení DNS v souboru /etc/hosts.

Otevřete a upravte soubor pomocí svého oblíbeného editoru příkazového řádku.

sudo vim /etc/hosts  

Přidejte následující položky se skutečnými IP adresami vašich serverů.

192.168.10.10	node1.example.com
192.168.10.11 	node2.example.com

Uložte změny a zavřete soubor.

Instalace webového serveru Nginx

Nyní nainstalujte webový server Nginx pomocí následujících příkazů.

sudo apt install nginx  [On Ubuntu]
sudo yum install epel-release && sudo yum install nginx [On CentOS 7]

Po dokončení instalace zatím spusťte službu Nginx a povolte její automatické spouštění při spouštění, poté zkontrolujte, zda je v provozu pomocí příkazu systemctl.
Na Ubuntu by se služba měla spustit automaticky ihned po dokončení předkonfigurace balíčku, můžete ji jednoduše povolit.

sudo systemctl enable nginx
sudo systemctl start nginx
sudo systemctl status nginx

Po spuštění služby Nginx musíme vytvořit vlastní webové stránky pro identifikaci a testování operací na obou serverech. Upravíme obsah výchozí indexové stránky Nginx, jak je znázorněno.

echo "This is the default page for node1.example.com" | sudo tee /usr/share/nginx/html/index.html 	#VPS1
echo "This is the default page for node2.example.com" | sudo tee /usr/share/nginx/html/index.html 	#VPS2

Instalace a konfigurace Corosync a Pacemaker

Dále musíme na každý uzel nainstalovat Pacemaker, Corosync a Pcs následovně.

sudo apt install corosync pacemaker pcs	#Ubuntu 
sudo yum install corosync pacemaker pcs	#CentOS 

Po dokončení instalace se ujistěte, že na obou serverech běží démon pcs.

sudo systemctl enable pcsd
sudo systemctl start pcsd
sudo systemctl status pcsd

Vytvoření Clusteru

Během instalace se vytvoří systémový uživatel s názvem “hacluster ”. Musíme tedy nastavit autentizaci potřebnou pro pc. Začněme vytvořením nového hesla pro uživatele „hacluster“, musíme používat stejné heslo na všech serverech:

sudo passwd hacluster

Dále na jednom ze serverů (Node1) spusťte následující příkaz k nastavení ověřování potřebného pro pcs.

sudo pcs cluster auth node1.example.com node2.example.com -u hacluster -p password_here --force

Nyní vytvořte cluster a naplňte jej některými uzly (název clusteru nesmí přesáhnout 15 znaků, v tomto příkladu jsme použili examplecluster) na serveru Node1.

sudo pcs cluster setup --name examplecluster node1.example.com node2.example.com 

Nyní povolte cluster při spouštění a spusťte službu.

sudo pcs cluster enable --all
sudo pcs cluster start --all

Nyní zkontrolujte, zda je klastrová služba spuštěna a běží pomocí následujícího příkazu.

sudo pcs status
OR
sudo crm_mon -1

Z výstupu výše uvedeného příkazu můžete vidět, že se nezobrazuje varování o žádných zařízeních STONITH, ale STONITH je v clusteru stále povoleno. Kromě toho nebyly nakonfigurovány žádné prostředky/služby clusteru.

Konfigurace možností clusteru

První možností je deaktivovat STONITH (nebo Shoot The Other Node In The Head), implementaci šermu na Pacemaker.

Tato součást pomáhá chránit vaše data před poškozením při souběžném přístupu. Pro účely této příručky jej zakážeme, protože jsme nenakonfigurovali žádná zařízení.

Chcete-li vypnout STONITH, spusťte následující příkaz:

sudo pcs property set stonith-enabled=false

Dále také ignorujte zásadu kvora spuštěním následujícího příkazu:

sudo pcs property set no-quorum-policy=ignore

Po nastavení výše uvedených možností spusťte následující příkaz a zobrazte seznam vlastností a ujistěte se, že výše uvedené možnosti, stonith a zásady kvora jsou zakázány.

sudo pcs property list

Přidání Resource/Cluster Service

V této části se podíváme na to, jak přidat prostředek clusteru. Nakonfigurujeme plovoucí IP, což je IP adresa, kterou lze okamžitě přesunout z jednoho serveru na druhý v rámci stejné sítě nebo datového centra. Stručně řečeno, plovoucí IP je technický běžný termín používaný pro IP adresy, které nejsou vázány striktně na jediné rozhraní.

V tomto případě bude použit pro podporu převzetí služeb při selhání v clusteru s vysokou dostupností. Mějte na paměti, že plovoucí IP adresy nejsou jen pro případy převzetí služeb při selhání, mají několik dalších případů použití. Cluster musíme nakonfigurovat tak, aby plovoucí IP v daném okamžiku „vlastnil“ nebo na ni odpovídal pouze aktivní člen clusteru.

Přidáme dva klastrové zdroje: zdroj plovoucí IP adresy nazvaný „floating_ip“ a zdroj pro webový server Nginx s názvem „http_server“.

Nejprve začněte přidáním floating_ip následovně. V tomto příkladu je naše plovoucí IP adresa 192.168.10.20.

sudo pcs resource create floating_ip ocf:heartbeat:IPaddr2 ip=192.168.10.20 cidr_netmask=24 op monitor interval=60s

kde:

  • floating_ip: je název služby.
  • ocf:heartbeat:IPaddr2 ”: říká Pacemakeru, který skript má použít, v tomto případě IPaddr2, ve kterém jmenném prostoru se nachází (pacemaker) a jakému standardu odpovídá ocf.
  • op monitor interval=60s “: dává kardiostimulátoru pokyn, aby každou minutu zkontroloval stav této služby voláním akce monitoru agenta.

Poté přidejte druhý prostředek s názvem http_server. Zde je agentem služby ocf:heartbeat:nginx.

sudo pcs resource create http_server ocf:heartbeat:nginx configfile="/etc/nginx/nginx.conf" op monitor timeout="20s" interval="60s"

Po přidání klastrových služeb zadejte následující příkaz ke kontrole stavu prostředků.

sudo pcs status resources

Při pohledu na výstup příkazu byly uvedeny dva přidané zdroje: „floating_ip “ a „http_server“. Služba floating_ip je vypnutá, protože primární uzel je v provozu.

Pokud máte ve svém systému povolenou bránu firewall, musíte přes bránu firewall povolit veškerý provoz na Nginx a všechny služby vysoké dostupnosti, aby mezi uzly byla správná komunikace:

-------------- CentOS 7 -------------- 
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=high-availability		
sudo firewall-cmd --reload

-------------- Ubuntu -------------- 
sudo ufw allow http	
sudo ufw allow high-availability						
sudo ufw reload 

Testování vysoké dostupnosti/shlukování

Posledním a důležitým krokem je otestovat, zda naše nastavení vysoké dostupnosti funguje. Otevřete webový prohlížeč a přejděte na adresu 192.168.10.20, měli byste vidět výchozí stránku Nginx z node2.example.com, jak je znázorněno na snímku obrazovky.

Chcete-li simulovat selhání, spusťte následující příkaz k zastavení clusteru na node2.example.com.

sudo pcs cluster stop http_server

Poté znovu načtěte stránku na 192.168.10.20, nyní byste měli přistupovat k výchozí webové stránce Nginx z node1.example.com.

Alternativně můžete simulovat chybu tak, že službě řeknete, aby se zastavila přímo, bez zastavení clusteru na jakémkoli uzlu, pomocí následujícího příkazu na jednom z uzlů:

 
sudo crm_resource --resource http_server --force-stop 

Poté musíte spustit crm_mon v interaktivním režimu (výchozí), během intervalu sledování 2 minut byste měli být schopni vidět oznámení clusteru, že http_server selhal, a přesunout se to do jiného uzlu.

Aby vaše klastrové služby fungovaly efektivně, možná budete muset nastavit některá omezení. Můžete se podívat na manuálovou stránku pcs (man pcs) pro seznam všech příkazů použití.

Další informace o Corosync a Pacemaker najdete na: https://clusterlabs.org/

souhrn

V této příručce jsme ukázali základy toho, jak nasadit, nakonfigurovat a udržovat vysokou dostupnost/clusterování/replikaci v Ubuntu 16.04/18.04 a CentOS 7. Ukázali jsme, jak přidat službu Nginx HTTP do clusteru. Máte-li nějaké nápady, které byste mohli sdílet nebo dotazy, použijte formulář pro zpětnou vazbu níže.