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

Jak Bootstrap MySQL nebo MariaDB Galera Cluster - Aktualizováno

Na rozdíl od standardního MySQL serveru a MySQL Clusteru je způsob spuštění MySQL/MariaDB Galera Cluster trochu odlišný. Galera vyžaduje, abyste spustili uzel v clusteru jako referenční bod, než se zbývající uzly budou moci připojit a vytvořit cluster. Tento proces je známý jako cluster bootstrap. Bootstrapping je prvním krokem k zavedení databázového uzlu jako primární komponenty, než jej ostatní uvidí jako referenční bod pro synchronizaci dat.

Jak to funguje?

Když Galera spustí příkaz bootstrap na uzlu, tento konkrétní uzel dosáhne primárního stavu (zkontrolujte hodnotu wsrep_cluster_status). Zbývající uzly budou vyžadovat pouze normální příkaz ke spuštění a automaticky vyhledají existující primární komponentu (PC) v klastru a spojí se, aby vytvořily klastr. Synchronizace dat pak probíhá buď prostřednictvím inkrementálního přenosu stavu (IST) nebo přenosu stavu snímku (SST) mezi spojujícím a dárcem.

V zásadě byste tedy měli zavést cluster pouze v případě, že chcete spustit nový cluster nebo když žádné jiné uzly v clusteru nejsou ve stavu PRIMÁRNÍ. Při volbě akce byste měli být opatrní, jinak byste mohli skončit s rozdělenými clustery nebo ztrátou dat.

Následující ukázkové scénáře ilustrují, kdy zavést tříuzlový cluster na základě stavu uzlu (wsrep_local_state_comment) a stavu clusteru (wsrep_cluster_status):

Galera State Bootstrap Flow
  1. Restartujte uzel INICIALIZOVANÝ.
  1. Restartujte uzel INICIALIZOVANÝ.
  2. Po dokončení spusťte nový uzel.
  1. Zaveďte nejpokročilejší uzel pomocí „pc.bootstrap=1“.
  2. Restartujte zbývající uzly, jeden uzel po druhém.
  1. Spusťte nový uzel.
  1. Spusťte nový uzel, jeden uzel po druhém.
  1. Zaveďte jakýkoli uzel.
  2. Spusťte zbývající uzly, po jednom.

Jak spustit Galera Cluster?

Prodejci 3 Galera používají různé bootstrapovací příkazy (na základě nejnovější verze softwaru). Na prvním uzlu spusťte:

  • MySQL Galera Cluster (Codership):

    $ service mysql bootstrap # sysvinit
    $ galera_new_cluster # systemd
    $ mysqld_safe --wsrep-new-cluster # command line
  • Percona XtraDB Cluster (Percona):

    $ service mysql bootstrap-pxc # sysvinit
    $ systemctl start [email protected] # systemd
  • Klastr MariaDB Galera (MariaDB):

    $ service mysql bootstrap # sysvinit
    $ service mysql start --wsrep-new-cluster # sysvinit
    $ galera_new_cluster # systemd
    $ mysqld_safe --wsrep-new-cluster # command line

Výše uvedený příkaz je pouze obal a to, co ve skutečnosti dělá, je spuštění instance MySQL na tomto uzlu s gcomm:// jako proměnnou wsrep_cluster_address. Můžete také ručně definovat proměnné uvnitř my.cnf a spustit standardní příkaz start/restart. Nezapomeňte však po spuštění znovu změnit wsrep_cluster_address zpět, aby obsahoval adresy všech uzlů.

Když je první uzel aktivní, spusťte následující příkaz na následujících uzlech:

$ service mysql start
$ systemctl start mysql

Nový uzel se připojí ke členům klastru, jak je definováno parametrem wsrep_cluster_address. Nyní automaticky načte mapu clusteru a připojí se ke zbytku uzlů a vytvoří cluster.

Varování:Nikdy nespouštějte bootstrap, když chcete znovu připojit uzel ke stávajícímu clusteru, a NIKDY nespouštějte bootstrap na více než jednom uzlu.

Příznak bezpečného spuštění

Galera počínaje verzí 3.19 přichází s novým příznakem s názvem „safe_to_bootstrap“ uvnitř grastate.dat. Tento příznak usnadňuje rozhodování a zabraňuje nebezpečným volbám tím, že sleduje pořadí, ve kterém jsou uzly vypínány. Uzel, který byl vypnut jako poslední, bude označen jako „Safe-to-Bootstrap“. Všechny ostatní uzly budou označeny jako nebezpečné pro bootstrap.

