sql >> Databáze >  >> RDS >> MariaDB

Jak nasadit produkční cluster MySQL nebo MariaDB Galera pomocí ClusterControl

Nasazení databázového clusteru není žádná velká věda – existuje mnoho návodů, jak na to. Ale jak víte, že to, co jste právě nasadili, je připraveno k výrobě? Ruční nasazení může být také únavné a opakované. V závislosti na počtu uzlů v clusteru mohou být kroky nasazení časově náročné a náchylné k chybám. Nástroje pro správu konfigurace jako Puppet, Chef a Ansible jsou oblíbené při nasazování infrastruktury, ale pro stavové databázové clustery je potřeba provádět značné skriptování, aby bylo možné zvládnout nasazení celého zásobníku HA databáze. Kromě toho musí být zvolená šablona/modul/kuchařka/role pečlivě otestována, než jí můžete důvěřovat jako součást automatizace vaší infrastruktury. Změny verze vyžadují, aby byly skripty aktualizovány a znovu otestovány.

Dobrou zprávou je, že ClusterControl automatizuje nasazení celého zásobníku – a také zdarma! Nasadili jsme tisíce produkčních klastrů a přijali jsme řadu opatření, abychom zajistili, že budou připraveny na produkční provoz. Jsou podporovány různé topologie, od replikace master-slave po klastr Galera, NDB a InnoDB, s různými proxy databázovými servery navrchu.

Zásobník vysoké dostupnosti nasazený prostřednictvím ClusterControl se skládá ze tří vrstev:

  • Databázová vrstva (např. Galera Cluster)
  • Reverzní proxy vrstva (např. HAProxy nebo ProxySQL)
  • Keepalived vrstva, která s využitím virtuální IP zajišťuje vysokou dostupnost proxy vrstvy

V tomto blogu vám ukážeme, jak nasadit produkční Galera Cluster s kompletními nástroji pro vyrovnávání zatížení pro nastavení vysoké dostupnosti. Kompletní nastavení se skládá ze 6 hostitelů:

  • 1 hostitel – ClusterControl (nasazení, monitorování, server pro správu)
  • 3 hostitelé – MySQL Galera Cluster
  • 2 hostitelé – Reverzní proxy fungují jako vyvažovači zátěže před clusterem.

Následující diagram znázorňuje náš konečný výsledek po dokončení nasazení:

Předpoklady

ClusterControl musí být umístěn na nezávislém uzlu, který není součástí clusteru. Stáhněte si ClusterControl a stránka pro vás vygeneruje jedinečnou licenci a zobrazí kroky k instalaci ClusterControl:

$ wget -O install-cc https://severalnines.com/scripts/install-cc
$ chmod +x install-cc
$ ./install-cc # as root or sudo user

Postupujte podle pokynů, kde budete vedeni nastavením serveru MySQL, heslem root MySQL na uzlu ClusterControl, heslem cmon pro použití ClusterControl atd. Po dokončení instalace byste měli dostat následující řádek:

Determining network interfaces. This may take a couple of minutes. Do NOT press any key.
Public/external IP => http://{public_IP}/clustercontrol
Installation successful. If you want to uninstall ClusterControl then run install-cc --uninstall.

Poté na serveru ClusterControl vygenerujte klíč SSH, který později použijeme k nastavení SSH bez hesla. V systému můžete použít libovolného uživatele, ale musí mít schopnost provádět operace superuživatele (sudoer). V tomto příkladu jsme vybrali uživatele root:

$ whoami
root
$ ssh-keygen -t rsa

Nastavte SSH bez hesla pro všechny uzly, které chcete sledovat/spravovat prostřednictvím ClusterControl. V tomto případě to nastavíme na všech uzlech v zásobníku (včetně samotného uzlu ClusterControl). V uzlu ClusterControl spusťte následující příkazy a na výzvu zadejte heslo uživatele root:

$ ssh-copy-id [email protected] # clustercontrol
$ ssh-copy-id [email protected] # galera1
$ ssh-copy-id [email protected] # galera2
$ ssh-copy-id [email protected] # galera3
$ ssh-copy-id [email protected] # proxy1
$ ssh-copy-id [email protected] # proxy2

Poté můžete ověřit, zda funguje spuštěním následujícího příkazu v uzlu ClusterControl:

$ ssh [email protected] "ls /root"

Ujistěte se, že vidíte výsledek výše uvedeného příkazu, aniž byste museli zadávat heslo.

Nasazení clusteru

ClusterControl podporuje všechny dodavatele pro Galera Cluster (Codership, Percona a MariaDB). Existují drobné rozdíly, které mohou ovlivnit vaše rozhodnutí při výběru dodavatele. Pokud byste se chtěli dozvědět o rozdílech mezi nimi, podívejte se na náš předchozí příspěvek na blogu – Galera Cluster Comparison – Codership vs Percona vs MariaDB.

