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

Přehled klastrování ProxySQL v ClusterControl

ProxySQL je dobře známý nástroj pro vyrovnávání zátěže ve světě MySQL – přichází se skvělou sadou funkcí, které vám umožní převzít kontrolu nad provozem a upravit jej, jak uznáte za vhodné. Může být nasazen mnoha různými způsoby – vyhrazenými uzly, spojenými s hostiteli aplikací, silovým přístupem – vše závisí na přesném prostředí a obchodních požadavcích. Běžným problémem je, že ve většině případů chcete, aby vaše uzly ProxySQL obsahovaly stejnou konfiguraci. Pokud škálujete svůj cluster a přidáte do ProxySQL nový server, chcete, aby byl tento server viditelný na všech instancích ProxySQL, nejen na aktivní. To vede k otázce – jak zajistit, aby byla konfigurace synchronizována napříč všemi uzly ProxySQL?

Můžete zkusit aktualizovat všechny uzly ručně, což rozhodně není efektivní. Můžete také použít nějaký druh nástrojů pro orchestraci infrastruktury, jako je Ansible nebo Chef, abyste zachovali konfiguraci napříč uzly ve známém stavu, takže úpravy neprovádějte přímo v ProxySQL, ale prostřednictvím nástroje, který používáte k organizaci svého prostředí.

Pokud náhodou používáte ClusterControl, přichází se sadou funkcí, které vám umožňují synchronizovat konfiguraci mezi instancemi ProxySQL, ale toto řešení má své nevýhody – jedná se o ruční akci, kterou musíte mít na paměti spustit po změně konfigurace. Pokud to zapomenete udělat, můžete být nemile překvapeni, pokud například keepalived přesune virtuální IP do neaktualizované instance ProxySQL.

Žádná z těchto metod není jednoduchá ani 100% spolehlivá a situace nastává, když uzly ProxySQL mají různé konfigurace a mohou být potenciálně nebezpečné.

ProxySQL naštěstí přichází s řešením tohoto problému - ProxySQL Cluster. Myšlenka je poměrně jednoduchá – můžete definovat seznam instancí ProxySQL, které spolu budou mluvit a informovat ostatní o verzi konfigurace, kterou každá z nich obsahuje. Konfigurace je verzovaná, takže jakákoliv úprava jakéhokoli nastavení na libovolném uzlu povede ke zvýšení verze konfigurace – to spustí synchronizaci konfigurace a nová verze konfigurace je distribuována a aplikována na všechny uzly, které tvoří cluster ProxySQL.

Nejnovější verze ClusterControl vám umožňuje bez námahy nastavit clustery ProxySQL. Při nasazování ProxySQL byste měli zaškrtnout možnost „Use Native Clustering“ pro všechny uzly, které chcete být součástí clusteru.

Jakmile to uděláte, máte hotovo – zbytek se stane pod kapuce.

MySQL [(none)]> select * from proxysql_servers;

+------------+------+--------+----------------+

| hostname   | port | weight | comment        |

+------------+------+--------+----------------+

| 10.0.0.131 | 6032 | 0      | proxysql_group |

| 10.0.0.132 | 6032 | 0      | proxysql_group |

+------------+------+--------+----------------+

2 rows in set (0.001 sec)

Na obou serverech byla správně nastavena tabulka proxysql_servers s názvy hostitelů uzlů, které tvoří cluster. Můžeme také ověřit, že se změny konfigurace správně šíří napříč clusterem:

Zvýšili jsme nastavení Max Connections na jednom z uzlů ProxySQL (10.0 .0.131) a můžeme ověřit, že druhý uzel (10.0.0.132) uvidí stejnou konfiguraci:

V případě potřeby odladění procesu se vždy můžeme podívat na protokol ProxySQL (obvykle se nachází v /var/lib/proxysql/proxysql.log), kde uvidíme tyto informace:

2020-11-26 13:40:47 [INFO] Cluster: detected a new checksum for mysql_servers from peer 10.0.0.131:6032, version 11, epoch 1606398059, checksum 0x441378E48BB01C61 . Not syncing yet ...

2020-11-26 13:40:49 [INFO] Cluster: detected a peer 10.0.0.131:6032 with mysql_servers version 12, epoch 1606398060, diff_check 3. Own version: 9, epoch: 1606398022. Proceeding with remote sync

2020-11-26 13:40:50 [INFO] Cluster: detected a peer 10.0.0.131:6032 with mysql_servers version 12, epoch 1606398060, diff_check 4. Own version: 9, epoch: 1606398022. Proceeding with remote sync

2020-11-26 13:40:50 [INFO] Cluster: detected peer 10.0.0.131:6032 with mysql_servers version 12, epoch 1606398060

2020-11-26 13:40:50 [INFO] Cluster: Fetching MySQL Servers from peer 10.0.0.131:6032 started. Expected checksum 0x441378E48BB01C61

2020-11-26 13:40:50 [INFO] Cluster: Fetching MySQL Servers from peer 10.0.0.131:6032 completed

2020-11-26 13:40:50 [INFO] Cluster: Fetching checksum for MySQL Servers from peer 10.0.0.131:6032 before proceessing

2020-11-26 13:40:50 [INFO] Cluster: Fetching checksum for MySQL Servers from peer 10.0.0.131:6032 successful. Checksum: 0x441378E48BB01C61

2020-11-26 13:40:50 [INFO] Cluster: Writing mysql_servers table

2020-11-26 13:40:50 [INFO] Cluster: Writing mysql_replication_hostgroups table

2020-11-26 13:40:50 [INFO] Cluster: Loading to runtime MySQL Servers from peer 10.0.0.131:6032

Toto je protokol z 10.0.0.132, kde jasně vidíme, že změna konfigurace pro tabulku mysql_servers byla detekována 10.0.0.131 a poté byla synchronizována a aplikována 10.0.0.132, takže byla synchronizována s druhým uzlem v clusteru.

Jak můžete vidět, klastrování ProxySQL je snadný, ale účinný způsob, jak zajistit, aby jeho konfigurace zůstala synchronizovaná, a významně pomáhá při použití větších nasazení ProxySQL. Dejte nám dolů do komentářů vědět, jaké jsou vaše zkušenosti s clusteringem ProxySQL.


  1. Postgresql - nelze zrušit databázi kvůli některým automatickým připojením k DB

  2. Použití CHOP ve výuce

  3. Odečtěte měsíc od data v MariaDB

  4. Jak vytvoříte náhodný řetězec, který je vhodný pro ID relace v PostgreSQL?