Když se podíváte na obsah grastate.dat (výchozí je pod MySQL datadir), měli byste si všimnout příznaku na posledním řádku:

# GALERA saved state
version: 2.1
uuid:    8bcf4a34-aedb-14e5-bcc3-d3e36277729f
seqno:   2575
safe_to_bootstrap: 0

Při bootstrapování nového clusteru Galera odmítne spustit první uzel, který byl označen jako nebezpečný pro bootstrap. V protokolech uvidíte následující zprávu:

„Zavedení clusteru z tohoto uzlu nemusí být bezpečné. Nebyla to poslední, která opustila cluster a nemusí obsahovat všechny aktualizace.

Chcete-li vynutit bootstrap clusteru s tímto uzlem, upravte soubor grastate.dat ručně a nastavte safe_to_bootstrap na 1.“

V případě nečistého vypnutí nebo tvrdého pádu budou mít všechny uzly „safe_to_bootstrap:0“, takže musíme konzultovat úložiště InnoDB, abychom zjistili, který uzel provedl poslední transakci v clusteru. Toho lze dosáhnout spuštěním mysqld s proměnnou „--wsrep-recover“ na každém z uzlů, což vytvoří výstup podobný tomuto:

$ mysqld --wsrep-recover
...
2016-11-18 01:42:15 36311 [Note] InnoDB: Database was not shutdown normally!
2016-11-18 01:42:15 36311 [Note] InnoDB: Starting crash recovery.
...
2016-11-18 01:42:16 36311 [Note] WSREP: Recovered position: 8bcf4a34-aedb-14e5-bcc3-d3e36277729f:114428
...

Číslo za řetězcem UUID na řádku "Obnovená pozice" je to, co je třeba hledat. Vyberte uzel, který má nejvyšší číslo, a upravte jeho grastate.dat na hodnotu „safe_to_bootstrap:1“, jak je znázorněno v příkladu níže:

# GALERA saved state
version: 2.1
uuid:    8bcf4a34-aedb-14e5-bcc3-d3e36277729f
seqno:   -1
safe_to_bootstrap: 1

Poté můžete na zvoleném uzlu provést standardní příkaz bootstrap.

Co když se uzly rozcházejí?

Za určitých okolností se mohou uzly od sebe rozcházet. Stav všech uzlů se může změnit na Neprimární kvůli rozdělení sítě mezi uzly, selhání clusteru nebo pokud Galera narazí na výjimku při určování Primární komponenty. Poté budete muset vybrat uzel a povýšit jej na Primární komponentu.

Chcete-li určit, který uzel je třeba zavést, porovnejte hodnotu wsrep_last_committed na všech uzlech DB:

node1> SHOW STATUS LIKE 'wsrep_%';
+----------------------+-------------+
| Variable_name        | Value       |
+----------------------+-------------+
| wsrep_last_committed | 10032       |
...
| wsrep_cluster_status | non-Primary |
+----------------------+-------------+
node2> SHOW STATUS LIKE 'wsrep_%';
+----------------------+-------------+
| Variable_name        | Value       |
+----------------------+-------------+
| wsrep_last_committed | 10348       |
...
| wsrep_cluster_status | non-Primary |
+----------------------+-------------+
node3> SHOW STATUS LIKE 'wsrep_%';
+----------------------+-------------+
| Variable_name        | Value       |
+----------------------+-------------+
| wsrep_last_committed |   997       |
...
| wsrep_cluster_status | non-Primary |
+----------------------+-------------+

Z výše uvedených výstupů má node2 nejaktuálnější data. V tomto případě jsou všechny uzly Galera již spuštěny, takže nemusíte nutně znovu zavádět cluster. Potřebujeme pouze povýšit node2 na primární komponentu:

node2> SET GLOBAL wsrep_provider_options="pc.bootstrap=1";

Zbývající uzly se poté znovu připojí k primární součásti (node2) a znovu synchronizují svá data na základě tohoto uzlu.

Pokud používáte ClusterControl (vyzkoušejte zdarma), můžete zjistit wsrep_last_committed a wsrep_cluster_status přímo z ClusterControl> Přehled strana:

Nebo z ClusterControl> Výkon> Stav DB stránka:


  1. Databázový model pro online průzkum. Část 2

  2. Chyba PostgreSQL 'Nelze se připojit k serveru:Žádný takový soubor nebo adresář'

  3. Instalace Oracle 12c selhala při přístupu k dočasnému umístění

  4. Enterprise Manager 11g FMW Control v R12.2