ClusterControl je skvělý nástroj pro nasazení a správu databázových clusterů – pokud používáte MySQL, můžete snadno nasadit clustery založené na tradiční replikaci MySQL master-slave, Galera Cluster nebo MySQL NDB Cluster. K dosažení vysoké dostupnosti však nasazení clusteru nestačí. Uzly mohou (a s největší pravděpodobností budou) selhat a váš systém se musí těmto změnám přizpůsobit.
Tato adaptace může probíhat na různých úrovních. V rámci aplikace můžete implementovat nějakou logiku - kontrolovala by stav uzlů clusteru a směrovala provoz na ty, které jsou v danou chvíli dosažitelné. Můžete také vytvořit proxy vrstvu, která bude ve vašem systému implementovat vysokou dostupnost. V tomto příspěvku na blogu bychom se rádi podělili o několik tipů, jak toho pomocí ClusterControl dosáhnout.
Nasazení HAProxy pomocí ClusterControl
Standardem je HAProxy – jedna z nejoblíbenějších proxy používaná ve spojení s MySQL (ale nejen samozřejmě). ClusterControl podporuje nasazení a monitorování HAProxy uzlů. Pomáhá také implementovat vysokou dostupnost samotného proxy pomocí keepalived.
Nasazení je docela jednoduché – musíte vybrat nebo vyplnit IP adresu hostitele, kam bude HAProxy nainstalován, vybrat port, zásady vyvažování zátěže, rozhodnout, zda má ClusterControl použít k nasazení HAProxy stávající úložiště nebo nejnovější zdrojový kód. Můžete si také vybrat, které backendové uzly chcete zahrnout do konfigurace proxy, a zda by měly být aktivní nebo záložní.
Ve výchozím nastavení bude instance HAProxy nasazená ClusterControl fungovat na MySQL Cluster (NDB), Galera Cluster, PostgreSQL streaming replikace a MySQL Replication. Pro replikaci master-slave může ClusterControl nakonfigurovat dva posluchače, jeden pro pouze čtení a druhý pro čtení a zápis. Aplikace pak budou muset odesílat čtení a zápisy na příslušné porty. Pro multi-master replikaci nastaví ClusterControl standardní vyrovnávání zátěže TCP založené na algoritmu vyvažování nejmenšího připojení (např. pro Galera Cluster, kde lze zapisovat do všech uzlů).
Keepalived se používá k přidání vysoké dostupnosti do proxy vrstvy. Když máte v systému alespoň dva HAProxy uzly, můžete Keepalived nainstalovat z uživatelského rozhraní ClusterControl.
Budete muset vybrat dva uzly HAProxy a budou nakonfigurovány jako aktivní - pohotovostní pár. Virtuální IP by byla přiřazena aktivnímu serveru, a pokud by selhal, byla by znovu přiřazena záložnímu proxy. Tímto způsobem se stačí připojit k VIP a všechny vaše dotazy budou směrovány do aktuálně aktivního a fungujícího HAProxy uzlu.
Další podrobnosti o tom, jak jsou vnitřní části konfigurovány, najdete v našem tutoriálu HAProxy.
Nasazení ProxySQL pomocí ClusterControl
Zatímco HAProxy je skálopevná proxy a velmi oblíbená volba, postrádá povědomí o databázi, např. rozdělení čtení a zápisu. Jediný způsob, jak to udělat v HAProxy, je vytvořit dva backendy a poslouchat na dvou portech - jeden pro čtení a jeden pro zápis. To je obvykle v pořádku, ale vyžaduje to implementaci změn ve vaší aplikaci – aplikace musí rozumět tomu, co je čtení a co zápis, a poté nasměrovat tyto dotazy na správný port. Bylo by mnohem snazší připojit se k jedinému portu a nechat proxy rozhodnout, co dál - to je něco, co HAProxy nemůže dělat, protože to, co dělá, je pouze směrování paketů - neprovádí se žádná kontrola paketů a zejména nemá žádné porozumění protokolu MySQL.
ProxySQL tento problém řeší - mluví s protokolem MySQL a může (mimo jiné) provádět rozdělení čtení a zápisu prostřednictvím svých výkonných pravidel dotazů a směrovat příchozí provoz MySQL podle různých kritérií. Instalace ProxySQL z ClusterControl je jednoduchá – chcete jít do sekce Spravovat -> Load Balancer a vyplnit záložku „Deploy ProxySQL“ požadovanými údaji.
Stručně řečeno, musíme vybrat, kde se bude ProxySQL instalovat, jakého administrátora a heslo by měl mít, kterého monitorovacího uživatele by měl použít pro připojení k backendům MySQL a ověření jejich stavu a monitorování stavu. 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.
Nakonec musíte odpovědět na otázku:používáte implicitní transakce? Tím rozumíme transakcím zahájeným spuštěním SET autocommit=0; Pokud jej použijete, ClusterControl nakonfiguruje ProxySQL tak, aby posílal veškerý provoz na hlavní server. To je vyžadováno, aby bylo zajištěno, že ProxySQL bude správně zpracovávat transakce v ProxySQL 1.3.xa dřívějších. Pokud k vytvoření nové transakce nepoužijete SET autocommit=0, ClusterControl nakonfiguruje rozdělení čtení/zápisu.
ProxySQL, jako každý proxy, se může stát jediným bodem selhání a pro dosažení vysoké dostupnosti musí být redundantní. Existuje několik metod, jak to udělat. Jedním z nich je umístění ProxySQL na webové uzly. Myšlenka je taková, že většinu času bude proces ProxySQL fungovat dobře a důvodem jeho nedostupnosti je, že selhal celý uzel. V takovém případě, pokud je ProxySQL umístěno s webovým uzlem, nedošlo k žádné velké škodě, protože tento konkrétní webový uzel nebude také dostupný.
Další metodou je použití Keepalived podobným způsobem, jako jsme to udělali v případě HAProxy.
Další podrobnosti o tom, jak se konfigurují vnitřní části, najdete v našem tutoriálu ProxySQL.