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

Vytvoření horkého pohotovostního režimu na Amazon AWS pomocí MariaDB Cluster

Galera Cluster 4.0 byla poprvé vydána jako součást MariaDB 10.4 a v této verzi je mnoho významných vylepšení. Nejpůsobivější funkcí v této verzi je Streaming Replication, která je navržena tak, aby zvládla následující problémy.

  • Problémy s dlouhými transakcemi
  • Problémy s velkými transakcemi
  • Problémy s aktivními body v tabulkách

V předchozím blogu jsme se hluboce ponořili do nové funkce replikace streamování v blogu dvoudílné série (část 1 a část 2). Součástí této nové funkce v Galera 4.0 jsou nové systémové tabulky, které jsou velmi užitečné pro dotazování a kontrolu uzlů Galera Cluster a také protokolů, které byly zpracovány v Streaming Replication.

V předchozích blozích jsme vám také ukázali snadný způsob nasazení MySQL Galera Cluster na AWS a také jak nasadit MySQL Galera Cluster 4.0 na Amazon AWS EC2.

Percona zatím nevydala GA pro svůj Percona XtraDB Cluster (PXC) 8.0, protože některé funkce jsou stále ve vývoji, jako je funkce MySQL wsrep WSREP_SYNC_WAIT_UPTO_GTID, která podle všeho ještě není (alespoň na verzi PXC 8.0.15-5-27dev.4.2). Přesto, až bude PXC 8.0 vydán, bude nabitý skvělými funkcemi, jako je...

  • Vylepšený odolný cluster
  • Cloud přátelský cluster
  • vylepšené balení
  • Podpora šifrování
  • Atomový DDL

Zatímco čekáme na vydání PXC 8.0 GA, v tomto blogu probereme, jak můžete vytvořit Hot Standby Node na Amazon AWS pro Galera Cluster 4.0 pomocí MariaDB.

Co je to horký pohotovostní režim?

Hot standby je běžný termín ve výpočetní technice, zejména na vysoce distribuovaných systémech. Je to metoda redundance, při které jeden systém běží současně s identickým primárním systémem. Když dojde k poruše na primárním uzlu, pohotovostní režim okamžitě převezme místo primárního systému. Data jsou zrcadlena do obou systémů v reálném čase.

U databázových systémů je horký pohotovostní server obvykle druhým uzlem po primárním hlavním serveru, který běží na výkonných prostředcích (stejných jako hlavní). Aby tento sekundární uzel správně fungoval, musí být stejně stabilní jako primární hlavní uzel.

Slouží také jako uzel pro obnovu dat, pokud selže hlavní uzel nebo celý cluster. Uzel v horkém pohotovostním režimu nahradí selhávající uzel nebo cluster a zároveň bude nepřetržitě obsluhovat požadavky klientů.

V Galera Cluster mohou všechny servery, které jsou součástí clusteru, sloužit jako pohotovostní uzel. Pokud však region nebo celý klastr klesne, jak se s tím budete moci vyrovnat? Jednou z možností je vytvoření pohotovostního uzlu mimo konkrétní oblast nebo síť vašeho clusteru.

V následující části vám ukážeme, jak vytvořit pohotovostní uzel na AWS EC2 pomocí MariaDB.

Nasazení Hot Standby na Amazon AWS

Dříve jsme vám ukázali, jak můžete vytvořit Galera Cluster na AWS. Možná si budete chtít přečíst Nasazení MySQL Galera Cluster 4.0 na Amazon AWS EC2 pro případ, že jste s Galera 4.0 noví.

Nasazení vašeho aktivního pohotovostního uzlu může být na jiné sadě Galera Cluster, který používá synchronní replikaci (podívejte se na tento blog Zero Downtime Network Migration With MySQL Galera Cluster Using Relay Node) nebo nasazením asynchronního MySQL/MariaDB uzlu . V tomto blogu nastavíme a nasadíme hot standby uzel, který se asynchronně replikuje z jednoho z uzlů Galera.

Nastavení Galera Cluster

V tomto ukázkovém nastavení jsme nasadili 3uzlový cluster pomocí MariaDB verze 10.4.8. Tento cluster je nasazován v oblasti východu USA (Ohio) a topologie je uvedena níže:

Jako hlavní server pro naši asynchronní podřízenou jednotku použijeme server 172.31.26.175 který bude sloužit jako pohotovostní uzel.

Nastavení instance EC2 pro uzel Hot Standby

