MariaDB Galera Cluster Split Brain

Здравейте,

Днес ми се случи отпадане на един MySQL сървър, и в резултат на това се получи така наречения MariaDB Galera Cluster Split Brain.

MariaDB Galera Cluster Split Brain

Тъй като използвам 2 нода, което не е препоръчително за Galera Cluster, сутринта работещия нод връщаше следната грешка:

WSREP has not yet prepared node for application use

След като оправих проблемния нод (достатъчен беше един рестарт), реших да се справя и с този Split Brain.

Идеята като цяло беше, да добавя трети нод в клъстера, или да включа арбитър.

Първоначалната ситуация изглеждаше така :

mysql> show status like 'wsrep_cluster_size';

+--------------------+-------+

| Variable_name | Value |

+--------------------+-------+

| wsrep_cluster_size | 2 |

+--------------------+-------+

1 row in set (0.01 sec)

За да увелича размера на клъстера до 3, инсталирах и конфигурирах galera arbitrator на трета машина с минимални ресурси.

apt-get install galera-arbitrator-3

Тъй като клъстера ми използва SSL сертификати, се наложи да ги копирам и на тази машина, за да мога да стартирам garbd демона.

Конфигурационният му файл (/etc/default/garb) изглежда така :

# Copyright (C) 2012 Codership Oy

# This config file is to be sourced by garb service script.
# A comma-separated list of node addresses (address[:port]) in the cluster

GALERA_NODES="192.168.168.1:4567 192.168.168.16:4567"
# Galera cluster name, should be the same as on the rest of the nodes.

GALERA_GROUP="cbz_cluster"
# Optional Galera internal options string (e.g. SSL settings)

# see http://galeracluster.com/documentation-webpages/galeraparameters.html

GALERA_OPTIONS="socket.ssl_key=/etc/mysql/ssl/server-key.pem;socket.ssl_cert=/etc/mysql/ssl/server-cert.pem;socket.ssl_ca=/etc/mysql/ssl/ca-cert.pem;socket.ssl_cipher=AES128-SHA"
# Log file for garbd. Optional, by default logs to syslog

# LOG_FILE="/var/log/garbd.log"
Последна стъпка - стартиране на процеса :
web-root:~# /etc/init.d/garb restart

. ok

[ ok ] Starting /usr/bin/garbd: :.
И wsrep_cluster_size вече беше 3.
mysql> show status like 'wsrep_cluster_size';

+--------------------+-------+

| Variable_name | Value |

+--------------------+-------+

| wsrep_cluster_size | 3 |

+--------------------+-------+

1 row in set (0.00 sec)
Така при отпадане на един от нодовете, другия ще продължи да работи нормално.
Това е!