sql >> Databáze >  >> RDS >> Mysql

Vyrovnávání zátěže databáze v cloudu – MySQL Master Failover s ProxySQL 2.0:Část první (nasazení)

Cloud poskytuje velmi flexibilní prostředí pro práci. Můžete jej snadno škálovat nahoru a dolů přidáním nebo odebráním uzlů. V případě potřeby můžete snadno vytvořit klon svého prostředí. To lze použít pro procesy jako upgrady, zátěžové testy, zotavení po havárii. Hlavním problémem, se kterým se musíte vypořádat, je to, že aplikace se musí nějakým způsobem připojovat k databázím a flexibilní nastavení může být pro databáze složité – zvláště u nastavení master-slave. Naštěstí existuje několik možností, jak tento proces usnadnit.

Jedním ze způsobů je využití databázového proxy. Na výběr je několik proxy, ale v tomto příspěvku na blogu použijeme ProxySQL, dobře známý proxy dostupný pro MySQL a MariaDB. Ukážeme, jak jej můžete použít k efektivnímu přesunu provozu mezi uzly MySQL bez viditelného dopadu na aplikaci. Vysvětlíme také některá omezení a nevýhody tohoto přístupu.

Počáteční nastavení cloudu

Nejprve si proberme nastavení. Pro naše prostředí budeme používat instance AWS EC2. Vzhledem k tomu, že pouze testujeme, ve skutečnosti se nestaráme o vysokou dostupnost kromě toho, co chceme dokázat, že je možné – bezproblémové hlavní změny. Proto budeme používat jeden aplikační uzel a jeden uzel ProxySQL. Podle osvědčených postupů přiřadíme ProxySQL na aplikační uzel a aplikace bude nakonfigurována pro připojení k ProxySQL přes Unixový soket. To sníží režii související s připojením TCP a zvýší bezpečnost - provoz z aplikace na proxy neopustí místní instanci a k ​​šifrování zůstane pouze připojení ProxySQL -> MySQL. Opět, protože se jedná o jednoduchý test, nebudeme nastavovat SSL. V produkčním prostředí to chcete udělat, i když používáte VPC.

Prostředí bude vypadat jako na obrázku níže:

Jako aplikaci použijeme Sysbench - syntetický benchmarkový program pro MySQL . Má možnost zakázat a povolit používání transakcí, které použijeme k ukázce, jak je ProxySQL zpracovává.

Instalace replikačního clusteru MySQL pomocí ClusterControl

Aby bylo nasazení rychlé a efektivní, použijeme ClusterControl k nasazení nastavení replikace MySQL. Instalace ClusterControl vyžaduje pouze několik kroků. Nebudeme zde zabíhat do podrobností, ale měli byste otevřít naše webové stránky, zaregistrovat se a instalace ClusterControl by měla být v podstatě jednoduchá. Mějte prosím na paměti, že musíte nastavit SSH bez hesla mezi instancí ClusterControl a všemi uzly, které s ní budeme spravovat.

Po instalaci ClusterControl se můžete přihlásit. Zobrazí se vám průvodce nasazením:

Vzhledem k tomu, že již máme instance spuštěné v cloudu, použijeme Možnost „Nasadit“. Zobrazí se nám následující obrazovka:

Jako typ clusteru vybereme replikaci MySQL a musíme zajistit konektivitu podrobnosti. Může to být připojení pomocí uživatele root nebo to může být také uživatel sudo s heslem nebo bez něj.

V dalším kroku musíme učinit některá rozhodnutí. Percona Server pro MySQL budeme používat v nejnovější verzi. Musíme také definovat heslo pro uživatele root na uzlech, které nasadíme.

V posledním kroku musíme definovat topologii – budeme postupovat co jsme navrhli na začátku – pán a tři otroci.

ClusterControl zahájí nasazení – můžeme jej sledovat na kartě Aktivita, jak je znázorněno na snímku obrazovky výše.

Po dokončení nasazení můžeme vidět cluster v seznamu clusterů:

