En aquest article veuràs com instal·lar i configurar un clúster de MariaDB amb Galera; a més, podràs afegir un HAProxy per equilibrar la càrrega entre els nodes de MariaDB.
Un clúster de MariaDB sempre 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.
Arribat aquest punt, podràs muntar un clúster amb 3 nodes de MariaDB.
Per a aquest article hauràs de fer servir 4 servidors amb Ubuntu 22.04:
- kb-mariadb-01 10.20.10.26
- kb-mariadb-02 10.20.10.27
- kb-mariadb-03 10.20.10.29
- kb-haproxy-mariadb 10.20.10.28
Instal·lar MYSQL
Per poder configurar el clúster, el primer que cal fer és instal·lar MYSQL a tots els nodes (a Ubuntu 22, l'ordre adjunta instal·la automàticament galera 4):
# apt update && apt upgrade
# apt -y install mariadb-serverPer afegir seguretat a la instal·lació de MYSQL, pots executar l'script següent; a l'opció de canviar la contrasenya de root, és recomanable marcar l'opció "n"
# mysql_secure_installationCal tenir en compte que totes les bases de dades hauran de tenir el mateix format i és recomanable utilitzar el format InnoDB; per exemple, MyISAM actualment no és compatible. Pots verificar el format per defecte amb:
# SHOW VARIABLES LIKE 'default_storage_engine';Si hi ha alguna base de dades que no sigui compatible, pots utilitzar les ordres següents:
# MariaDB [(none)]> use database_name;
# MariaDB [(none)]> alter table table_name engine = InnoDB;Configurar els nodes
Ara has de configurar el clúster; per fer-ho, modifica el fitxer /etc/mysql/mariadb.conf.d/60-galera.cnf a tots els nodes:
[galera]
wsrep_on = ON # Permet la replicació del conjunt d'escriptura.
wsrep_provider = /usr/lib/galera/libgalera_smm.so #Especifica la ubicació de la biblioteca wsrep.
wsrep_cluster_name = "Galera Cluster" #Nom del clúster.
wsrep_cluster_address = "gcomm://10.20.10.26,10.20.10.27,10.20.10.29" #Defineix les IPS dels nodes.
binlog_format = row #Format del binlog, fitxer que utilitza per a la replicació.
default_storage_engine = InnoDB #Sempre és recomanable aquest motor o bé XtraDB; els altres donaran problemes.
innodb_autoinc_lock_mode = 2 #Controla el comportament del bloqueig dels valors autoincrementals a les taules InnoDB durant les insercions.
innodb_force_primary_key = 1 #Requereix una clau primària a totes les taules.
innodb_doublewrite = 1 #Doble memòria intermèdia d'escriptura.
# Permetre que el servidor accepti connexions a totes les interfícies.
bind-address = 0.0.0.0 # Perquè MariaDB escolti tots els ports
# Configuracions addicionals.
wsrep_slave_threads = 4 #Estableix la quantitat de subprocessos que s'utilitzaran per processar conjunts d'escriptura d'altres nodes. Més subprocessos poden accelerar les replicacions.
innodb_flush_log_at_trx_commit = 0 #Garanteix que la memòria intermèdia del registre d'InnoDB s'escrigui al fitxer una vegada per segon, en lloc de cada confirmació de transacció.
wsrep_node_name = SegundoNodo #Estableix un nom per a un node individual, de manera que puguis identificar fàcilment cada node en visualitzar els registres.
wsrep_node_address = "10.20.10.27" #Estableix l'adreça IP per a un node individual.
# La línia següent desarà els missatges d'error a error.log.
log_error = /var/log/mysql/error.logHauràs de modificar:
- Les IP dins de wsrep_cluster_address.
- El nom de cada node a wsrep_node_name.
- La IP del node utilitzat a wsrep_node_address
Ara procedirem a aturar el servei de MariaDB.
# systemctl stop mariadbArrencar el clúster
Ja tens tota la configuració a punt, pots procedir a arrencar el clúster de MariaDB; per fer-ho, executa a kb-mariadb-01:
# galera_new_clusterAra reinicia MariaDB als altres nodes.
# systemctl start mariadbPots veure'n l'estat executant:
# mysql -u root -p -e "SHOW STATUS LIKE 'wsrep%';"
Enter password:
+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value |
+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| wsrep_local_state_uuid | a9d57bc3-f737-11ee-bbf2-3f397ed75daa |
| wsrep_protocol_version | 10 |
| wsrep_last_committed | 3 |
| wsrep_replicated | 0 |
| wsrep_replicated_bytes | 0 |
| wsrep_repl_keys | 0 |
| wsrep_repl_keys_bytes | 0 |
| wsrep_repl_data_bytes | 0 |
| wsrep_repl_other_bytes | 0 |
| wsrep_received | 7 |
| wsrep_received_bytes | 760 |
| wsrep_local_commits | 0 |
| wsrep_local_cert_failures | 0 |
| wsrep_local_replays | 0 |
| wsrep_local_send_queue | 0 |
| wsrep_local_send_queue_max | 1 |
| wsrep_local_send_queue_min | 0 |
| wsrep_local_send_queue_avg | 0 |
| wsrep_local_recv_queue | 0 |
| wsrep_local_recv_queue_max | 2 |
| wsrep_local_recv_queue_min | 0 |
| wsrep_local_recv_queue_avg | 0.142857 |
| wsrep_local_cached_downto | 1 |
| wsrep_flow_control_paused_ns | 0 |
| wsrep_flow_control_paused | 0 |
| wsrep_flow_control_sent | 0 |
| wsrep_flow_control_recv | 0 |
| wsrep_flow_control_active | false |
| wsrep_flow_control_requested | false |
| wsrep_cert_deps_distance | 0 |
| wsrep_apply_oooe | 0 |
| wsrep_apply_oool | 0 |
| wsrep_apply_window | 0 |
| wsrep_apply_waits | 0 |
| wsrep_commit_oooe | 0 |
| wsrep_commit_oool | 0 |
| wsrep_commit_window | 0 |
| wsrep_local_state | 4 |
| wsrep_local_state_comment | Synced |
| wsrep_cert_index_size | 0 |
| wsrep_causal_reads | 0 |
| wsrep_cert_interval | 0 |
| wsrep_open_transactions | 0 |
| wsrep_open_connections | 0 |
| wsrep_incoming_addresses | 10.20.10.26:0,10.20.10.27:0,10.20.10.29:0 |
| wsrep_cluster_weight | 3 |
| 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_gcomm_uuid | a9d45264-f737-11ee-85cb-ea88e81c5deb |
| wsrep_gmcast_segment | 0 |
| wsrep_applier_thread_count | 4 |
| wsrep_cluster_capabilities | |
| wsrep_cluster_conf_id | 3 |
| wsrep_cluster_size | 3 |
| wsrep_cluster_state_uuid | a9d57bc3-f737-11ee-bbf2-3f397ed75daa |
| wsrep_cluster_status | Primary |
| wsrep_connected | ON |
| wsrep_local_bf_aborts | 0 |
| wsrep_local_index | 2 |
| wsrep_provider_capabilities | :MULTI_MASTER:CERTIFICATION:PARALLEL_APPLYING:TRX_REPLAY:ISOLATION:PAUSE:CAUSAL_READS:INCREMENTAL_WRITESET:UNORDERED:PREORDERED:STREAMING:NBO: |
| wsrep_provider_name | Galera |
| wsrep_provider_vendor | Codership Oy <info@codership.com> |
| wsrep_provider_version | 4.9(rcece3ba2) |
| wsrep_ready | ON |
| wsrep_rollbacker_thread_count | 1 |
| wsrep_thread_count | 5 |
+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+Des de mysql, amb l'ordre show status like 'wsrep_cluster_size'; pots veure directament que hi siguin els 3 nodes:
MariaDB [(none)]> show status like 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 3 |
+--------------------+-------+
1 row in set (0.001 sec)Instal·lar i configurar HAProxy
HAProxy és un programari que 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, per equilibrar la càrrega entre els 3 nodes de MariaDB. Per instal·lar HAProxy, executa:
# apt update
# apt install haproxyAra procedeix a configurar HAProxy afegint el codi següent a nano/etc/haproxy/haproxy.cfg.
frontend Haproxy
bind *:3306
mode tcp
default_backend galera_cluster
backend galera_cluster
balance roundrobin
mode tcp
option tcpka
option mysql-check user haproxy
server node1 10.20.10.26:3306 check weight 1
server node2 10.20.10.27:3306 check weight 1
server node3 10.20.10.29:3306 check weight 1
frontend stats
bind *:8083
mode http
stats enable
stats refresh 10s
stats uri /stats
stats realm HAProxy\ Statistics
stats auth haproxy:TestKBCrea un usuari perquè HAProxy pugui fer comprovacions als 2 nodes, en un dels 2 nodes, per exemple haproxy:
MariaDB [(none)]> CREATE USER haproxy@10.20.10.28;Ara ves al navegador i obre el web http://IP_Publica_HAProxy:8083/stats, et demanarà usuari i contrasenya; introdueix haproxy i TestKB.
Ja tens el clúster de MariaDB funcionant amb equilibri de càrrega.
Recorda, si tens consultes sobre aquesta o qualsevol altra qüestió relacionada amb els teus servidors a Clouding, no dubtis a escriure a soporte@clouding.io Som al teu costat per al que necessitis, consulta'ns!