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

Automatizované testování procesu upgradu pro PXC/MariaDB Galera Cluster

Upgrade databáze pro clustery založené na Galera, jako je Percona XtraDB Cluster (PXC) nebo MariaDB Galera Cluster, může být náročný, zejména pro produkční prostředí. Nemůžete si dovolit ztratit stav své vysoké dostupnosti a vystavit ji riziku.

Procedura upgradu musí být dobře zdokumentována a v ideálním případě by před upgradem měla být provedena dokumentace, přísné testování a srovnávání. Nejdůležitější je, že zabezpečení a vylepšení musí být také identifikováno na základě protokolu změn upgradu verze databáze.

Se všemi obavami automatizace pomáhá dosáhnout efektivnějšího procesu upgradu a pomáhá vyhnout se lidské chybě a zlepšuje RTO.

Jak spravovat proces upgradu clusteru PXC/MariaDB Galera 

Upgrade vašeho PXC/MariaDB Galera Cluster vyžaduje řádnou dokumentaci a procesní tok, který obsahuje seznam věcí, které je třeba udělat, a toho, co dělat v případě, že věci půjdou na jih. To znamená, že by měl být vypracován plán kontinuity podnikání, který bude zahrnovat i váš plán obnovy po havárii. Nemůžete si dovolit v případě potíží přijít o podnikání.

Obvykle je třeba začít nejprve s testovacím prostředím. Testovací prostředí by mělo mít přesně stejná nastavení a konfiguraci jako vaše produkční prostředí. Nemůžete pokračovat přímo v upgradu produkčního prostředí, protože si nejste jisti, jaký účinek a dopad to nastane, pokud věci nebudou v souladu s plánem.

Práce s produkčním prostředím je vysoce citlivá, takže ve většině případů vždy dojde k prostojům a údržbě, aby se předešlo drastickým dopadům.

Existují dva typy upgradu pro PCX nebo MariaDB Galera Cluster, o kterých musíte vědět. Jedná se o hlavní upgrade vydání a menší upgrade vydání nebo často označované jako upgrade na místě. Upgrade na místě je místo, kde můžete upgradovat verzi databáze na její nejnovější vedlejší verzi pomocí stejných binárních dat vaší databáze. Nedojde k žádným fyzickým změnám v samotných datech, ale pouze v jejich binárních databázích nebo základních softwarových balíčcích.

Upgrade PCX nebo MariaDB Galera Cluster na hlavní vydání

Upgrade na hlavní vydání může být náročný, zejména pro produkční prostředí. Zahrnuje komplexní typ konfigurace databáze a speciální vestavěné funkce PXC nebo MariaDB Galera Cluster. Časoprostorová data, data s časovým razítkem, strojová data nebo jakákoliv mnohostranná data jsou velmi konzervativní a citlivá na aktualizace. Pro tento proces nelze použít místní upgrade, protože by bylo provedeno mnoho zásadních změn. Pokud nemáte velmi malá data nebo data skládající se z idempotentů nebo data, která lze snadno generovat, může být bezpečné, pokud víte, že dopad neovlivní vaše data.

Pokud je objem vašich dat velký, je nejlepší nechat proces upgradu zautomatizovat. Nemusí však být ideálním řešením pro automatizaci celé sekvence v procesu upgradu, protože během hlavní fáze upgradu mohou nastat neočekávané problémy. Nejlepší je automatizovat opakující se kroky a procesy se známými výsledky při velkém upgradu. V každém okamžiku je zapotřebí zdroj, aby bylo možné vyhodnotit, zda je proces automatizace bezpečný, aby nedošlo k zastavení procesu upgradu. Automatické testování po upgradu je stejně důležité a mělo by být zahrnuto jako součást procesu po upgradu.

Upgrade PCX nebo MariaDB Galera Cluster na menší verzi

Drobný upgrade vydání označovaný jako upgrade na místě je obvykle bezpečnější přístup k provedení procesu upgradu. Důvodem je, že nejběžnějšími změnami pro toto vydání jsou opravy nebo vylepšení zabezpečení a zneužití, chyby (obvykle závažné) nebo problémy s kompatibilitou, které vyžadují opravy, zejména pokud na aktuálním hardwaru nebo operačním systému byly použity změny, které mohou způsobit, že databáze nebude správně fungovat. I když lze dopad obvykle obnovit s minimálním efektem, je stále nutné, abyste se podívali a pročetli changelog, který byl odeslán ke specifické aktualizaci menší verze.

Nasazení úlohy k provedení procesu upgradu je ideálním příkladem automatizace. Obvyklý tok se velmi opakuje a většinou nezpůsobuje žádné poškození vašemu stávajícímu PXC nebo MariaDB Galera Cluster. Nejdůležitější je, že po upgradu bude pokračovat automatické testování, aby se zjistilo, že nastavení, konfigurace, účinnost a funkčnost nejsou poškozené.

