Help us understand the problem. What is going on with this article?

MariaDB 10.0 Galera ClusterをCentOS7にインストール

More than 5 years have passed since last update.

参考

注意点

  • 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
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
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away