Proaktivní monitorování databáze MySQL je v dnešní době nutností. Hraje klíčovou a významnou roli pro správu a řízení vaší databáze, zejména pro vaše produkční clustery. Chybějící konkrétní informace, které by byly prospěšné pro zlepšení vaší databáze, nebo neschopnost identifikovat hlavní příčinu problémů, se kterými se lze setkat, může způsobit extrémní potíže s opravou nebo obnovou z dob její slávy.
Proaktivní monitorování ve vaší databázi MySQL umožňuje vašemu týmu porozumět tomu, jak si vaše databázové služby vedou. Funguje a dodává na základě pracovního zatížení, které se očekává? Máte dostatek prostředků na to, aby byl server výkonný na základě pracovní zátěže, kterou aktuálně zpracovává? Proaktivní monitorování používá věci, které mají zabránit katastrofě nebo poškození vaší databáze, na což vás předem upozorní. Umožňuje správcům databází nebo správcům provádět důležité úkoly, aby se vyhnuli poruchám, poškození dat, zneužití zabezpečení a útokům nebo neočekávanému nárůstu provozu ve vašem databázovém clusteru. Tím, že jsou okamžitě obslouženi, musí být proaktivní monitorování pro MySQL automatizováno a bude fungovat 24/7 bez přerušení a je na správcích databází, Devops, správcích, aby rozhodli, zda na základě priority úkolů a jak důležité je, zda vyžaduje údržbu nebo prostě typická každodenní rutinní práce.
Proaktivní monitorování pomocí ClusterControl
ClusterControl nabízí rozmanitý styl pro monitorování databázových serverů MySQL. Jeho přístup je srovnatelný s jinými podnikovými monitorovacími nástroji a cloudovými řešeními na podnikové úrovni. ClusterControl má tendenci uplatňovat všechny osvědčené postupy pro správu a monitorování databází, ale s flexibilitou konfigurace, aby bylo dosaženo požadovaného nastavení ve vašem prostředí.
Pokud jde o alarmy a oznámení, ClusterControl má smíšený přístup, pro který existují vestavěné alarmy, a pak jsou tu Poradci, o kterých budeme diskutovat více na tomto blogu.
Alarmy ClusterControl pro MySQL
Alarmy označují problémy, které by mohly ovlivnit nebo degradovat cluster jako celek. Toto rozhraní poskytuje podrobné vysvětlení problému spolu s doporučenou akcí (pokud je k dispozici) k vyřešení problému. Každý alarm je kategorizován jako:
-
Shluk
-
Obnova clusteru
-
Stav databáze
-
Výkon databáze
-
Hostitel
-
Uzel
-
Síť
Alarm lze potvrdit zaškrtnutím políčka Ignorovat? zaškrtávací políčko. Při ignorování nebude zasláno žádné upozornění e-mailem. Alarm nelze smazat ani zrušit, ale můžete jej skrýt ze seznamu kliknutím na tlačítko Skrýt ignorované alarmy.
Viz ukázkový snímek obrazovky níže,
Proaktivita s ClusterControl
ClusterControl podporuje automatickou obnovu, která reaguje vždy, když dojde k detekci selhání. Auto Recovery with ClusterControl je jednou z nejaktivnějších funkcí, která hraje klíčovou roli v případě katastrof.
Povolení automatického obnovení je vyžadováno pro toto proaktivní monitorování, které reaguje v různých situacích, například pokud selže primární uzel MySQL.
V ClusterControl to bude detekováno okamžitě, když naslouchá připojení s databázovým serverem nebo v tomto případě primárním serverem. ClusterControl zareaguje ASAP a použije převzetí služeb při selhání.
Převzetí služeb při selhání je součástí povolené obnovy clusteru. Protože jsou obě tlačítka Cluster a Node povolena, následuje obnovení uzlu, jak vidíte níže.
V závislosti na dosažitelnosti uzlů se ClusterControl bude neustále snažit připojení přes SSH a pokuste se dosáhnout uzlu a pokusit se o obnovení spuštěním pomocí sysvinit nebo systemd. Je zřejmé, že si můžete myslet, že použije převzetí služeb při selhání a ClusterControl se pokusí spustit primární primární chybu. To by mohlo znamenat, že jsou k dispozici dva databázové uzly, že? I když je to pravda, ClusterControl při obnově převede primární primární chybu do stavu pouze pro čtení. Viz níže,
I když existují určité možnosti, které můžete nastavit pro správu mechanismu převzetí služeb při selhání, měli byste se obrátit na naši dokumentaci, protože to není předmětem tohoto blogu.
Použití poradců pro proaktivitu s ClusterControl
V ClusterControl budou poradci umístěni tak, že přejdete do
V clusteru Galera přidává poradce specifické pro Galera, jak je uvedeno níže ,
Přizpůsobení vašich ClusterControl MySQL Advisors
Poradci jsou přizpůsobitelné a lze je upravit podle vašich potřeb. Na snímku obrazovky poradců výše stačí kliknout na Upravit a budete přesměrováni na jednoduché IDE, které jsme zabudovali do ClusterControl.
Můžete si také vytvořit své vlastní ClusterControl Advisors. Chcete-li se dozvědět více o tvoření, můžete se odkázat na článek Napište svého prvního poradce nebo si vezměte 2dílnou sérii a vytvořte si vlastní pomocí skriptu pro detekci Meltdown/Spectre.
Jak jsou poradci ClusterControl proaktivní?
Technicky poradci ClusterControl většinou fungují jako oznamovatelé a doslova vaši poradci. ClusterControl Advisors vás upozorní, pokud zjistí neobvyklé chování, pokud překročí základní prahové hodnoty nastavené standardně ClusterControl. Obvykle jsou prahové hodnoty generické hodnoty. Tyto obecné hodnoty jsou založeny na osvědčených postupech a na nejběžnějším a nejpřijatelnějším pracovním zatížení nebo nastavení prostředí. Většina výchozích nastavení poradců neposkytuje alarmy ani výstražné mechanismy v uživatelském rozhraní ClusterControl. Upozorní vás prostřednictvím uživatelského rozhraní (viz ukázkový snímek obrazovky poradce umístění úložiště Binlog níže).
Jak již bylo zmíněno dříve, poradce lze upravovat a upravovat pomocí našeho jednoduchého editoru nebo IDE. Například v clusteru replikace MySQL poskytuje ClusterControl poradce umístění úložiště Binlog. Zjistí, že binlogy jsou uloženy v datovém adresáři, kde radí, že musí být mimo datový adresář.
Vezměme si příklad ze seznamu poradců a vyberte Připojení aktuálně používaného poradce . Upravme to, jak je uvedeno níže,
nebo můžete přejít na
Tím, že je proaktivnější odesíláním alarmů, můžete jej upravovat a přidávat následující funkce stejně jako níže,
function myAlarm(title, message, recommendation)
{
return Alarm::alarmId(
Node,
true,
title,
message,
recommendation
);
}
Při nastavení prahové hodnoty na 20 přidejte tyto řádky níže přímo do příkazu if podmínky, kde je prahová hodnota dosažena nad danou prahovou hodnotou.
myAlarmId = myAlarm(TITLE, msg, ADVICE_WARNING);
// Let's raise an alarm.
host.raiseAlarm(myAlarmId, Warning);
Here's the complete script with my modifications in bold,
#include "common/mysql_helper.js"
var DESCRIPTION="This advisor calculates the percentage of threads_connected over max_connections,"
" if the percentage is higher than 20% you will be notified,"
" preventing your database server from becoming unstable.";
var WARNING_THRESHOLD=20;
var TITLE="Connections currently used";
var ADVICE_WARNING="You are using more than " + WARNING_THRESHOLD +
"% of the max_connections."
" Consider regulating load, e.g by using HAProxy. Using up all connections"
" may render the database server unusable.";
var ADVICE_OK="The percentage of currently used connections is satisfactory." ;
function myAlarm(title, message, recommendation)
{
return Alarm::alarmId(
Node,
true,
title,
message,
recommendation
);
}
function main()
{
var hosts = cluster::mySqlNodes();
var advisorMap = {};
for (idx = 0; idx < hosts.size(); ++idx)
{
host = hosts[idx];
map = host.toMap();
connected = map["connected"];
var advice = new CmonAdvice();
print(" ");
print(host);
print("==========================");
if (!connected)
{
print("Not connected");
continue;
}
var Threads_connected = host.sqlStatusVariable("Threads_connected");
var Max_connections = host.sqlSystemVariable("Max_connections");
if (Threads_connected.isError() || Max_connections.isError())
{
justification = "";
msg = "Not enough data to calculate";
}
else
{
var used = round(100 * Threads_connected / Max_connections,1);
if (used > WARNING_THRESHOLD)
{
advice.setSeverity(1);
msg = ADVICE_WARNING;
justification = used + "% of the connections is currently used,"
" which is > " + WARNING_THRESHOLD + "% of max_connections.";
myAlarmId = myAlarm(TITLE, msg, ADVICE_WARNING);
// Let's raise an alarm.
host.raiseAlarm(myAlarmId, Warning);
}
else
{
justification = used + "% of the connections is currently used,"
" which is < 90% of max_connections.";
advice.setSeverity(0);
msg = ADVICE_OK;
}
}
advice.setHost(host);
advice.setTitle(TITLE);
advice.setJustification(justification);
advice.setAdvice(msg);
advisorMap[idx]= advice;
print(advice.toString("%E"));
}
return advisorMap;
}
K otestování můžete použít sysbench. V mém testu jsem proaktivně upozorněn odesláním alarmu. Toto mi bude zasláno také e-mailem nebo může být oznámeno, pokud máte integrovaná oznámení třetích stran. Viz snímek obrazovky níže,
Upozornění poradců ClusterControl
Úpravy nebo úpravy existujícího poradce v ClusterControl se použijí na všechny clustery. To znamená, že musíte ve skriptu zkontrolovat, zda má specifickou podmínku použitelnou pouze pro váš stávající cluster (buď MySQL nebo jiné podporované databáze od ClusterControl). Je to proto, že poradci ClusterControl jsou uloženi v jediném zdroji pouze prostřednictvím naší databáze cmon. Ty jsou získávány nebo získávány všemi clustery, které jste vytvořili v ClusterControl.
Můžete to udělat například ve skriptu:
var hosts =cluster::mySqlNodes();
var assistantMap ={};
print(hosts[1].clusterId());
Tento skript vytiskne ID clusteru. Jakmile získáte hodnotu, přiřaďte ji proměnné a použijte tuto proměnnou k vyhodnocení, zda je pravda, že toto konkrétní ID klastru je přijatelné nebo ne na základě požadovaného úkolu, který má provést váš poradce. Řekněme,
function main()
{
var hosts = cluster::mySqlNodes();
var advisorMap = {};
for (idx = 0; idx < hosts.size(); ++idx)
{
host = hosts[idx];
map = host.toMap();
connected = map["connected"];
var advice = new CmonAdvice();
print(" ");
print(host);
print("==========================");
if (host.clusterId() == 15)
{
print("Not applicable for cluster id == 15");
continue;
}
…
….
…..
což znamená, že pokud je to cluster_id ==15, pak stačí přeskočit nebo pokračovat na další smyčku.
Závěr
Vytvoření nebo úprava ClusterControl Advisors je dobrou příležitostí k využití skrytých funkcí, které vám ClusterControl může poskytnout. Může se zdát, že je skrytá, ale je to tam – jen se tato funkce používá méně. Poskytuje jednoduchou, ale výkonnou funkci nazvanou ClusterControl Domain Specific Language (CDSL), kterou lze použít pro extrémně obtížné úlohy, které ClusterControl postrádá. Ujistěte se, že znáte všechna upozornění a také vše nejprve otestujte, než to nakonec použijete ve svém produkčním prostředí.