Galera MariaDB nos permite crear un cluster activo-activo de bases de datos MariaDB. Esto significa que todos los nodos funcionan como primarios (activos) por lo que pueden escribir y/o leer indistintamente.
Para ello, podemos instalar y configurar 2 Raspberry Pi por igual, con diferente IP:
Mi recomendación es usar siempre 3 nodos como mínimo, pero en un entorno LAB, con 2 es suficiente. Usar 3.

Lo primero, será instalar el producto y librerías necesarias en ambos equipos:
apt-get install mariadb-server rsync python3-software-properties -y
Comentamos el parametro bind-address para que mas adelante podamos asignar las respectivas IP’s en el cluster y evitar que MariaSB
sed -i "s/.*bind-address.*/#bind-address = 127.0.0.1/" /etc/mysql/mariadb.conf.d/50-server.cnf
En RPI01 ejecutaremos:
cat <<'EOF' > /etc/mysql/conf.d/galera.cnf
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
wsrep_sst_method=rsync
wsrep_provider_options="gmcast.peer_timeout=PT3S"
wsrep_cluster_address="gcomm://10.0.1.71,10.0.1.72"
wsrep_node_address=10.0.1.71
wsrep_node_name="RP01"
wsrep_notify_cmd="/scripts/galera.sh"
wsrep_cluster_name="CLU01"
bind-address=10.0.1.71
EOF
systemctl stop mariadb
galera_new_cluster
systemctl start mariadb
En RPI02 ejecutaremos:
cat <<'EOF' > /etc/mysql/conf.d/galera.cnf
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
wsrep_sst_method=rsync
wsrep_provider_options="gmcast.peer_timeout=PT3S"
wsrep_cluster_address="gcomm://10.0.1.71,10.0.1.72"
wsrep_node_address=10.0.1.72
wsrep_node_name="RPI02"
wsrep_notify_cmd="/scripts/galera.sh"
wsrep_cluster_name="CLU01"
bind-address=10.0.1.72
EOF
systemctl restart mariadb
Lo tenemos.
Ahora, lo podremos validar y monitorizar con las siguientes querys de ejemplo:
SELECT VARIABLE_VALUE as "Núm. nodos" FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME="wsrep_cluster_size"
SHOW STATUS LIKE "wsrep_cluster_size"
SHOW STATUS LIKE "wsrep_cluster_status"
show status like "wsrep%"
SELECT * FROM information_schema.global_status WHERE variable_name IN ("WSREP_CLUSTER_STATUS","WSREP_LOCAL_STATE_COMMENT","WSREP_CLUSTER_SIZE","WSREP_EVS_DELAYED","WSREP_READY")
Es importante monitorizar de forma continua el cluster para evitar mensajes anómalos como el siguiente:
Process: 12427 ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WSREP_START_POSITION (code=exited, status=1/FAILURE)
[Warning] WSREP: no nodes coming from prim view, prim not possible
En este caso, debemos recuperar las transacciones de los otros nodos por lo que ejecutaremos lo siguiente en el nodo afectado:
systemctl stop mariadb
sed -i 's/^safe_to_bootstrap:.*/safe_to_bootstrap: 1/' /var/lib/mysql/grastate.dat
galera_recovery
systemctl start mariadb