Galera Arbitratorを使いGalera Clusterのスプリットブレイン対策を行う

前回「MariaDB Galera Cluster に新規ノードを追加し同期を行う」にて既存の3ノードから1ノード追加する方法を紹介しました。
偶数ノードになったことでスプリットブレインのリスクが高くなったことから、実データを持たない「Galera Arbitrator」を使って合計5ノードにさせる対応を行ってみようと思います。

Galera Arbitrator とは

Galera Arbitrator は Galera Cluster 内に実データを持たないノード(仮想ノード)を作成してくれるサービスです。
通常のノードとは異なり、テーブルデータを保持していないので今回のようなスプリットブレイン対策として奇数ノードにしたいといった場合に有効な手段です。

 

構成

まず Galera Cluster は奇数ノード(最小3) の構成が推奨されていて、偶数ノードの構成でネットワーク障害等が発生した場合、
偶数ノード間(2 – 2)で分断されると過半数の投票が出来ずにスプリットブレインが発生してしまいます。
これを避けるために、前回追加したDBサーバ上に実データを持たない「Galera Arbitrator」サービスを起動させ、計5ノードによる構成を行うことにします。

 

導入の流れ

Galera Clusterがインストールされていれば、Garela Arbitrator(以下 garb)も含まれているので、garbの設定ファイルを編集します。

設定ファイルの編集
// garb 設定ファイルを編集
$ sudo vim /etc/sysconfig/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="172.17.x.1:4567 172.17.x.2:4567 172.17.x.3:4567 172.17.x.3:4567"

# Galera cluster name, should be the same as on the rest of the nodes.
GALERA_GROUP="DBCLUSTER"

# Optional Galera internal options string (e.g. SSL settings)
# see https://galeracluster.com/library/documentation/galera-parameters.html
GALERA_OPTIONS="gmcast.listen_addr=tcp://0.0.0.0:4500;"

# Log file for garbd. Optional, by default logs to syslog
LOG_FILE="/var/log/garbd.log"

# Where to persist necessary data
# WORK_DIR=""

 
GALERA_NODES には クラスターが組まれている各サーバのIPアドレスを指定し、ポート4567はGalera Clusterの同期用ポートなので固定となります。
GALERA_GROUP はGalera Clusterのクラスター名 wsrep_cluster_name と同じ値を指定します。
GALERA_OPTIONS はオプション設定です。今回は gmcast.listen_addr を利用し、garbを起動させるサーバ内で既にGalera Clusterが組まれている場合、
ポート4567が使用できないため、別でリッスンするポートを指定します。(ex. ポート4500を設定)
LOG_FILE はデフォルト設定ではsyslogに出力を行いますが、今回は別で指定します。
※ログファイルを別出力させる場合は、garb起動前に予め空ファイルを作成します。その際にパーミッションは777を設定しておきます。
 これらを事前に行っていない場合、garbサービスが正しく起動しません。

サービス起動

設定ファイルを編集した後、garbサービスを起動します。

$ sudo systemctl start garb

 
garbログ /var/log/garbd.log を開くと、正常にノードが参加されていることを確認できます。
 

ノード数確認

最後にmariadbにログインし、ノード数が計5として扱われていることを確認できれば、成功です。

MariaDB [(none)]> show global status like 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 5 |
+--------------------+-------+
1 row in set (0.002 sec)
おまけ

ノード数を調整したい場合、garbのサービス起動/停止を行うことで変更が反映されます。
garbサービス起動/停止操作を行っても、実際のクラスターには影響はありません。

// garbを停止させた場合
$ sudo systemctl stop garb
$ MariaDB [(none)]> show global status like 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 4 |
+--------------------+-------+
1 row in set (0.002 sec)

// garbを起動させた場合
$ sudo systemctl start garb
$ MariaDB [(none)]> show global status like 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 5 |
+--------------------+-------+
1 row in set (0.002 sec)

1件のコメント

  1. ピンバック: MariaDB Galera Cluster に新規ノードを追加し同期を行う | Gadgetter ガジェッター

コメント

* が付いている欄は必須項目です。