MariaDB Galera Clusterを試す

MariaDBではDBクラスタが比較的簡単に作れるという話を聞き、
試してみることにしました。

環境

Ubuntu上のKVMにCentOS6.3の64bit版を用意し、これを使っています。
また、IPは以下の通りです。


1号機…192.168.1.52
2号機…192.168.1.53


リポジトリの設定

リポジトリは以下のURLで条件を入力すると、repoファイルの設定内容が表示されます。
Setting up MariaDB Repositories


今回はCentOS6.3のIntel系CPUのマシンだったため、「centos6-x86」を指定したのですが、
その設定をすると、32bit版のバイナリをダウンロードする形になったため、「centos6-amd64」を指定しました。


以下の内容で「/etc/yum.repo.d/MariaDB.repo」として作成しました。

# MariaDB 5.5 CentOS repository list - created 2013-03-01 15:52 UTC
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/5.5/centos6-amd64
gpgkey = https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck = 1


その後、yum で必要なパッケージをインストールしました。

# yum install MariaDB-common MariaDB-Galera-server MariaDB-compat MariaDB-client galera

設定


まずは初期ノード(1号機)側の設定を記述します(基本参考リンクの通りです)

[mysqld]
wsrep_cluster_name=DBCLUSTER
wsrep_cluster_address=gcomm://192.168.2.53
wsrep_node_address=192.168.2.52
wsrep_provider='/usr/lib64/galera/libgalera_smm.so'
wsrep_sst_method=rsync
wsrep_slave_threads=2
default_storage_engine=InnoDB
binlog_format=ROW
innodb_autoinc_lock_mode=2
innodb_locks_unsafe_for_binlog=1


次に2号機側の設定です。

[mysqld]
wsrep_cluster_name=DBCLUSTER
wsrep_cluster_address=gcomm://192.168.2.52
wsrep_node_address=192.168.2.53
wsrep_provider='/usr/lib64/galera/libgalera_smm.so'
wsrep_sst_method=rsync
wsrep_slave_threads=2
default_storage_engine=InnoDB
binlog_format=ROW
innodb_autoinc_lock_mode=2
innodb_locks_unsafe_for_binlog=1

初期ノード(1号機)の起動


1号機を初期ノードとして起動します。

# service mysql start --wsrep_cluster_address=gcomm://
Starting MySQL.. SUCCESS!


動作を確認します。

MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_%';
+----------------------------+--------------------------------------+
| Variable_name              | Value                                |
+----------------------------+--------------------------------------+
| wsrep_local_state_uuid     | cf8acb0d-82fc-11e2-0800-615b090d8514 |
| wsrep_protocol_version     | 4                                    |
| wsrep_last_committed       | 3                                    |
| wsrep_replicated           | 0                                    |
| wsrep_replicated_bytes     | 0                                    |
| wsrep_received             | 2                                    |
| wsrep_received_bytes       | 135                                  |
| wsrep_local_commits        | 0                                    |
| wsrep_local_cert_failures  | 0                                    |
| wsrep_local_bf_aborts      | 0                                    |
| wsrep_local_replays        | 0                                    |
| wsrep_local_send_queue     | 0                                    |
| wsrep_local_send_queue_avg | 0.000000                             |
| wsrep_local_recv_queue     | 0                                    |
| wsrep_local_recv_queue_avg | 0.000000                             |
| wsrep_flow_control_paused  | 0.000000                             |
| wsrep_flow_control_sent    | 0                                    |
| wsrep_flow_control_recv    | 0                                    |
| wsrep_cert_deps_distance   | 0.000000                             |
| wsrep_apply_oooe           | 0.000000                             |
| wsrep_apply_oool           | 0.000000                             |
| wsrep_apply_window         | 0.000000                             |
| wsrep_commit_oooe          | 0.000000                             |
| wsrep_commit_oool          | 0.000000                             |
| wsrep_commit_window        | 0.000000                             |
| wsrep_local_state          | 4                                    |
| wsrep_local_state_comment  | Synced                               |
| wsrep_cert_index_size      | 0                                    |
| wsrep_causal_reads         | 0                                    |
| wsrep_incoming_addresses   | 192.168.2.52:3306                    |
| wsrep_cluster_conf_id      | 1                                    |
| wsrep_cluster_size         | 1                                    |
| wsrep_cluster_state_uuid   | cf8acb0d-82fc-11e2-0800-615b090d8514 |
| wsrep_cluster_status       | Primary                              |
| wsrep_connected            | ON                                   |
| wsrep_local_index          | 0                                    |
| wsrep_provider_name        | Galera                               |
| wsrep_provider_vendor      | Codership Oy <info@codership.com>    |
| wsrep_provider_version     | 23.2.2(r137)                         |
| wsrep_ready                | ON                                   |
+----------------------------+--------------------------------------+
40 rows in set (0.01 sec)


