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 <span style="color: #ff0000;">wsrep_cluster_address='gcomm://'</span> 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 <span style="color: #ff0000;">wsrep_cluster_address='gcomm://MasterNodeIPアドレス,OtherNodeIPアドレス,...'</span> wsrep_cluster_name='DBCLUSTER' wsrep_node_name='DBCLUSTER-NODEn' wsrep_node_address = IPアドレス
3.起動
最後に、MariaDBを起動させてGaleraClusterを構成させる。
まず、1台目のノード(MasterNode)で、以下のようにコマンドを実行する。
service mysql start start --wsrep-new-cluster
[root@BS-PUB-GALERA-01 ~]# service mysql start 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 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回ためした限りは同じ動作をしている。
う~ん…会社の検証機、アップデートしようかな…
設定ファイル書き換えが必要そうだけど
