Každý ziskový podnik vyžaduje vysokou dostupnost. Webové stránky a blogy se nijak neliší, protože i menší společnosti a jednotlivci vyžadují, aby jejich stránky zůstaly aktivní, aby si udržely svou pověst.
WordPress je zdaleka nejpopulárnější CMS na světě, který pohání miliony webových stránek od malých po velké. Jak ale můžete zajistit, že váš web zůstane aktivní. Konkrétněji, jak mohu zajistit, aby nedostupnost mé databáze neovlivnila můj web?
V tomto příspěvku na blogu ukážeme, jak dosáhnout převzetí služeb při selhání pro váš web WordPress pomocí ClusterControl.
Nastavení, které použijeme pro tento blog, bude používat Percona Server 5.7. Budeme mít dalšího hostitele, který bude obsahovat aplikaci Apache a Wordpress. Nebudeme se dotýkat části s vysokou dostupností aplikace, ale je to také něco, co chcete mít. ClusterControl budeme používat ke správě databází, abychom zajistili dostupnost, a použijeme třetího hostitele k instalaci a nastavení samotného ClusterControl.
Za předpokladu, že je ClusterControl v provozu, budeme do něj muset importovat naši stávající databázi.
Import databázového klastru pomocí ClusterControl
Přejděte na možnost Importovat existující server/databázi v průvodci nasazením.
Musíme nakonfigurovat připojení SSH, protože to je požadavek pro ClusterControl být schopen spravovat uzly.
Nyní musíme definovat některé podrobnosti o dodavateli, verzi a uživateli root přístup, samotný uzel a jestli chceme, aby ClusterControl spravoval automatické obnovení za nás nebo ne. To je vše, jakmile bude úloha úspěšná, zobrazí se vám na seznamu cluster.
Aby bylo možné nastavit vysoce dostupné prostředí, musíme provést několik akcí. Naše prostředí se bude skládat z...
- Pár Master – Slave
- Dvě instance ProxySQL pro rozdělení čtení/zápisu a detekci topologie
- Dvě instance Keepalived pro správu virtuální IP adresy
Myšlenka je jednoduchá – nasadíme slave do našeho masteru, takže budeme mít druhou instanci pro převzetí služeb při selhání, pokud by master selhal. ClusterControl bude zodpovědná za detekci selhání a bude podporovat podřízenou jednotku v případě, že bude hlavní jednotka nedostupná. ProxySQL bude sledovat topologii replikace a přesměruje provoz na správný uzel - zápisy budou odesílány na hlavní uzel, bez ohledu na to, v kterém uzlu se nachází, čtení lze odeslat pouze na hlavní uzel nebo distribuovat mezi hlavní a podřízené . Nakonec bude Keepalived spojen s ProxySQL a bude poskytovat VIP pro připojení k aplikaci. Tento VIP bude vždy přiřazen k jedné z ProxySQL instancí a Keepalived jej přesune do druhé, pokud „hlavní“ uzel ProxySQL selže.
Když už jsme to všechno řekli, pojďme to nakonfigurovat pomocí ClusterControl. To vše lze provést několika kliknutími. Začneme přidáním otroka.
Přidání slave databáze pomocí ClusterControl
Začneme výběrem úlohy „Add Replication Slave“. Poté jsme požádáni o vyplnění formuláře:
Musíme vybrat předlohu (v našem případě opravdu ne mít mnoho možností), musíme předat IP nebo název hostitele pro nového slave. Pokud bychom měli dříve vytvořené zálohy, mohli bychom jednu z nich použít k zajištění slave. V našem případě to není k dispozici a ClusterControl zajistí slave přímo z mastera. To je vše, úloha se spustí a ClusterControl provede požadované akce. Průběh můžete sledovat na kartě Aktivita.
Po úspěšném dokončení úlohy by měl být slave viditelný na seznam clusterů.
Nyní budeme pokračovat v konfiguraci instancí ProxySQL. V našem případě je prostředí minimální, takže pro zjednodušení umístíme ProxySQL na jeden z uzlů databáze. To však není nejlepší možnost v reálném produkčním prostředí. V ideálním případě by ProxySQL bylo buď umístěno na samostatném uzlu, nebo by bylo umístěno společně s hostiteli ostatních aplikací.
Místo pro zahájení úlohy je Správa -> Loadbalancers.
Zde musíte vybrat, kam se má ProxySQL nainstalovat, předat pověření správce a přidejte uživatele databáze. V našem případě použijeme našeho stávajícího uživatele, protože naše aplikace WordPress jej již používá pro připojení k databázi. Potom musíme vybrat, které uzly použít v ProxySQL (chceme zde master i slave) a dát ClusterControl vědět, zda používáme explicitní transakce nebo ne. To není v našem případě skutečně relevantní, protože po nasazení ProxySQL překonfigurujeme. Když máte tuto možnost povolenou, rozdělení čtení/zápisu nebude povoleno. Jinak ClusterControl nakonfiguruje ProxySQL pro rozdělení čtení/zápisu. V našem minimálním nastavení bychom se měli vážně zamyslet, jestli chceme, aby došlo k rozdělení čtení/zápisu. Pojďme to analyzovat.
Výhody a nevýhody čtení/zápisu Spit v ProxySQL
Hlavní výhodou použití rozdělení čtení/zápisu je, že veškerý provoz SELECT bude distribuován mezi master a slave. To znamená, že zatížení uzlů bude nižší a doba odezvy by také měla být nižší. To zní dobře, ale mějte na paměti, že pokud jeden uzel selže, druhý uzel bude muset být schopen pojmout veškerý provoz. Automatizované převzetí služeb při selhání nemá smysl, pokud ztráta jednoho uzlu znamená, že druhý uzel bude přetížen a de facto také nedostupný.
Může mít smysl rozložit zátěž, pokud máte více podřízených zařízení – ztráta jednoho uzlu z pěti má menší dopad než ztráta jednoho ze dvou. Bez ohledu na to, pro co se rozhodnete, můžete chování snadno změnit tak, že přejdete do uzlu ProxySQL a kliknete na kartu Pravidla.
Nezapomeňte se podívat na pravidlo 200 (to, které zachycuje všechny příkazy SELECT ). Na níže uvedeném snímku obrazovky můžete vidět, že cílová skupina hostitelů je 20, což znamená, že všechny uzly v clusteru – rozdělení čtení/zápisu a škálování je povoleno. Můžeme to snadno zakázat úpravou tohoto pravidla a změnou cílové skupiny hostitelů na 10 (tu, která obsahuje hlavní).
Pokud byste chtěli povolit rozdělení čtení/zápisu, můžete snadno udělejte to opětovnou úpravou tohoto pravidla dotazu a nastavením cílové skupiny hostitelů zpět na 20.
Nyní nasadíme druhý ProxySQL.
Chcete-li se vyhnout opětovnému procházení všech možností konfigurace, můžeme použít „Importovat konfiguraci ” a jako zdroj vyberte naše stávající ProxySQL.
Až bude tato úloha dokončena, musíme ještě provést poslední krok v nastavení našeho prostředí. Musíme nasadit Keepalived nad instance ProxySQL.
Nasazení Keepalived nad instancemi ProxySQL
Zde jsme jako typ nástroje pro vyrovnávání zatížení vybrali ProxySQL, předali jsme obě instance ProxySQL pro Keepalved k instalaci na a zadali jsme naše VIP a síťové rozhraní.
Jak vidíte, nyní máme celé nastavení hotové a připravené. Máme VIP 10.0.0.111, který je přiřazen k jedné z instancí ProxySQL. Instance ProxySQL přesměrují náš provoz na správné backendové uzly MySQL a ClusterControl bude v případě potřeby dohlížet na prostředí, které provádí převzetí služeb při selhání. Poslední akcí, kterou musíme udělat, je překonfigurovat Wordpress tak, aby používal virtuální IP pro připojení k databázi.
K tomu musíme upravit wp-config.php a změnit proměnnou DB_HOST na naši virtuální IP:
/** MySQL hostname */
define( 'DB_HOST', '10.0.0.111' );
Závěr
Od této chvíle se bude Wordpress připojovat k databázi pomocí VIP a ProxySQL. V případě, že hlavní uzel selže, ClusterControl provede převzetí služeb při selhání.
Jak vidíte, byl zvolen nový master a ProxySQL také ukazuje na nový master v hostitelské skupině 10.
Doufáme, že vám tento příspěvek na blogu poskytne představu o tom, jak navrhnout vysoce dostupné databázové prostředí pro webovou stránku Wordpress a jak lze použít ClusterControl k nasazení všech jeho prvků.