参考
- MariaDB Galera Clusterを試す (1) « さくらインターネット研究所
- dbts2013:MariaDB Galera Cluster 活用例
- CentOS 7 に MariaDB Galera Cluster を入れる | あたがわの日記
注意点
- Galera Clusterは
最低3台
で構成すること。 - 2014/12/13時点でCentOS7用10.1のパッケージが用意されていない。
インストール
MariaDBのリポジトリ登録
cat > /etc/yum.repos.d/MariaDB.repo <<...
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.0/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
...
インストール
yum install --enablerepo=mariadb -y MariaDB-{Galera-server,Client} galera
パスワード設定
ランダムなパスワード設定
service mysql start
mysqladmin -u root password 'eib5Eim9'
mysqladmin -u root -h `hostname` password 'eib5Eim9'
service mysql stop
クラスタ設定(1台目)
構成は以下として進める。
- 仮想IP:192.168.1.110 (keepalived)
- 1台目:192.168.1.111
- 2台目:192.168.1.112
- 3台目:192.168.1.113
/etc/my.cnf.d/my_custom.cnf (1台目の設定)
[mysqld]
# 以下4行は変更すると起動できない
# see: http://research.sakura.ad.jp/2013/02/14/mariadb-galera-cluster-1/
default_storage_engine=InnoDB
binlog_format=ROW
innodb_autoinc_lock_mode=2
innodb_locks_unsafe_for_binlog=1
# galera
wsrep_cluster_name=DBCLUSTER
wsrep_provider='/usr/lib64/galera/libgalera_smm.so'
wsrep_sst_method=rsync
wsrep_cluster_address=gcomm://192.168.1.111,192.168.1.112,192.168.1.113
wsrep_slave_threads=4 # CPUコア数の2倍、書き込み接続数の1/4
wsrep_node_address=192.168.1.111 # 自身のIPアドレスを入力
# log
log_bin=mysql-bin
expire_logs_days=365 # 365日前のログは削除
slow_query_log=ON
long_query_time=1
character-set-server = utf8
innodb_file_per_table = 1
binlog から テキストに変換
mysqlbinlog mysql-bin.000004
初期ノード起動。他は居ないので--wsrep_cluster_address=gcomm://オプションつける。
sudo service mysql start --wsrep_cluster_address=gcomm://
2台目
sudo service mysql start --wsrep_cluster_address=gcomm://192.168.1.111
3台目
sudo service mysql start --wsrep_cluster_address=gcomm://192.168.1.111,192.168.1.112
状態確認
mysql -uroot -peib5Eim9
クラスタの状態を確認
show status like 'wsrep_local_state_comment';
# Syncedを確認
show status like 'wsrep_cluster_status';
# Primaryを確認
全部見るのは以下
show status like 'wsrep%';
クラスタ設定(2台目,3台目)
1台目同様に設定を済ませておく。
wsrep_cluster_address=gcomm://192.168.100.4に接続される。
sudo service mysql start
状態確認しましょう
mysql -uroot -peib5Eim9
クラスタの状態を確認
MariaDB [(none)]> show status like 'wsrep_local_state_comment';
# Syncedを確認
MariaDB [(none)]> show status like 'wsrep_cluster_status';
# Primaryを確認
MariaDB [(none)]> show status like 'wsrep_incoming_addresses';
+--------------------------+---------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------+
| wsrep_incoming_addresses | 192.168.1.112:3306,192.168.1.113:3306 |
+--------------------------+---------------------------------------+
# IPが上記のように2つ表示されることを確認。
動作確認
2台目
MariaDB [(none)]> create database testdb;
MariaDB [(none)]> use testdb;
Database changed
MariaDB [testdb]> create table tbl (name text,phone text, addr text);
Query OK, 0 rows affected (0.67 sec)
MariaDB [testdb]> insert into tbl ( name, phone, addr ) values ('yamada', '03-5555-6666', 'Asia/Tokyo');
Query OK, 1 row affected (0.08 sec)
1台目
MariaDB [testdb]> select * from tbl;
+--------+--------------+------------+
| name | phone | addr |
+--------+--------------+------------+
| yamada | 03-5555-6666 | Asia/Tokyo |
+--------+--------------+------------+
1 row in set (0.00 sec)
MariaDB [testdb]> insert into tbl ( name, phone, addr ) values ('yamada2', '03-5555-6666', 'Asia/Tokyo');
Query OK, 1 row affected (0.18 sec)
2台目
MariaDB [testdb]> select * from tbl;
+---------+--------------+------------+
| name | phone | addr |
+---------+--------------+------------+
| yamada | 03-5555-6666 | Asia/Tokyo |
| yamada2 | 03-5555-6666 | Asia/Tokyo |
+---------+--------------+------------+
2 rows in set (0.00 sec)
クラスタ台数が増えてきた時
/etc/my.cnf.d/my_custom.cnf
wsrep_cluster_address=gcomm://192.168.1.111,192.168.1.112,192.168.1.113,192.168.1.114
のように列挙すればよい。
binlog注意点
statementが実行されたDBサーバのみbinlogが記録される。
スプリットブレイン状態になった時の対処
スプリットブレイン状態になった場合ERROR 1047 (08S01): Unknown commandのようにデータの不整合を起こさないようにクエリを全く受け付けなくなる。
/var/log/mysql/〜.err を確認すると以下ログが記載されている。
/var/log/mysql/〜.err
140611 5:16:47 [ERROR] WSREP: Local state seqno (12121) is greater than group seqno (11603): states diverged. Aborting to avoid potential data loss. Remove '/var/lib/mysql//grastate.dat' file and restart if you wish to continue. (FATAL)
grastate.datを削除してからmariadb起動
rm -f /var/lib/mysql/grastate.dat
service mysql restart