V konzole AWS přejděte na EC2 v části Compute a kliknutím na Launch Instance vytvořte instanci EC2 stejně jako níže.

Tuto instanci vytvoříme v oblasti Západ USA (Oregon). Pro váš typ operačního systému si můžete vybrat, jaký server se vám líbí (preferuji Ubuntu 18.04) a vybrat typ instance na základě preferovaného cílového typu. Pro tento příklad použiji t2.micro, protože nevyžaduje žádné sofistikované nastavení a je určen pouze pro toto ukázkové nasazení.

Jak jsme již uvedli, je nejlepší, aby byl váš aktivní pohotovostní uzel umístěn v jiné oblasti a nebyl umístěn ve stejné oblasti. Takže v případě, že regionální datové centrum selže nebo utrpí výpadek sítě, může být váš horký pohotovostní režim vaším cílem přepnutí při selhání, když se něco pokazí.

Než budeme pokračovat, v AWS budou mít různé regiony svůj vlastní virtuální privátní cloud (VPC) a vlastní síť. Abychom mohli komunikovat s uzly clusteru Galera, musíme nejprve definovat VPC peering, aby uzly mohly komunikovat v rámci infrastruktury Amazonu a nemusely vycházet mimo síť, což jen zvyšuje režii a obavy o bezpečnost.

Nejprve přejděte do svého VPC, kde se bude nacházet váš hot standby uzel, a poté přejděte na Peering Connections. Poté musíte zadat VPC vašeho pohotovostního uzlu a VPC clusteru Galera. V níže uvedeném příkladu mám nás-západ-2 propojené s nám-východ-2.

Po vytvoření uvidíte položku pod peeringovými připojeními. Musíte však přijmout požadavek z VPC clusteru Galera, který je v tomto příkladu na nás-východ-2. Viz níže,

Po přijetí nezapomeňte přidat CIDR do směrovací tabulky. Podívejte se na tento externí blog VPC Peering o tom, jak to udělat po VPC Peering.

Nyní se vraťme a pokračujte ve vytváření uzlu EC2. Ujistěte se, že vaše skupina zabezpečení má správná pravidla nebo požadované porty, které je třeba otevřít. Další informace naleznete v příručce k nastavení brány firewall. Pro toto nastavení jsem pouze nastavil Veškerý provoz tak, aby byl přijat, protože se jedná pouze o test. Viz níže,

Při vytváření instance se ujistěte, že jste nastavili správné VPC a definovali vaši správnou podsíť. Můžete se podívat na tento blog, pokud byste s tím potřebovali pomoct.

Nastavení MariaDB Async Slave

Krok jedna

Nejprve musíme nastavit úložiště, přidat klíče úložiště a aktualizovat seznam balíčků v mezipaměti úložiště,

$ vi /etc/apt/sources.list.d/mariadb.list

$ apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8

$ apt update

Krok dva

Nainstalujte balíčky MariaDB a jejich požadované binární soubory

$ apt-get install mariadb-backup  mariadb-client mariadb-client-10.4 libmariadb3 libdbd-mysql-perl mariadb-client-core-10.4 mariadb-common mariadb-server-10.4 mariadb-server-core-10.4 mysql-common

Krok tři

Nyní udělejme zálohu pomocí xbstream k přenosu souborů do sítě z jednoho z uzlů v našem clusteru Galera.

## Vymažte datadir nově čerstvě nainstalovaného MySQL ve vašem aktivním pohotovostním uzlu.

$ systemctl stop mariadb