Pro produkční nasazení je tříuzlový Galera Cluster minimum, které byste měli mít. Vždy jej můžete škálovat později, jakmile je cluster nasazen, ručně nebo prostřednictvím ClusterControl. Otevřeme naše uživatelské rozhraní ClusterControl na https://192.168.55.160/clustercontrol a vytvoříme prvního administrátora. Poté přejděte do horní nabídky a klikněte na Deploy -> MySQL Galera a zobrazí se vám následující dialog:

Existují dva kroky, první je „Obecné a SSH nastavení“. Zde musíme nakonfigurovat uživatele SSH, kterého by měl ClusterControl používat pro připojení k databázovým uzlům, spolu s cestou ke klíči SSH (vygenerovaným v části Předpoklady) a také SSH portem databázových uzlů. ClusterControl předpokládá, že všechny databázové uzly jsou nakonfigurovány se stejným uživatelem SSH, klíčem a portem. Dále klastru pojmenujte, v tomto případě použijeme "MySQL Galera Cluster 5.7". Tuto hodnotu lze později změnit. Poté vyberte možnosti, které instruují ClusterControl k instalaci požadovaného softwaru, deaktivaci brány firewall a také deaktivaci modulu pro vylepšení zabezpečení v konkrétní distribuci Linuxu. Všechny z nich se doporučuje zapnout, aby se maximalizoval potenciál úspěšného nasazení.

Klikněte na Pokračovat a zobrazí se následující dialog:

V dalším kroku musíme nakonfigurovat databázové servery – dodavatele, verzi, datový adresář, port atd. – které jsou docela samozřejmé. "Konfigurační šablona" je název souboru šablony v /usr/share/cmon/templates uzlu ClusterControl. "Úložiště" je způsob, jakým by měl ClusterControl konfigurovat úložiště v uzlu databáze. Ve výchozím nastavení použije úložiště dodavatele a nainstaluje nejnovější verzi poskytovanou úložištěm. V některých případech však může mít uživatel již existující úložiště zrcadlené z původního úložiště z důvodu omezení bezpečnostní politiky. Nicméně ClusterControl většinu z nich podporuje, jak je popsáno v uživatelské příručce v části Úložiště.

Nakonec přidejte IP adresu nebo název hostitele (musí být platný FQDN) uzlů databáze. Vlevo od uzlu uvidíte zelenou ikonu zaškrtnutí, což znamená, že ClusterControl se dokázal připojit k uzlu přes SSH bez hesla. Nyní můžete jít. Kliknutím na Deploy zahájíte nasazení. Dokončení může trvat 15 až 20 minut. Průběh nasazení můžete sledovat pod Aktivita (horní nabídka) -> Úlohy -> Vytvořit cluster :

Jakmile je nasazení dokončeno, v tomto bodě lze naši architekturu ilustrovat následovně:

Nasazení nástrojů pro vyrovnávání zatížení

V Galera Cluster jsou všechny uzly stejné - každý uzel má stejnou roli a stejnou datovou sadu. V případě selhání uzlu tedy v rámci clusteru nedochází k žádnému převzetí služeb při selhání. Pouze strana aplikace vyžaduje převzetí služeb při selhání, aby se vynechaly nefunkční uzly, když je cluster rozdělen. Proto se důrazně doporučuje umístit na Galera Cluster nástroje pro vyrovnávání zatížení, abyste:

  • Sjednoťte více koncových bodů databáze do jednoho koncového bodu (hostitel pro vyrovnávání zatížení nebo virtuální IP adresa jako koncový bod).
  • Vyvažte databázová připojení mezi servery backend databáze.
  • Provádějte kontroly stavu a předávejte databázová připojení pouze zdravým uzlům.
  • Přesměrujte/přepište/zablokujte problematické (špatně napsané) dotazy předtím, než zasáhnou databázové servery.

Existují tři hlavní možnosti reverzních proxy pro Galera Cluster – HAProxy, MariaDB MaxScale nebo ProxySQL – všechny lze nainstalovat a nakonfigurovat automaticky pomocí ClusterControl. V tomto nasazení jsme vybrali ProxySQL, protože kontroluje vše výše uvedené a navíc rozumí protokolu MySQL backendových serverů.

V této architektuře chceme použít dva servery ProxySQL, abychom eliminovali jakékoli selhání jednoho bodu (SPOF) na vrstvě databáze, které budou spojeny pomocí plovoucí virtuální IP adresy. To si vysvětlíme v další části. Jeden uzel bude fungovat jako aktivní proxy a druhý jako hot-standby. Kterýkoli uzel, který v daném čase drží virtuální IP adresu, je aktivním uzlem.

Chcete-li nasadit první server ProxySQL, jednoduše přejděte do nabídky akcí clusteru (pravá strana souhrnného panelu) a klikněte na Přidat nástroj pro vyrovnávání zatížení -> ProxySQL -> Nasadit ProxySQL a uvidíte následující:

