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回ためした限りは同じ動作をしている。
う~ん…会社の検証機、アップデートしようかな…
設定ファイル書き換えが必要そうだけど