Avís
Aquest article és antic i és possible que part de la informació estigui desactualitzada o ja no sigui vàlida actualment.
Si tens qualsevol dubte o necessites confirmar algun detall, et recomanem contactar amb el nostre equip de suport per rebre informació actualitzada i assistència personalitzada.
En aquest article us ensenyarem com instal·lar i configurar un clúster de MariaDB amb Galera; a més, hi afegirem un HAProxy per equilibrar la càrrega entre 2 nodes de MariaDB.
Un clúster de MariaDB s'ha de muntar amb un nombre senar de nodes. El motiu és senzill: si només hi ha dos nodes i un dels dos falla, no hi ha manera de saber quin és el corrupte.
Arribats a aquest punt, podem muntar el nostre clúster amb 3 nodes de MariaDB o 2 nodes + Galera Arbitrator. Galera Arbitrator no participa en la replicació, rep les mateixes dades que tots els altres nodes i participa a l'hora de prendre decisions. Per tant, si hi ha un problema en un node, prevaldrà la resposta del node no corrupte + Galera Arbitrator.
En aquest article farem servir 4 servidors amb Ubuntu 18.04:
- kb-mariadb-arbiter 10.20.10.33
- kb-mariadb-01 10.20.10.34
- kb-mariadb-02 10.20.10.35
- kb-haproxy-mariadb 10.20.10.36
Instal·lar i configurar kb-mariadb-01
Per instal·lar MariaDB, el primer que farem és afegir els repositoris de MariaDB corresponents a Ubuntu 18.04 i després instal·larem MariaDB:
# apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
# add-apt-repository 'deb [arch=amd64] http://mirror.zol.co.zw/mariadb/repo/10.3/ubuntu bionic main'
# apt update && apt install mariadb-serverAra que ja tenim MariaDB instal·lat, configurarem el clúster. Especificarem el nom del nostre clúster a wsrep_cluster_name. Especificarem les IP de l'altre node de MariaDB kb-mariadb-02 i de kb-mariadb-arbiter a wsrep_cluster_address. Finalment, configurarem la IP de kb-mariadb-01 a wsrep_node_address i el nom kb-mariadb-01 a wsrep_node_name. Tot això ho farem al fitxer /etc/mysql/conf.d/cluster.cnf.
[mysqld]
query_cache_size=0
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
query_cache_type=0
bind-address=0.0.0.0
innodb_file_per_table
collation-server = utf8_general_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8
join_buffer_size = 1M
# Configuració del proveïdor de Galera
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
#wsrep_provider_options="gcache.size=32G"
# Configuració del clúster de Galera
wsrep_cluster_name="kb_mariadb_cluster"
wsrep_cluster_address="gcomm://10.20.10.35,10.20.10.33"
# Configuració de la sincronització de Galera
wsrep_sst_method=rsync
#wsrep_sst_auth=user:pass
# Configuració del node de Galera
# ESPECIFICAR LES DADES DEL SERVIDOR LOCAL
wsrep_node_address="10.20.10.34"
wsrep_node_name="kb-mariadb-01"Ara aturarem el servei de MariaDB.
# systemctl stop mariadbConfigurarem variables i farem que MariaDB escolti a totes les IP; per fer-ho, editarem /etc/mysql/my.cnf.
#bind-address = 127.0.0.1
max_connections = 500
expire_logs_days = 5
wait_timeout = 28800
max_allowed_packet = 1G
connect_timeout = 6Instal·lar i configurar kb-mariadb-02
Per instal·lar MariaDB, el primer que farem és afegir els repositoris de MariaDB corresponents a Ubuntu 18.04 i després instal·larem MariaDB:
# apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
# add-apt-repository 'deb [arch=amd64] http://mirror.zol.co.zw/mariadb/repo/10.3/ubuntu bionic main'
# apt update && apt install mariadb-serverEspecificarem el nom del nostre clúster a wsrep_cluster_name. Especificarem les IP de l'altre node de MariaDB kb-mariadb-01 i de kb-mariadb-arbiter a wsrep_cluster_address. Finalment, configurarem la IP de kb-mariadb-02 a wsrep_node_address i el nom kb-mariadb-02 a wsrep_node_name. Tot això ho farem al fitxer /etc/mysql/conf.d/cluster.cnf.
[mysqld]
query_cache_size=0
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
query_cache_type=0
bind-address=0.0.0.0
innodb_file_per_table
collation-server = utf8_general_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8
join_buffer_size = 1M
# Configuració del proveïdor de Galera
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
#wsrep_provider_options="gcache.size=32G"
# Configuració del clúster de Galera
wsrep_cluster_name="kb_mariadb_cluster"
wsrep_cluster_address="gcomm://10.20.10.34,10.20.10.33"
# Configuració de la sincronització de Galera
wsrep_sst_method=rsync
#wsrep_sst_auth=user:pass
# Configuració del node de Galera
# ESPECIFICAR LES DADES DEL SERVIDOR LOCAL
wsrep_node_address="10.20.10.35"
wsrep_node_name="kb-mariadb-02"Ara aturarem el servei de MariaDB:
# systemctl stop mariadbAra copiarem els fitxers de configuració de MariaDB del node kb-mariadb-01:
# scp 10.20.10.34:/etc/mysql/debian.cnf /etc/mysql/
# scp 10.20.10.34:/etc/mysql/my.cnf /etc/mysql/Arrencar el clúster
Ja tenim tota la configuració a punt; arrencarem el clúster de MariaDB. Per fer-ho, executarem a kb-mariadb-01:
# galera_new_clusterAra arrencarem MariaDB al segon node kb-mariadb-02:
# systemctl start mariadbPodem veure que el clúster funciona executant:
# mysql -u root -p -e "SHOW STATUS LIKE 'wsrep%';"
+------------------------------+--------------------------------------+
| Variable_name | Value |
+------------------------------+--------------------------------------+
| wsrep_apply_oooe | 0.000000 |
| wsrep_apply_oool | 0.000000 |
| wsrep_apply_window | 0.000000 |
| wsrep_causal_reads | 0 |
| wsrep_cert_deps_distance | 0.000000 |
| wsrep_cert_index_size | 0 |
| wsrep_cert_interval | 0.000000 |
| wsrep_cluster_conf_id | 2 |
| wsrep_cluster_size | 2 |
| wsrep_cluster_state_uuid | 6e923943-9e67-11e9-b2bb-e27d46dd5c77 |
| wsrep_cluster_status | Primary |
| wsrep_cluster_weight | 2 |
| wsrep_commit_oooe | 0.000000 |
| wsrep_commit_oool | 0.000000 |
| wsrep_commit_window | 0.000000 |
| wsrep_connected | ON |
| wsrep_desync_count | 0 |
| wsrep_evs_delayed | |
| wsrep_evs_evict_list | |
| wsrep_evs_repl_latency | 0/0/0/0/0 |
| wsrep_evs_state | OPERATIONAL |
| wsrep_flow_control_paused | 0.000000 |
| wsrep_flow_control_paused_ns | 0 |
| wsrep_flow_control_recv | 0 |
| wsrep_flow_control_sent | 0 |
| wsrep_gcomm_uuid | 6e912571-9e67-11e9-9021-6b0cd63bb1cd |
| wsrep_incoming_addresses | 10.20.10.34:3306,10.20.10.35:3306 |
| wsrep_last_committed | 0 |
| wsrep_local_bf_aborts | 0 |
| wsrep_local_cached_downto | 18446744073709551615 |
| wsrep_local_cert_failures | 0 |
| wsrep_local_commits | 0 |
| wsrep_local_index | 0 |
| wsrep_local_recv_queue | 0 |
| wsrep_local_recv_queue_avg | 0.000000 |
| wsrep_local_recv_queue_max | 1 |
| wsrep_local_recv_queue_min | 0 |
| wsrep_local_replays | 0 |
| wsrep_local_send_queue | 0 |
| wsrep_local_send_queue_avg | 0.000000 |
| wsrep_local_send_queue_max | 1 |
| wsrep_local_send_queue_min | 0 |
| wsrep_local_state | 4 |
| wsrep_local_state_comment | Synced |
| wsrep_local_state_uuid | 6e923943-9e67-11e9-b2bb-e27d46dd5c77 |
| wsrep_open_connections | 0 |
| wsrep_open_transactions | 0 |
| wsrep_protocol_version | 9 |
| wsrep_provider_name | Galera |
| wsrep_provider_vendor | Codership Oy <info@codership.com> |
| wsrep_provider_version | 25.3.26(r3857) |
| wsrep_ready | ON |
| wsrep_received | 6 |
| wsrep_received_bytes | 427 |
| wsrep_repl_data_bytes | 0 |
| wsrep_repl_keys | 0 |
| wsrep_repl_keys_bytes | 0 |
| wsrep_repl_other_bytes | 0 |
| wsrep_replicated | 0 |
| wsrep_replicated_bytes | 0 |
| wsrep_thread_count | 2 |
+------------------------------+--------------------------------------+
61 rows in set (0.004 sec)Com podem veure a “wsrep_cluster_size”, el clúster està format per 2 nodes.
Instal·lar i configurar arbiter
Ara que ja tenim els nostres 2 nodes funcionant, en configurarem un tercer amb Galera Arbitrator. Com hem comentat al principi, no replicarà les dades de MySQL, però sí que rebrà els canvis, de manera que, davant d'una incongruència en algun node, ajudarà a decidir quin node no té errors. Per instal·lar Arbitrator, executarem:
# apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
# add-apt-repository 'deb [arch=amd64] http://mirror.zol.co.zw/mariadb/repo/10.3/ubuntu bionic main'
# apt install galera-arbitrator-3Ara crearem un fitxer de configuració indicant les dades del clúster existent a /etc/default/garb.
# Copyright (C) 2012 Coedership Oy
# Aquest fitxer de configuració s'ha de carregar des de l'script del servei garb.
# Una llista d'adreces de nodes (address[:port]) del clúster separades per espais
GALERA_NODES="10.20.10.34:4567 10.20.10.35:4567"
# Nom del clúster de Galera, ha de ser el mateix que a la resta de nodes.
GALERA_GROUP="kb_mariadb_cluster"
# Cadena opcional d'opcions internes de Galera (p. ex., paràmetres SSL)
# vegeu http://www.codership.com/wiki/doku.php?id=galera_parameters
GALERA_OPTIONS="pc.wait_prim=no"Ja podem arrencar i habilitar galera arbitrator:
# systemctl start garb
# systemctl enable garbPodem comprovar que s'ha afegit arbiter executant en algun dels 2 nodes amb MariaDB:
# mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size';"
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 3 |
+--------------------+-------+Instal·lar i configurar HAProxy
HAProxy és un programari que ens permet equilibrar la càrrega entre diversos servidors. Se sol fer servir per equilibrar serveis web, però pot equilibrar qualsevol servei que funcioni amb el protocol TCP. En aquest cas, farem servir HAProxy per equilibrar la càrrega entre els nostres 2 nodes de MariaDB. Per instal·lar HAProxy, executarem:
# apt install haproxyAra configurarem HAProxy afegint el codi següent a vi /etc/haproxy/haproxy.cfg.
listen stats
bind *:8083
mode http
stats enable
stats uri /stats
stats realm HAProxy\ Statistics
stats auth haproxy:TestKB
# Equilibratge de càrrega per al clúster de Galera
listen kb-galera
bind *:3306
balance source
mode tcp
option tcpka
option mysql-check user haproxy
server kb-mariadb-01 10.20.10.34:3306 check weight 1
server kb-mariadb-02 10.20.10.35:3306 check weight 1Crearem un usuari perquè HAProxy pugui fer comprovacions als 2 nodes; en un dels 2 nodes crearem un usuari haproxy:
MariaDB [(none)]> CREATE USER ‘haproxy’@’10.20.10.36’;Ja tenim funcionant el nostre clúster de MariaDB amb equilibratge de càrrega.