MariaDB 10.1系でGalera Clusterを使いたかったので、その方法について備忘。
地味に10.0系から結構変わっていて、少し手こずってしまった。

今回インストールするのは、2016年02月12日時点で最新版となる10.1.11とする。

1.インストール

まずはインストールから。
MariaDB 10.1系からはMariaDBにGalera Clusterが含まれているので、普通にそのままインストールを行う。

rpm --import https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
cat << EOF > /etc/yum.repos.d/mariadb.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1.11/centos7-amd64/
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
enabled=1
EOF
yum -y install mariadb-server mariadb

これでインストールが完了した。

2.設定

次に設定。これがMariaDB10.0系と少し異なるようだ。ここでは細かい設定はせず、最低限動作する設定にしておく。
まず、最初に起動するノード(MasterNode)で、以下のように設定ファイルを記述する。

/etc/my.cnf.d/server.cnf(MasterNode)

[mysqld]
bind-address=0.0.0.0

[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
binlog_format=ROW
wsrep_cluster_address='gcomm://'
wsrep_cluster_name='DBCLUSTER'
wsrep_node_name='DBCLUSTER-NODE1'
wsrep_node_address = IPアドレス

次に、2台目以降のノード(OtherNode)の設定ファイルを、以下のように記述する。

/etc/my.cnf.d/server.cnf(OtherNode)

[mysqld]
bind-address=0.0.0.0

[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
binlog_format=ROW
wsrep_cluster_address='gcomm://MasterNodeIPアドレス,OtherNodeIPアドレス,...'
wsrep_cluster_name='DBCLUSTER'
wsrep_node_name='DBCLUSTER-NODEn'
wsrep_node_address = IPアドレス

3.起動

最後に、MariaDBを起動させてGaleraClusterを構成させる。
まず、1台目のノード(MasterNode)で、以下のようにコマンドを実行する。

service mysql start --wsrep-new-cluster
[root@BS-PUB-GALERA-01 ~]# service mysql start --wsrep-new-cluster
Starting mysql (via systemctl):                            [  OK  ]
[root@BS-PUB-GALERA-01 ~]# mysql -u root -e "show status like 'wsrep_local_index';"
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| wsrep_local_index | 0     |
+-------------------+-------+

1台目が無事起動したら、2台目以降を以下のコマンドで起動する。

service mysql start
[root@BS-PUB-GALERA-02 ~]# service mysql start
Starting mysql (via systemctl):                            [  OK  ]
[root@BS-PUB-GALERA-02 ~]# mysql -u root -e "show status like 'wsrep_local_index';"
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| wsrep_local_index | 1     |
+-------------------+-------+

これで、無事GaleraClusterが構成された。
なお、この設定で動作させた場合、MasterNode(wsrep_local_indexが0のノード)をある程度固定にすることができるようだ。

例えば、3台構成でGaleraClusterを構成し、MasterNodeに障害が発生したとする。

[root@BS-PUB-GALERA-01 ~]# mysql -u root -e "show status like 'wsrep_local_index';"
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2 "No such file or directory")

----

[root@BS-PUB-GALERA-02 ~]# mysql -u root -e "show status like 'wsrep_local_index';"
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| wsrep_local_index | 0     |
+-------------------+-------+

----

[root@BS-PUB-GALERA-03 ~]# mysql -u root -e "show status like 'wsrep_local_index';"
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| wsrep_local_index | 1     |
+-------------------+-------+

で、再度MasterNodeを起動させた場合、以下のようになった。

[root@BS-PUB-GALERA-01 ~]# mysql -u root -e "show status like 'wsrep_local_index';"
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| wsrep_local_index | 0     |
+-------------------+-------+

----

[root@BS-PUB-GALERA-02 ~]# mysql -u root -e "show status like 'wsrep_local_index';"
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| wsrep_local_index | 1     |
+-------------------+-------+

----

[root@BS-PUB-GALERA-03 ~]# mysql -u root -e "show status like 'wsrep_local_index';"
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| wsrep_local_index | 2     |
+-------------------+-------+

つまり、Maxscaleと組み合わせて書き込み・読込みノードを切り分けた際、書き込みノードがある程度推測出来るということになる。
もちろん、ちゃんと運用してみないとわからないものではあるが、3\~4回ためした限りは同じ動作をしている。

う~ん…会社の検証機、アップデートしようかな…
設定ファイル書き換えが必要そうだけど