Instalace ProxySQL 2.0 pomocí ClusterControl

Dalším krokem bude nasazení ProxySQL. ClusterControl to může udělat za nás.

Můžeme to udělat v Manage -> Load Balancer.

Protože věci jen testujeme, znovu použijeme instanci ClusterControl pro ProxySQL a Sysbench. V reálném životě byste pravděpodobně chtěli používat svůj „skutečný“ aplikační server. Pokud jej nemůžete najít v rozevíracím seznamu, můžete adresu serveru (IP nebo název hostitele) napsat ručně.

Chceme také definovat přihlašovací údaje pro sledování a správu uživatele. Také jsme zkontrolovali, že bude nasazena ProxySQL 2.0 (v případě potřeby ji můžete kdykoli změnit na 1.4.x).

Ve spodní části průvodce definujeme uživatele, který bude vytvořené v MySQL i ProxySQL. Pokud máte existující aplikaci, pravděpodobně budete chtít použít stávajícího uživatele. Pokud pro svou aplikaci používáte velké množství uživatelů, můžete zbývající vždy importovat později, až bude nasazen ProxySQL.

Chceme zajistit, aby všechny instance MySQL byly nakonfigurovány v ProxySQL. Použijeme explicitní transakce, takže přepínač nastavíme podle toho. To je vše, co jsme museli udělat – zbytek je kliknout na tlačítko „Deploy ProxySQL“ a nechat ClusterControl dělat svou věc.

Po dokončení instalace se v seznamu uzlů zobrazí ProxySQL v klastru. Jak můžete vidět na výše uvedeném snímku obrazovky, již detekoval topologii a distribuované uzly napříč hostitelskými skupinami pro čtení a zápis.

Instalace Sysbench

Posledním krokem bude vytvoření naší „aplikace“ instalací Sysbenche. Postup je poměrně jednoduchý. Nejprve musíme nainstalovat předpoklady, knihovny a nástroje potřebné ke kompilaci Sysbench:

[email protected]:~# apt install git automake libtool make libssl-dev pkg-config libmysqlclient-dev

Potom chceme naklonovat úložiště sysbench:

[email protected]:~# git clone https://github.com/akopytov/sysbench.git

Nakonec chceme zkompilovat a nainstalovat Sysbench:

[email protected]:~# cd sysbench/

[email protected]:~/sysbench# ./autogen.sh && ./configure && make && make install

To je ono, Sysbench byl nainstalován. Nyní potřebujeme vygenerovat nějaká data. K tomu musíme nejprve vytvořit schéma. Připojíme se k lokálnímu ProxySQL a přes něj vytvoříme schéma ‚sbtest‘ na masteru. Pro spojení s ProxySQL jsme použili Unixový socket.

[email protected]:~/sysbench# mysql -S /tmp/proxysql.sock -u sbtest -psbtest

mysql> CREATE DATABASE sbtest;

Query OK, 1 row affected (0.01 sec)

Nyní můžeme použít sysbench k naplnění databáze daty. Opět používáme Unixový socket pro spojení s proxy:

[email protected]:~# sysbench /root/sysbench/src/lua/oltp_read_write.lua --threads=4 --events=0 --time=3600 --mysql-socket=/tmp/proxysql.sock --mysql-user=sbtest --mysql-password=sbtest --tables=32 --report-interval=1 --skip-trx=on --table-size=100000 --db-ps-mode=disable prepare

Jakmile budou data připravena, můžeme přistoupit k našim testům.

Závěr

Ve druhé části tohoto blogu probereme způsob, jakým ProxySQL zpracovává připojení, převzetí služeb při selhání a jeho nastavení, která nám mohou pomoci spravovat hlavní přepínač způsobem, který bude co nejméně rušit aplikaci.


  1. Nejbližší zápas, část 3

  2. pomocí null v připraveném příkazu mysqli

  3. MySQL - SELECT WHERE pole IN (poddotaz) - Extrémně pomalé proč?

  4. Získejte názvy tabulek pomocí příkazu SELECT v MySQL