Opět platí, že většina polí je samovysvětlující. V sekci "Uživatel databáze" funguje ProxySQL jako brána, přes kterou se vaše aplikace připojuje k databázi. Aplikace se ověřuje proti ProxySQL, proto musíte do ProxySQL přidat všechny uživatele ze všech backendových uzlů MySQL spolu s jejich hesly. Z ClusterControl můžete buď vytvořit nového uživatele, kterého bude aplikace používat – můžete se rozhodnout o jeho jméně, hesle, přístupu ke kterým databázím a jaká oprávnění MySQL daný uživatel bude mít. Takový uživatel bude vytvořen na straně MySQL i ProxySQL. Druhou možností, vhodnější pro stávající infrastruktury, je využití stávajících uživatelů databáze. Musíte zadat uživatelské jméno a heslo a takový uživatel bude vytvořen pouze na ProxySQL.

Poslední sekce, "Implicitní transakce", ClusterControl nakonfiguruje ProxySQL tak, aby posílal veškerý provoz na master, pokud jsme zahájili transakci s SET autocommit=0. V opačném případě, pokud k vytvoření transakce použijete BEGIN nebo START TRANSACTION, ClusterControl nakonfiguruje rozdělení čtení/zápisu v pravidlech dotazu. To má zajistit, že ProxySQL bude správně zpracovávat transakce. Pokud nemáte ponětí, jak to vaše aplikace dělá, můžete si vybrat to druhé.

Opakujte stejnou konfiguraci pro druhý uzel ProxySQL, kromě hodnoty "Adresa serveru", která je 192.168.55.182. Po dokončení budou oba uzly uvedeny na kartě "Nodes" -> ProxySQL, kde je můžete sledovat a spravovat přímo z uživatelského rozhraní:

V tuto chvíli naše architektura nyní vypadá takto:

Pokud se chcete dozvědět více o ProxySQL, podívejte se na tento tutoriál – Vyrovnávání zatížení databáze pro MySQL a MariaDB s ProxySQL – Návod.

Nasazení virtuální IP adresy

Poslední částí je virtuální IP adresa. Bez něj by byly naše nástroje pro vyrovnávání zatížení (reverzní proxy) slabým článkem, protože by byly jediným bodem selhání – pokud aplikace nemá schopnost automaticky přesměrovat neúspěšná databázová připojení na jiný nástroj pro vyrovnávání zatížení. Přesto je dobré je sjednotit pomocí virtuální IP adresy a zjednodušit koncový bod připojení k databázové vrstvě.

Z uživatelského rozhraní ClusterControl -> Přidat Load Balancer -> Keepalived -> Nasadit Keepalived a vyberte dva hostitele ProxySQL, které jsme nasadili:

Určete také virtuální IP adresu a síťové rozhraní pro vazbu IP adresy. Síťové rozhraní musí existovat na obou uzlech ProxySQL. Po nasazení byste v souhrnném pruhu clusteru měli vidět následující zelené zaškrtnutí:

V tomto bodě lze naši architekturu ilustrovat následovně:

Náš databázový cluster je nyní připraven k produkčnímu použití. Můžete do ní importovat svou stávající databázi nebo vytvořit novou databázi. Pokud platnost zkušební licence nevypršela, můžete použít funkci Schemas and Users Management.

Chcete-li pochopit, jak ClusterControl konfiguruje Keepalived, podívejte se na tento blogový příspěvek Jak ClusterControl konfiguruje virtuální IP a co očekávat během selhání.

Připojení k databázovému clusteru

Z hlediska aplikace a klienta se potřebují připojit k 192.168.55.180 na portu 6033, což je virtuální IP adresa plovoucí nad nástroji pro vyrovnávání zatížení. Například konfigurace databáze Wordpress bude vypadat nějak takto:

/** The name of the database for WordPress */
define( 'DB_NAME', 'wp_myblog' );

/** MySQL database username */
define( 'DB_USER', 'wp_myblog' );

/** MySQL database password */
define( 'DB_PASSWORD', 'mysecr3t' );

/** MySQL hostname - virtual IP address with ProxySQL load-balanced port*/
define( 'DB_HOST', '192.168.55.180:6033' );

Pokud byste chtěli přistupovat k databázovému clusteru přímo a obejít nástroj pro vyrovnávání zatížení, stačí se připojit k portu 3306 hostitelů databáze. To obvykle vyžadují zaměstnanci DBA pro administraci, správu a odstraňování problémů. S ClusterControl lze většinu těchto operací provádět přímo z uživatelského rozhraní.

Poslední myšlenky

Jak je ukázáno výše, nasazení databázového clusteru již není obtížným úkolem. Po nasazení je k dispozici celá sada bezplatných monitorovacích funkcí a také komerční funkce pro správu zálohování, převzetí služeb při selhání/obnovu a další. Rychlé nasazení různých typů klastrových/replikačních topologií může být užitečné při hodnocení vysoce dostupných databázových řešení a jejich přizpůsobení vašemu konkrétnímu prostředí.


  1. Jak udělat RAND() deterministický v SQL Server

  2. Automatizace databáze pomocí Puppet:Nasazení MySQL a replikace MariaDB

  3. Python REST API s Flask, Connexion a SQLAlchemy – část 3

  4. Vytvořte sloupec kumulativního součtu v MySQL