Vyhněte se fiaskům! Buďte připraveni, nechte si to automatizovat!

Náš klient se na nás obrátil s žádostí o pomoc, protože po menší aktualizaci databáze funkce, kterou v databázi používají, správně nefunguje. Požádali o kroky a procesy, jak přejít na nižší verzi a jak to bude bezpečné. Jejich zákazníci si stěžovali, že jejich aplikace zcela nefunguje, a zobecňovali, že to není užitečné.

I v případě takové malé závady může naštvaný zákazník dát vašemu produktu špatnou poznámku. Poučení z tohoto scénáře je, že selhání při testování po upgradu vede k předpokladu, že všechny funkce v databázi fungují podle očekávání.

Předpokládejme, že máte plány na automatizaci procesu upgradu, pak si uvědomte, že typ procesu automatizace se liší podle typu upgradů, které musíte provést. Jak již bylo zmíněno dříve, velký upgrade versus menší upgrade má různé odlišné přístupy. Vaše nastavení automatu se tedy nemusí vztahovat na oba upgrady databázového softwaru.

Automatizace po procesu upgradu

V tuto chvíli se očekává, že proces upgradu dokončíte, v ideálním případě pomocí automatizace. Nyní, když je vaše databáze připravena přijímat klientská připojení, musí následovat fáze přísného testování.

Spusťte mysql_upgrade

Je velmi důležité a extrémně doporučené spustit mysql_upgrade po dokončení procesu upgradu. mysql_upgrade hledá nekompatibility s upgradovaným serverem MySQL takto:

  • Upgraduje systémové tabulky ve schématu mysql, takže můžete využít nová oprávnění nebo schopnosti, které by mohly byly přidány.

  • Upgraduje schéma výkonu a schéma sys.

  • Zkoumá uživatelská schémata.

Mysql_upgrade určuje, zda má tabulka problémy, jako je nekompatibilita kvůli změnám v nejnovější verzi po upgradu, a pokusí se je vyřešit opravou tabulky. V opačném případě, pokud selže, váš test automatizace musí selhat a nesmí pokračovat na nic jiného. Nejprve je nutné jej prozkoumat a provést ruční opravu.

Zkontrolujte protokoly chyb

Jakmile je upgrade mysql_upgrade hotový, musíte zkontrolovat a ověřit chyby, ke kterým došlo. Můžete to vložit do skriptu a zkontrolovat případné štítky „chyba“ nebo „varování“ v protokolech chyb. Je velmi důležité určit, zda existuje. Váš automatizovaný test musí mít schopnost zachytit pasti chyb, buď může čekat na pokračování uživatelského vstupu, pokud je chyba jen velmi minimální nebo očekávaná, jinak proces upgradu zastaví.

Proveďte test jednotky

Databázové prostředí TDD (Test Driven Development) je přístup k vývoji softwaru, kde existuje řada testovacích případů, které je třeba ověřit a určit, zda je ověření pravdivé (úspěšné) nebo nepravdivé (selhání). Něco jako to, co máme na níže uvedeném snímku obrazovky:

Obrázek s laskavým svolením guru99.com

Jedná se o typ testování jednotek, který pomáhá vyhnout se nechtěným chybám nebo logickým chybám ve vaší aplikaci a ve vaší databázi. Pamatujte, že pokud jsou v databázi uložena neplatná data, poškodilo by to veškeré obchodní analýzy a transakce, zejména pokud by to zahrnovalo složité finanční výpočty nebo matematické rovnice.

Pokud se ptáte, je opravdu nutné po upgradu provést test jednotky? Samozřejmě, že je! Nemusíte to nutně spouštět v produkčním prostředí. Během testovacích fází, tj. nejprve upgradujte vaše QA, vývojové/stagingové prostředí, musí být aplikováno v této oblasti. Data musí být přesnou kopií přinejmenším nebo téměř stejně jako jejich produkční prostředí. Vaším cílem je vyhnout se nechtěným výsledkům a rozhodně chybným logickým výsledkům. Musíte se samozřejmě dobře starat o svá data a určit, zda výsledky projdou ověřovacím testem.

Pokud máte v úmyslu spustit svou produkci, udělejte to. Nebuďte však tak rigidní jako vaše testovací fáze aplikovaná v QA, vývojovém nebo přípravném prostředí. Je to proto, že musíte plánovat svůj čas na základě dostupného okna údržby a vyhnout se zpožděním a delším RTO.

Podle mých zkušeností zákazníci během fáze upgradu volí rychlejší přístup, který bude důležitý pro zjištění, zda taková funkce poskytuje správný výsledek. Navíc můžete mít skript pro automatizaci testu sady obchodních logických funkcí nebo uložených procedur, protože pomáhá ukládat dotazy do mezipaměti a zahřívat databázi.

