CentOS7 MariaDB10.1で Galera Cluster (systemd、SELinux対応)


MariaDBのクラスタリング

galeraというプラグインでクラスタリング対応されているそうな。
10.1ではデフォルトでgalera clusterに対応しているようなので、インストール後、ノードの設定だけで割とすんなり使えます。

初めて設定したのでメモ程度です。ご指摘あればよろしくお願いしますm(_ _)m

MariaDB10.1リポジトリ追加

MariaDB本家手順通りに。

$ sudo vi /etc/yum.repos.d/MariaDB.repo
/etc/yum.repos.d/MariaDB.repo
# MariaDB 10.1 CentOS repository list - created 2016-11-28 09:22 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

インストール

10.1ではそのままデフォルトでgarelaに対応しているそうなので、通常手順でインストールするだけ。

$ sudo yum install MariaDB-server MariaDB-client

CentOS7.2のMariaDB5.5とか入っている場合は、そのまま

$ sudo yum update mariadb

でアップグレードできるようです。

設定

必須の項目は本家のmandatory settingsにあるので、これを参考に設定します。

ノードの設定

$ sudo vi /etc/my.cnf.d/server.cnf
/etc/my.cnf.d/server.cnf
[galera]
# Mandatory settings
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
# カンマ区切りでノードのアドレスを指定
wsrep_cluster_address=gcomm://ノード1のアドレス,ノード2のアドレス
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
wsrep_on=ON

# 追加で
# クラスタ名
wsrep_cluster_name=DBCLUSTER
# ノード名(ノード固有の名前)
wsrep_node_name=DBCLUSTER-NODE1
# このノードのIPアドレス
wsrep_node_address=IPアドレス

firewallポート開放

firewalldで3306:mysql, 4567:replication, 4444:rsyncの3ポートを開放します。

レプリケーション用のネットワークを構成している場合は、そのネットワーク・インターフェースが登録されているゾーンを指定します(ゾーン名がinternalの場合は--zone=internalを指定)

sudo firewall-cmd --add-port=3306/tcp --add-port=4567/tcp --add-port=4444/tcp --permanent
sudo firewall-cmd --reload

SELinux対応

selinuxの設定については、galeraのほうに記載があるので、こちらを参考にしました。

面倒なので、用途に応じてどうぞ。

  • permissiveにする(お試し用)
  • mysqld_tタイプをpermissiveにする(お手軽)
  • ポリシーをインストールする (上記よりセキュア)

permissiveにする

とりあえず一時的に試したいだけなら、Permissiveにしてしまえば動作します。

$ sudo setenforce 0
$ sudo getenforce
Permissive

再起動したら戻ります。恒久的にpermissiveにするなら、/etc/selinux/configを書き換えます。

$ sudo sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config

mysqldをpermissiveにする

とりあえずmysqldのコンテキストのタイプ、mysqld_tpermissiveにしてしまうお手軽方法。
SELinux全体をpermissiveにするよりはマシということで。

なお、semanageコマンドを使用しますので、入っていない場合はyumでインストールしてください。

$ sudo yum install policycoreutils-python

mysqld_tをpermissiveに追加

$ sudo semanage permissive -a mysqld_t

なお、戻すときは

$ sudo semanage permissive -d mysqld_t

Enforceに対応

許可が完全かどうかちょっと自信がありません…クラスタ再起動したら弾かれちゃったり、いろいろ試行錯誤してminimalを探ってこの状態です。

rsyncのアクセスなどの許可

booleanで有効にします。

sudo setsebool -P nis_enabled on

initrc_tmpアクセス許可

semanageとteのMakefileを使用しますので、入っていない場合は以下でこれらをインストールしてください。

$ sudo yum install policycoreutils-python selinux-policy-devel

initrc_tmpへアクセスするコンテキストが許可するポリシーを追加します。
モジュールのソースを記述します。

$ vi mariadb_galera.te
mariadb_galera.te
module mariadb_galera 1.0;

require {
    type initrc_tmp_t;
    type mysqld_t;
    type rsync_exec_t;
    class file { getattr open read execute execute_no_trans};
    class file open;
    class process setpgid;
}

#============= mysqld_t ==============
allow mysqld_t initrc_tmp_t:file open;
allow mysqld_t self:process setpgid;
allow mysqld_t rsync_exec_t:file { getattr open read execute execute_no_trans};

コンパイルしてインストールします。

$ make -f /usr/share/selinux/devel/Makefile
$ sudo semodule -i mariadb_galera.pp

ノード起動

最初に起動するノードで、新規クラスターを起動します。
MariaDB 10.1.18から、新規ノードを起動するスクリプトが用意されているので、それを実行するだけ。

$ sudo galera_new_cluster
$ systemctl status mariadb | grep Active
   Active: active (running) since 日 2016-11-00 00:00:00 JST; 0min ago

2番目以降のノードはふつうにsystemdで起動します。

$ sudo systemctl start mariadb
$ systemctl status mariadb | grep Active
   Active: active (running) since 日 2016-11-00 00:00:00 JST; 0min ago

確認

1番目のノードで、データベースsampleを作成してみます。

MariaDB [(none)]> create database sample;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sample             |
| test               |
+--------------------+
6 rows in set (0.00 sec)

MariaDB [(none)]>exit;

2番目のノードで、先ほど作成したデータベースsampleを確認

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sample             |
| test               |
+--------------------+
6 rows in set (0.00 sec)

MariaDB [(none)]> exit;

参考
設定(本家)
Getting Started(本家)
systemdで起動(本家)