2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-11-29

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で起動(本家)

2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?