$ rm -rf /var/lib/mysql/*

## Poté v aktivním pohotovostním uzlu spusťte toto na terminálu,

$ socat -u tcp-listen:9999,reuseaddr stdout 2>/tmp/netcat.log | mbstream -x -C /var/lib/mysql

## Poté na cílovém hlavním serveru, tj. jednom z uzlů ve vašem clusteru Galera (což je v tomto příkladu uzel 172.31.28.175), spusťte toto na terminálu,

$ mariabackup  --backup --target-dir=/tmp --stream=xbstream | socat - TCP4:172.32.31.2:9999

kde 172.32.31.2 je IP pohotovostního uzlu hostitele.

Krok čtyři

Připravte si konfigurační soubor MySQL. Protože je to v Ubuntu, upravuji soubor v /etc/mysql/my.cnf a s následujícím příkladem my.cnf převzatým z naší šablony ClusterControl,

[MYSQLD]

user=mysql

basedir=/usr/

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

pid_file=/var/lib/mysql/mysql.pid

port=3306

log_error=/var/log/mysql/mysqld.log

log_warnings=2

# log_output = FILE



#Slow logging    

slow_query_log_file=/var/log/mysql/mysql-slow.log

long_query_time=2

slow_query_log=OFF

log_queries_not_using_indexes=OFF



### INNODB OPTIONS

innodb_buffer_pool_size=245M

innodb_flush_log_at_trx_commit=2

innodb_file_per_table=1

innodb_data_file_path = ibdata1:100M:autoextend

## You may want to tune the below depending on number of cores and disk sub

innodb_read_io_threads=4

innodb_write_io_threads=4

innodb_doublewrite=1

innodb_log_file_size=64M

innodb_log_buffer_size=16M

innodb_buffer_pool_instances=1

innodb_log_files_in_group=2

innodb_thread_concurrency=0

# innodb_file_format = barracuda

innodb_flush_method = O_DIRECT

innodb_rollback_on_timeout=ON

# innodb_locks_unsafe_for_binlog = 1

innodb_autoinc_lock_mode=2

## avoid statistics update when doing e.g show tables

innodb_stats_on_metadata=0

default_storage_engine=innodb



# CHARACTER SET

# collation_server = utf8_unicode_ci

# init_connect = 'SET NAMES utf8'

# character_set_server = utf8



# REPLICATION SPECIFIC

server_id=1002

binlog_format=ROW

log_bin=binlog

log_slave_updates=1

relay_log=relay-bin

expire_logs_days=7

read_only=ON

report_host=172.31.29.72

gtid_ignore_duplicates=ON

gtid_strict_mode=ON



# OTHER THINGS, BUFFERS ETC

key_buffer_size = 24M

tmp_table_size = 64M

max_heap_table_size = 64M

max_allowed_packet = 512M

# sort_buffer_size = 256K

# read_buffer_size = 256K

# read_rnd_buffer_size = 512K

# myisam_sort_buffer_size = 8M

skip_name_resolve

memlock=0

sysdate_is_now=1

max_connections=500

thread_cache_size=512

query_cache_type = 0

query_cache_size = 0

table_open_cache=1024

lower_case_table_names=0

# 5.6 backwards compatibility (FIXME)

# explicit_defaults_for_timestamp = 1



performance_schema = OFF

performance-schema-max-mutex-classes = 0

performance-schema-max-mutex-instances = 0



[MYSQL]

socket=/var/lib/mysql/mysql.sock

# default_character_set = utf8

[client]

socket=/var/lib/mysql/mysql.sock

# default_character_set = utf8

[mysqldump]

socket=/var/lib/mysql/mysql.sock

max_allowed_packet = 512M

# default_character_set = utf8



[xtrabackup]



[MYSQLD_SAFE]

# log_error = /var/log/mysqld.log

basedir=/usr/

# datadir = /var/lib/mysql

Toto samozřejmě můžete změnit podle svého nastavení a požadavků.

Pátý krok

Připravte zálohu z kroku #3, tj. dokončete zálohu, která je nyní v aktivním pohotovostním uzlu spuštěním příkazu níže,

$ mariabackup --prepare --target-dir=/var/lib/mysql

Krok šest

Nastavte vlastnictví datového adresáře v aktivním pohotovostním uzlu

$ chown -R mysql.mysql /var/lib/mysql

Krok sedm

Nyní spusťte instanci MariaDB

$  systemctl start mariadb

Krok 8

Nakonec musíme nastavit asynchronní replikaci

## Vytvořte uživatele replikace na hlavním uzlu, tj. uzlu v clusteru Galera

MariaDB [(none)]> CREATE USER 'cmon_replication'@'172.32.31.2' IDENTIFIED BY 'PahqTuS1uRIWYKIN';

Query OK, 0 rows affected (0.866 sec)

MariaDB [(none)]> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'cmon_replication'@'172.32.31.2';

Query OK, 0 rows affected (0.127 sec)

## Získejte pozici GTID slave z xtrabackup_binlog_info následovně,

$  cat /var/lib/mysql/xtrabackup_binlog_info

binlog.000002   71131632 1000-1000-120454

##  Poté nastavte replikaci slave následovně,

MariaDB [(none)]> SET GLOBAL gtid_slave_pos='1000-1000-120454';

Query OK, 0 rows affected (0.053 sec)

MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='172.31.28.175', MASTER_USER='cmon_replication', master_password='PahqTuS1uRIWYKIN', MASTER_USE_GTID = slave_pos;

## Nyní zkontrolujte stav slave

MariaDB [(none)]> show slave status \G

*************************** 1. row ***************************

                Slave_IO_State: Waiting for master to send event

                   Master_Host: 172.31.28.175

                   Master_User: cmon_replication

                   Master_Port: 3306

                 Connect_Retry: 60

               Master_Log_File: 

           Read_Master_Log_Pos: 4

                Relay_Log_File: relay-bin.000001

                 Relay_Log_Pos: 4

         Relay_Master_Log_File: 

              Slave_IO_Running: Yes

             Slave_SQL_Running: Yes

               Replicate_Do_DB: 

           Replicate_Ignore_DB: 

            Replicate_Do_Table: 

        Replicate_Ignore_Table: 

       Replicate_Wild_Do_Table: 

   Replicate_Wild_Ignore_Table: 

                    Last_Errno: 0

                    Last_Error: 

                  Skip_Counter: 0

           Exec_Master_Log_Pos: 4

               Relay_Log_Space: 256

               Until_Condition: None

                Until_Log_File: 

                 Until_Log_Pos: 0

            Master_SSL_Allowed: No

            Master_SSL_CA_File: 

            Master_SSL_CA_Path: 

               Master_SSL_Cert: 

             Master_SSL_Cipher: 

                Master_SSL_Key: 

         Seconds_Behind_Master: 0

 Master_SSL_Verify_Server_Cert: No

                 Last_IO_Errno: 0

                 Last_IO_Error: 

                Last_SQL_Errno: 0

                Last_SQL_Error: 

   Replicate_Ignore_Server_Ids: 

              Master_Server_Id: 1000

                Master_SSL_Crl: 

            Master_SSL_Crlpath: 

                    Using_Gtid: Slave_Pos

                   Gtid_IO_Pos: 1000-1000-120454

       Replicate_Do_Domain_Ids: 

   Replicate_Ignore_Domain_Ids: 

                 Parallel_Mode: conservative

                     SQL_Delay: 0

           SQL_Remaining_Delay: NULL

       Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it

              Slave_DDL_Groups: 0

Slave_Non_Transactional_Groups: 0

    Slave_Transactional_Groups: 0

1 row in set (0.000 sec)

Přidání uzlu aktivního pohotovostního režimu do ClusterControl

Pokud používáte ClusterControl, je snadné monitorovat stav databázového serveru. Chcete-li jej přidat jako podřízenou jednotku, vyberte cluster uzlů Galera, který máte, a poté přejděte na tlačítko výběru, jak je znázorněno níže, a přidejte podřízenou replikaci:

Klikněte na Přidat replikační podřízenou jednotku a zvolte přidání stávající podřízené jednotky jako níže,

Naše topologie vypadá slibně.

Jak jste si mohli všimnout, náš uzel 172.32.31.2 slouží jako náš aktivní pohotovostní režim uzel má jiný CIDR, který má předponu 172,32.% us-západ-2 (Oregon), zatímco ostatní uzly mají 172,31.% umístěné na us-východ-2 (Ohio). Jsou zcela v jiné oblasti, takže v případě, že dojde k selhání sítě na uzlech Galera, můžete přepnout na záložní uzel.

Závěr

Vytvoření Hot Standby na Amazon AWS je snadné a přímočaré. Vše, co potřebujete, je určit požadavky na kapacitu a topologii sítě, zabezpečení a protokoly, které je třeba nastavit.

Použití VPC Peering pomáhá urychlit vzájemnou komunikaci mezi různými regiony, aniž by bylo nutné přejít na veřejný internet, takže připojení zůstává v rámci síťové infrastruktury Amazon.

Použití asynchronní replikace s jedním slavem samozřejmě nestačí, ale tento blog slouží jako základ pro to, jak to můžete zahájit. Nyní můžete snadno vytvořit další cluster, kde se replikuje asynchronní slave, a vytvořit další řadu clusterů Galera sloužících jako vaše uzly zotavení po havárii, nebo můžete také použít proměnnou gmcast.segment v Galeře k synchronní replikaci, stejně jako to, co máme na tomto blogu.


  1. Návrat z funkce s parametrem OUT

  2. Další z mých oblíbených PostgreSQL dotazů – a proč na nich také záleží

  3. Chyba MySql:Nelze aktualizovat tabulku v uložené funkci/spouštěči, protože ji již používá příkaz, který tuto uloženou funkci/spouštěč vyvolal

  4. Jak mohu chránit uživatelské jméno a heslo MySQL před dekompilací?