無事起動したようです。

2台目のノードを追加


2台目のノードを追加します。

# service mysql start
Starting MySQL.. SUCCESS!


動作を確認します。

MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_%';
+----------------------------+--------------------------------------+
| Variable_name              | Value                                |
+----------------------------+--------------------------------------+
| wsrep_local_state_uuid     | cf8acb0d-82fc-11e2-0800-615b090d8514 |
| wsrep_protocol_version     | 4                                    |
| wsrep_last_committed       | 3                                    |
| wsrep_replicated           | 0                                    |
| wsrep_replicated_bytes     | 0                                    |
| wsrep_received             | 2                                    |
| wsrep_received_bytes       | 198                                  |
| wsrep_local_commits        | 0                                    |
| wsrep_local_cert_failures  | 0                                    |
| wsrep_local_bf_aborts      | 0                                    |
| wsrep_local_replays        | 0                                    |
| wsrep_local_send_queue     | 0                                    |
| wsrep_local_send_queue_avg | 0.000000                             |
| wsrep_local_recv_queue     | 0                                    |
| wsrep_local_recv_queue_avg | 0.000000                             |
| wsrep_flow_control_paused  | 0.000000                             |
| wsrep_flow_control_sent    | 0                                    |
| wsrep_flow_control_recv    | 0                                    |
| wsrep_cert_deps_distance   | 0.000000                             |
| wsrep_apply_oooe           | 0.000000                             |
| wsrep_apply_oool           | 0.000000                             |
| wsrep_apply_window         | 0.000000                             |
| wsrep_commit_oooe          | 0.000000                             |
| wsrep_commit_oool          | 0.000000                             |
| wsrep_commit_window        | 0.000000                             |
| wsrep_local_state          | 4                                    |
| wsrep_local_state_comment  | Synced                               |
| wsrep_cert_index_size      | 0                                    |
| wsrep_causal_reads         | 0                                    |
| wsrep_incoming_addresses   | 192.168.2.52:3306,192.168.2.53:3306  |
| wsrep_cluster_conf_id      | 4                                    |
| wsrep_cluster_size         | 2                                    |
| wsrep_cluster_state_uuid   | cf8acb0d-82fc-11e2-0800-615b090d8514 |
| wsrep_cluster_status       | Primary                              |
| wsrep_connected            | ON                                   |
| wsrep_local_index          | 1                                    |
| wsrep_provider_name        | Galera                               |
| wsrep_provider_vendor      | Codership Oy <info@codership.com>    |
| wsrep_provider_version     | 23.2.2(r137)                         |
| wsrep_ready                | ON                                   |
+----------------------------+--------------------------------------+


こちらも問題ないようです。

SELinux

現状ではSELinuxを有効にしていると、そのままでは動かないようです。


コマンドラインの起動時にはこんなエラーが表示されました。

# service mysql start
Starting MySQL.... ERROR! The server quit without updating PID file (/var/lib/mysql/mysqld.pid).


MySQLのログは以下の通り。

