Tech Life

Ilustrační obrázek

Percona XtraDB Cluster

13. 02. 2012 16:45    kategorie: Tech Life    autor: PMe    komentářů: 0

Percona XtraDB Cluster je prvním řešením pro MySQL, které se (limitně) přibližuje opravdovému clusterovému databázovému řešení pro InnoDB/XtraDB engine. Nejedná se o kompletně nové řešení, je postaveno na známých a ozkoušených technologiích, které se opravdu výborně spojily ve velmi zajimavý výsledek.
 

Percona XtraDB Cluster je momentálně v alfa verzi, ale již nyní ukazuje velký potenciál. Pod jeho hlavičkou se nacházejí následující technologie:

  • Percona MySQL server
  • Write SET REPlication patche
  • Galera 2.0

Využití těchto nástrojů přináší následující možnosti:

  • plně synchronní replikace
  • multi-master replikace
  • paralelní replikace
  • přidávání uzlů za “živa”

Trochu tyto možnosti rozeberu v kontextu toho, co umožnuje běžná MySQL. MySQL momentálně umožnuje asynchronní replikaci, kdy při přenosu server nečeká na potvrzení zápisu slavem (tj. data nemusí být konzistentní mezi uzly), nebo tzv. semisynchronní replikaci. Semisynchronní replikace přidává potvrzování navázání komunikace na úrovni TCP spojení, přičemž bohužel také trpí značným výkonovým propadem).

Multi-master replikace (tj. stav kdy jeden slave ma více masterů, ze kterých replikuje data), je na běžném MySQL serveru nedocílitelná (kromě, dle mého názoru, neprodukčních hacků). Cluster, už ze své podstaty, musí být schopen replikovat data z více uzlů současně.

Obří výhodou oproti “clusterovému řešení” typu master-master replikace, které provozujeme třeba na Datartu, přináší Percona MySQL Cluster možnost replikovat data ve více než jednom threadu. To výrazně navyšuje potencíální propustnost celého řešení; déle trvající dotazy nezpůsobí zastavení celé replikace.

Synchronizace dat

Standardní verze Galery umožnuje iniciální synchronizaci uzlů pomocí dvou metod - mysqldumpem a rsyncem. Obě metody jsou blokující, proto Percona přidává svůj zálohovací tool xtrabackup umožnující neblokující provisioning uzlů. Po krátkodobém výpadku uzlu z clusteru umožnuje Galera ve verzi 2, kterou Percona XtraDB Cluster používá, doreplikovat data pomocí funkce IST (Incremental State Transfer). Ta zajišťuje, že v případě krátkodobého výpadku jednoho z uzlů se data mohou doreplikovat z cache jiného, v clusteru aktivního, uzlu. Tím výrazně zrychluje čas potřebný k obnově uzlu, například při rebootu stroje po aktualizaci jádra systému.

Vytvoření clusteru

Percona XtraDB Cluster se vytvoří relativně snadno. Nejprve nainstalujeme potřebné balíčky:
rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm
rpm -Uhv http://repo.percona.com/testing/centos/6/os/noarch/percona-testing-0.0-1.noarch.rpm
yum install Percona-XtraDB-Cluster-server Percona-XtraDB-Cluster-client xtrabackup

Pak provedeme iniciální konfiguraci na jednotlivých uzlech následovně:

Uzel 1 (my.cnf):
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

binlog_format=ROW

wsrep_provider=/usr/lib64/libgalera_smm.so
wsrep_provider_options=″ist.recv_addr=178.238.35.103″
wsrep_sst_receive_address=″178.238.35.103″
wsrep_cluster_address=gcomm://

wsrep_slave_threads=2
wsrep_cluster_name=etncluster
wsrep_sst_method=rsync
#wsrep_sst_method=xtrabackup
wsrep_node_name=node1

innodb_locks_unsafe_for_binlog=1
innodb_autoinc_lock_mode=2

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

Uzel 2:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

binlog_format=ROW

wsrep_provider=/usr/lib64/libgalera_smm.so
wsrep_cluster_address=gcomm://178.238.35.103
wsrep_provider_options=”ist.recv_addr=178.238.35.106″
wsrep_sst_receive_address=”178.238.35.106″

wsrep_slave_threads=2
wsrep_cluster_name=etncluster
wsrep_sst_method=rsync
#wsrep_sst_method=xtrabackup
wsrep_node_name=node2

innodb_locks_unsafe_for_binlog=1
innodb_autoinc_lock_mode=2

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

Uzel 3:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

binlog_format=ROW

wsrep_provider=/usr/lib64/libgalera_smm.so
wsrep_provider_options=”ist.recv_addr=178.238.35.105″
wsrep_sst_receive_address=”178.238.35.105″
wsrep_cluster_address=gcomm://178.238.35.103

wsrep_slave_threads=2
wsrep_cluster_name=etncluster
wsrep_sst_method=rsync
#wsrep_sst_method=xtrabackup
wsrep_node_name=node3

innodb_locks_unsafe_for_binlog=1
innodb_autoinc_lock_mode=2

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

Po nastartování MySQL provedeme jednoduchý test:
create table testik (
id int PRIMARY KEY auto_increment,
jmeno varchar(255),
prijmeni varchar(255)
);

insert into testik(jmeno,prijmeni) values("petr","medonos");

a vypíšeme si obsah tabulky na jednotlivých uzlech:

node1:
mysql> select * from testik;
+----+-------+----------+
| id | jmeno | prijmeni |
+----+-------+----------+
| 1 | petr | medonos |
+----+-------+----------+
1 row in set (0.00 sec)

node2:
mysql> select * from testik;
+----+-------+----------+
| id | jmeno | prijmeni |
+----+-------+----------+
| 1 | petr | medonos |
+----+-------+----------+
1 row in set (0.00 sec)

node3:
mysql> select * from testik;
+----+-------+----------+
| id | jmeno | prijmeni |
+----+-------+----------+
| 1 | petr | medonos |
+----+-------+----------+
1 row in set (0.00 sec)

Závěrem bych upozornil pouze na limitace tohoto řešení, které jsou posány ve wiki Galery.
V pokračovnání (jestli se k němu dostanu :)) se již podíváme na nějaké pokročilejší výkonové testy.

Sdílet odkaz:
tisk

Diskuze k článku

K článku nebyl zatím přidán komentář.

Přidat příspěvek

 

Kontakt pro média


Máte zájem o další informace, odborný článek či přednášku na konferenci? Kontaktujte nás prosím na pr@etnetera.cz.

RSS - Tech life


RSS kanál Tech Life Blogu

Offlineblog

Offlineblog

Ljama


Komix z prostředí imaginární firmy.

ljama

Ještě jste ho nečetli? Tak tudy ...

 
Doporučujeme: Nabídka práce, volná pracovní místa - pracovní portál SPRÁVNÝKROK.CZ