MariaDBのクラスタリング
galera
というプラグインでクラスタリング対応されているそうな。
10.1
ではデフォルトでgalera clusterに対応しているようなので、インストール後、ノードの設定だけで割とすんなり使えます。
初めて設定したのでメモ程度です。ご指摘あればよろしくお願いしますm(_ _)m
MariaDB10.1リポジトリ追加
MariaDB本家手順通りに。
$ sudo vi /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
[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_t
permissiveにしてしまうお手軽方法。
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
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;