Při přípravě na Unit Test pro vaši databázi se vyhněte znovuobjevování kola. Místo toho se podívejte na dostupné nástroje, které si můžete vybrat, pokud to vyhovuje vašim požadavkům a potřebám. Podívejte se na Selenium nebo se podívejte na tento blog.

Ověřte identitu dotazů

Nejběžnějším nástrojem, který můžete použít, je pt-upgrade Percony. Ověřuje, že výsledky dotazu jsou identické na různých serverech. Provádí dotazy na základě daných protokolů a dodaného připojení (nebo nazývaného jako DSN), poté porovnává výsledky a hlásí případné významné rozdíly. Nabízí více než to, že máte možnosti shromažďovat nebo analyzovat dotazy, například prostřednictvím tcpdump.

Použití upgradu pt je snadné. Můžete například spustit pomocí následujícího příkazu:

## Comparing via slow log for the given hosts
pt-upgrade h=host1 h=host2 slow.log

## or use fingerprints, useful for debugging purposes
pt-upgrade --fingerprints --run-time=1h mysqld-slow.log h=127.0.0.1,P=5091 h=127.0.0.1,P=5517

## or with tcpdump,
tcpdump -i eth0 port 3306 -s 65535  -x -n -q -tttt     \
  | pt-query-digest --type tcpdump --no-report --print \
  | pt-upgrade h=host1 h=host2

Dobrým zvykem je, že po provedení upgradu, zejména u upgradu hlavního vydání, se použije pt-upgrade k pokračování a provedení analýzy dotazů identifikující rozdíly na základě výsledků. Je dobrým zvykem to udělat během testovací fáze, když to děláte ve svém QA nebo pracovním a vývojovém prostředí, abyste se mohli rozhodnout, zda je bezpečnější pokračovat. Můžete to přidat do svého automatizačního nástroje a spustit jej jako příručku, jakmile bude připraven plnit svou povinnost.

Jak automatizovat proces testování?

V našich předchozích blozích jsme představili různé způsoby automatizace vašich databází. Nejběžnější nástroje, které jsou v módě, jsou tyto softwarové nástroje pro nasazení IaC (Infrastructure as Code). K této práci můžete použít Puppet, Chef, SaltStack nebo Ansible.

Moje preference byla vždy Ansible provádět moje automatizované testování, což mi umožňuje vytvářet učebnice podle své pracovní role. Samozřejmě nemohu vytvořit jeden celý automat, který bude dělat všechny věci, protože situace a prostředí se liší. Na základě dříve uvedených typů upgradu (velký vs menší upgrade) byste měli rozlišovat jeho proces. I když se jedná pouze o aktualizaci na místě, stále se musíte ujistit, že vaše příručky budou vykonávat správnou práci.

ClusterControl je váš přítel automatizace databází!

ClusterControl je dobrá volba k provádění základního a automatizovaného testování. ClusterControl není rámec pro testování; není to nástroj pro testování jednotek. Je to však nástroj pro správu a monitorování databází, který zahrnuje mnoho automatizovaných nasazení na základě požadovaných spouštěčů od uživatele nebo správce softwaru.

ClusterControl nabízí upgrady menších verzí, což poskytuje administrátorům pohodlí při provádění upgradů. Provádí také aktualizaci mysql_upgrade za chodu. Nemusíte to tedy provádět ručně. ClusterControl také detekuje nové verze, které je třeba upgradovat, a doporučí vám další kroky. V případě selhání aktualizace nebude pokračovat.

Zde je příklad menší úlohy upgradu:

Pokud se podíváte pozorně, mysql_upgrade proběhne úspěšně. I když to nedoporučuje a provádí automatickou aktualizaci masteru, je to proto, že to není správný přístup. V takovém případě musíte povýšit nového slave a poté degradovat mastera jako slave, abyste provedli upgrade.

Závěr

Skvělá věc s ClusterControl je, že můžete začlenit kontrolu chybových protokolů, provádět test jednotky, ověřovat identitu dotazů vytvořením poradců. Není těžké to udělat. Můžete se podívat na náš předchozí blog Using ClusterControl Advisor to Create Checks for SELinux and Meltdown/Spectre:Part One. To je příkladem toho, jak můžete využít výhody a buď spustit další úlohu, jakmile je aktualizace provedena. ClusterControl má vestavěné výstrahy nebo alarmy, které lze integrovat do vašich oblíbených výstražných systémů třetích stran, aby vás informovaly o aktuálním stavu vašeho automatického testování.


  1. MYSQL importuje data z csv pomocí LOAD DATA INFILE

  2. Jak automaticky znovu zadat dotaz pomocí LoaderManager

  3. Jak mohu použít kaskádu mazání v mysql?

  4. JSON_QUOTE() – Jak uniknout ze znaků v řetězcích používaných jako hodnoty JSON v MySQL