30302 15:43:27 InnoDB: The InnoDB memory heap is disabled
130302 15:43:27 InnoDB: Mutexes and rw_locks use GCC atomic builtins
130302 15:43:27 InnoDB: Compressed tables use zlib 1.2.3
130302 15:43:27 InnoDB: Using Linux native AIO
130302 15:43:27 InnoDB: Initializing buffer pool, size = 128.0M
130302 15:43:27 InnoDB: Completed initialization of buffer pool
130302 15:43:27 InnoDB: highest supported file format is Barracuda.
130302 15:43:28  InnoDB: Waiting for the background threads to start
130302 15:43:29 Percona XtraDB (http://www.percona.com) 1.1.8-29.1 started; log sequence number 1598129
130302 15:43:29 [Note] Plugin 'FEEDBACK' is disabled.
130302 15:43:29 [ERROR] Can't start server : Bind on unix socket: Permission denied
130302 15:43:29 [ERROR] Do you already have another mysqld server running on socket: /tmp/mysql.sock ?
130302 15:43:29 [ERROR] Aborting

130302 15:43:29  InnoDB: Starting shutdown...
130302 15:43:30  InnoDB: Shutdown completed; log sequence number 1598129
130302 15:43:30 [Note] /usr/sbin/mysqld: Shutdown complete

130302 15:44:21 InnoDB: The InnoDB memory heap is disabled
130302 15:44:21 InnoDB: Mutexes and rw_locks use GCC atomic builtins
130302 15:44:21 InnoDB: Compressed tables use zlib 1.2.3
130302 15:44:21 InnoDB: Using Linux native AIO
130302 15:44:21 InnoDB: Initializing buffer pool, size = 128.0M
130302 15:44:21 InnoDB: Completed initialization of buffer pool
130302 15:44:21 InnoDB: highest supported file format is Barracuda.
130302 15:44:22  InnoDB: Waiting for the background threads to start
130302 15:44:23 Percona XtraDB (http://www.percona.com) 1.1.8-29.1 started; log sequence number 1598129
130302 15:44:23 [Note] Plugin 'FEEDBACK' is disabled.
130302 15:44:23 [ERROR] Can't start server : Bind on unix socket: Permission denied
130302 15:44:23 [ERROR] Do you already have another mysqld server running on socket: /tmp/mysql.sock ?
130302 15:44:23 [ERROR] Aborting

130302 15:44:23  InnoDB: Starting shutdown...
130302 15:44:24  InnoDB: Shutdown completed; log sequence number 1598129
130302 15:44:24 [Note] /usr/sbin/mysqld: Shutdown complete


SELinuxでも拒否されていることが確認できました。

# cat /var/log/audit/audit.log 
type=AVC msg=audit(1362206661.917:31): avc:  denied  { write } for  pid=1769 comm="mktemp" name="tmp" dev=dm-0 ino=259586 scontext=unconfined_u:system_r:mysqld_safe_t:s0 tcontext=system_u:object_r:tmp_t:s0 tclass=dir
type=SYSCALL msg=audit(1362206661.917:31): arch=c000003e syscall=2 success=no exit=-13 a0=15cb060 a1=c2 a2=180 a3=7fff23763450 items=0 ppid=1532 pid=1769 auid=500 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="mktemp" exe="/bin/mktemp" subj=unconfined_u:system_r:mysqld_safe_t:s0 key=(null)
type=AVC msg=audit(1362206663.036:32): avc:  denied  { create } for  pid=1773 comm="mysqld" name="mysql.sock" scontext=unconfined_u:system_r:mysqld_t:s0 tcontext=unconfined_u:object_r:tmp_t:s0 tclass=sock_file
type=SYSCALL msg=audit(1362206663.036:32): arch=c000003e syscall=49 success=no exit=-13 a0=f a1=7fffe250ddc0 a2=6e a3=7fffe250de3c items=0 ppid=1532 pid=1773 auid=500 uid=498 gid=499 euid=498 suid=498 fsuid=498 egid=499 sgid=499 fsgid=499 tty=pts0 ses=1 comm="mysqld" exe="/usr/sbin/mysqld" subj=unconfined_u:system_r:mysqld_t:s0 key=(null)
type=AVC msg=audit(1362206664.043:33): avc:  denied  { name_bind } for  pid=1807 comm="mysqld" src=4567 scontext=unconfined_u:system_r:mysqld_t:s0 tcontext=system_u:object_r:port_t:s0 tclass=tcp_socket
type=SYSCALL msg=audit(1362206664.043:33): arch=c000003e syscall=49 success=no exit=-13 a0=b a1=7fff8c42a8c0 a2=10 a3=7fff8c42ab30 items=0 ppid=1532 pid=1807 auid=500 uid=498 gid=499 euid=498 suid=498 fsuid=498 egid=499 sgid=499 fsgid=499 tty=pts0 ses=1 comm="mysqld" exe="/usr/sbin/mysqld" subj=unconfined_u:system_r:mysqld_t:s0 key=(null)


ということで、取り急ぎ今回は無効にして環境構築(若干不本意…)

今日はこんな所で。

おまけ

rsyncが入っていないとうまく動かないので、rsyncを入れましょう。