Galera
Aktuaalsus
Järgnev juhend on aktuaalne 13. jaanuari seisuga 2015. Kasutatakse CentOS 6 64-bitist versiooni.
Sissejuhatus
Galera Cluster on sünkroonne multi-master andmebaasiklaster MariaDB jaoks. [1]
Eelised:
- Sünkroonne reapõhine replikeerimine
- Active-active multi-master topoloogia (võib kirjutada ja lugeda ükskõik milliselt klastri liikmelt)
- Automaatne klastriga liitumine
- Hea ülevaade klastri liikmete üle
- Kliendipool on täpselt samasugune MySQLiga
- Kiirus
- Töökindlus
Kuna Galera klastris on kõik aktiivsed (masterid), on väga lihtne teostada koormuse jaotamist ja/või implementeerida High Availability.
Seadistamine
Minimaalselt on vaja kolme liiget, kuna kahe liikme puhul võib tekkida split brain. Kolme liikme puhul saab toimuda nö hääletus, kus olemasolevad liikmed saavad omavahel klastri seisu kokku leppida. [3]
Kasutame järgmiseid IP'sid:
IP | masin |
---|---|
10.0.0.101 | node01 |
10.0.0.102 | node02 |
10.0.0.103 | node03 |
Lisame vajalikud repod:
MariaDB:
Loome uue faili
vim /etc/yum.repos.d/MariaDB.repo
Ning lisame sinna
/etc/yum.repos.d/MariaDB.repo
[mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.0/centos6-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
Percona:
Percona repo lisamine on lihtne, see on paigaldatav eraldi paketina.
yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
Paigaldame vajalikud paketid:
yum install MariaDB-Galera-server MariaDB-client galera percona-xtrabackup nc
Käivitame MariaDB:
service mysql start
Käivitame MariaDB esmase konfiguratsiooniskripti:
Tegemist on lihtsate jah/ei stiilis küsimustega, millele vastamisega ei tohiks probleeme tulla.
mysql_secure_installation
Logime andmebaasi sisse:
mysql -uroot -p
Seejärel loome vajalikud kasutajad andmebaasi, mida Galeral vaja läheb:
use mysql; update user set host='%' where user='root' and host='localhost'; create user xtrabackup@'%' identified by 'salajane-parool'; grant reload, lock tables, replication client on *.* to xtrabackup@'%'; flush privileges;
Peatame MariaDB, et saaks alustada seadistamist:
service mysql stop
Konfigureerimine klastri esimese liikme (node01):
Avame faili
vim /etc/my.cnf.d/server.conf
Ning asendame sisu järgnevaga:
/etc/my.cnf.d/server.conf
[mysqld] port=3306 datadir=/var/lib/mysql query_cache_size=0 binlog_format=ROW default_storage_engine=innodb innodb_autoinc_lock_mode=2 wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_provider_options="gcache.size=1G" wsrep_cluster_address=gcomm://10.0.0.101,10.0.0.102,10.0.0.103 wsrep_cluster_name='galera' wsrep_node_address='10.0.0.101' wsrep_node_name='node01' wsrep_sst_method=xtrabackup-v2 wsrep_sst_auth=xtrabackup:salajane-parool
Käivitame Galera klastri:
service mysql bootstrap
Seejärel peaks sarnaselt ära konfigureerima teise ja kolmanda liikme.
Ainsad muudatused tuleks teha /etc/my.cnf.d/server.conf
failis, kus tuleks ära muuta wsrep_node_address
ning wsrep_node_name
. Ülejäänud sammud/konfiguratsioon jäävad samaks.
Seejärel tuleks node02 ja node03 lisada klastrisse, mis on lihtsalt
service mysql start
Soovi korral võib MariaDB lisada ka automaatselt käivitatavaks:
chkconfig mysql on
Load balancing
Antud näite puhul kasutame masinaid endaid koormuse jaoturitena. Seetõttu on järgnev näide natukene veider, sest tekib selline olukord, kus näiteks IP järgi pöördutakse node01 poole, aga tegelikult suunatakse node02 andmebaasi poole. Reaalses elus oleks selle jaoks eraldi masinad, mis seisavad eraldi andmebaasiserverite ees.
Koormuse jaotamise jaoks kasutame programmi nimega HAProxy.
Seadistamine
Paigaldame HAProxy:
yum install haproxy
HAProxy hakkab meil istuma MariaDB asemel, port 3306 peal. Seetõttu peame sättima kõikides klastri liikmetes, et MariaDB kuulaks teise pordi peal (näiteks 3307).
Selle jaoks avame /etc/my.cnf.d/server.conf
faili ning muudame pordi ära:
/etc/my.cnf.d/server.conf
... port=3307 ...
HAProxy konfiguratsioonifail asub /etc/haproxy
kaustas. Vana konfiguratsiooni võib ära kustutada ning täielikult asendada järgnevaga.
Avame faili /etc/haproxy/haproxy.cfg
ning lisame sinna järgneva:
/etc/haproxy/haproxy.cfg
global log 127.0.0.1 local0 notice user haproxy group haproxy defaults log global retries 2 timeout connect 1000 timeout server 5000 timeout client 5000 listen mariadb-cluster bind 0.0.0.0:3306 mode tcp option mysql-check user haproxy balance roundrobin server node01 10.0.0.101:3307 check server node02 10.0.0.102:3307 check server node03 10.0.0.103:3307 check
Konfiguratsioon peaks olema igas klastri liikmes identne. Siinkohal kasutame roundrobin algoritmi, mis lihtsalt vaheldumisi käib kõik liikmed läbi. [5]
Lisaks peame ka andmebaasi tegema HAProxy jaoks kasutajad. Mingeid õigusi anda pole vaja, HAProxy kasutab seda kasutajat lihtsalt kontrollimiseks.
Logime andmebaasi sisse (vahet ei ole, millises masinas):
mysql -uroot -p
Loome kasutajad:
create user haproxy@10.0.0.101; create user haproxy@10.0.0.102; create user haproxy@10.0.0.103;
Käivitame teenuse (kõikides masinates):
service haproxy start
Seadistame, et teenus käivitataks automaatselt:
chkconfig haproxy on
High Availability
Võtame kasutusele veel ühe IP.
IP | masin |
---|---|
10.0.0.101 | node01 |
10.0.0.102 | node02 |
10.0.0.103 | node03 |
10.0.0.100 | floating IP |
See saab olema kõigi klastri liikmete ühine IP. Seadistame nii, et vaikimisi on see node01 küljes ning kui see maha peaks minema, läheb see node02 külge (ja seejärel node03).
Idee poolest peaks niimoodi tekkima High Availability klaster, mis teoorias peaks olema nullilähedase maasoleku ajaga (ainult teoorias!). Sellise seadistuse puhul võib tekkida aga väga palju ootamatuid olukordi ning võibolla ei ole see ka kõige parem mõte. [6][7]
Seadistamine
Paigaldame programmi keepalived:
yum install keepalived
Konfiguratsioonifail asub /etc/keepalived
kaustas. Vana konfiguratsiooni võib ära kustutada ning täielikult asendada järgnevaga.
Avame faili /etc/keepalived/keepalived.conf
ning lisame sinna järgnevad read:
/etc/keepalived/keepalived.conf
global_defs { lvs_id MDB1 } vrrp_sync_group SyncGroup01 { group { FloatIP1 } } vrrp_script check_haproxy { script "killall -0 haproxy" interval 2 weight 2 } vrrp_instance FloatIP1 { state MASTER interface eth0 virtual_router_id 10 priority 103 advert_int 1 virtual_ipaddress { 10.0.0.100 } track_script { check_haproxy } }
Väljad mida sättida:
state
- seadistame, et node01 onMASTER
ning node02 ja node03SLAVE
.interface
- võrguliides, kuhu külge floating IP haagitakse. Enamasti on see eth0.priority
- kõrgem priority võidab. Seadistame, et node01 priority on 103, node02 102 ning node03 101.
Käivitame teenuse:
service keepalived start
Seadistame, et teenus käivitataks automaatselt:
chkconfig keepalived on
Kokkuvõte
MariaDB Galera klaster on üks töökindlamaid ja paindlikumaid andmebaasiklastreid. Sel on palju eeliseid tavapärase MySQL Master-Slave klastri ees; neist kõige suurem see, et Galera klastris on kõik liikmed aktiivsed (masterid). Seetõttu on väga lihtsasti teostatav koormuse jaotamine (load balancing) ning soovi korral ka High Availability. Lisaks, nagu siit artiklist ka näha, on kogu klastri üles seadmine ja konfigureerimine väga lihtne. Raske on aga edaspidine administreerimine ning tekkida võivate ootamatute olukordade lahendamine.
Kasutatud allikad
- What is MariaDB Galera Cluster?
- About Galera Replication
- Percona XtraDB Cluster: Failure Scenarios with only 2 nodes
- Avoiding a Split Brain in database mirroring
- HAProxy Configuration Manual
- high availability (HA)
- Failover is Evil
Kasulikud lingid
- MariaDB Galera Cluster - Gentoo Wiki
- MariaDB Galera Cluster with HA Proxy and Keepalived on Centos 6
- How to setup MariaDB Galera Cluster 10.0 on CentOS
- Avoiding Deadlocks in Galera
- SeveralNines Galera Configurator
- Two-node MariaDB-Galera-Cluster
- Setting up a MariaDB Galera Cluster in Centos 6
Autor
Gert Vaikre A31