IDCFクラウド で MariaDB Galera Cluster を組んでみる

はじめまして、橋口です :bow:

今回は、[IDCFクラウド](https://www.idcf.jp/cloud/) 上で [MariaDB 10](https://ja.wikipedia.org/wiki/MariaDB) 以降に取り込まれた [MariaDB Galera Cluster](https://mariadb.com/kb/en/mariadb/what-is-mariadb-galera-cluster/) を使い、[マルチマスタDB](https://www.designet.co.jp/faq/term/?id=44Oe44Or44OB44Oe44K544K_)を作成します :tada:

# Step0) 環境
  - [IDCFクラウド](https://www.idcf.jp/cloud/)
  - [CentOS](https://ja.wikipedia.org/wiki/CentOS)

[VM(仮想マシン)](https://www.idcf.jp/words/virtualization.html)を構築するまでの流れは[ご利用の流れ](https://www.idcf.jp/cloud/order.html)や[めちゃ楽ガイド(PDF)](https://www.idcf.jp/help/cloud/guide/pdf/IDCFCloud_installation_guide.pdf)をご覧下さい :bow:
データベース用セグメントとして[追加ネットワーク](https://www.idcf.jp/cloud/spec/vlan.html)を作成するのもオススメです :+1:
:information_desk_person: 環境が異なる場合は適宜読み替えて下さい。

# Step1) リポジトリ追加
  - リポジトリの設定を生成してくれるのでコピペしましょう :pencil:   
https://downloads.mariadb.org/mariadb/repositories/
  - 少し変えて下記のように設定しました(CentOS7,MariaDB10.1)。

```zsh:/etc/yum.repos.d/MariaDB.repo
# MariaDB 10.1 CentOS repository list
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgcheck=1
enable=1
```
  - 必要に応じてリポジトリの鍵を登録しましょう :key2: 

```zsh
sudo rpm --import https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
```

# Step2) インストール
```zsh
sudo yum install MariaDB-server MariaDB-client
```

# Step3) 初期設定 :wrench:
各VMに設定をしてゆきます。

```zsh:/etc/my.cnf.d/server.cnf
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name=GALERA
wsrep_cluster_address="gcomm://192.168.10.1,192.168.10.2,192.168.11.1"
wsrep_node_address=192.168.0.1
wsrep_slave_threads=2
binlog_format=row
```
  - `wsrep_provider` が見つからない場合は `/usr/{lib|lib64}/{mysql|galera}/libgalera_smm.so` を探してみてください。
  - `wsrep_cluster_name` では名前を定義します。デフォルト値は `my_wsrep_cluster` です。
  - `wsrep_cluster_address` では参加するノードのIPアドレスを定義します。
  - `wsrep_node_address` では設定を行うノードのIPアドレスを定義します。デフォルト値は `eth0` のIPアドレスです。
  - `wsrep_slave_threads` ではスレッド数を定義します。CPUの倍または書き込むクライアント数の1/4を設定するとよいようです。
  - 詳細は https://mariadb.com/kb/en/mariadb/galera-cluster-system-variables/ を参照してください。

# Step4) 起動 :tada:
## 1台目
```zsh:CentOS5,CentOS6
service mysql bootstrap
```
```zsh:CentOS7
galera_new_cluster
```
## 2台目以降
```zsh:CentOS5,CentOS6
service mysql start
```
```zsh:CentOS7
systemctl start mriadb
```

# Step5) 接続する
各アプリケーションサーバの内部にHAProxyを置いて分散するのがよいのではないでしょうか :thinking:
アプリケーションサーバーが多い場合は別途内部LBを作成する方が管理は楽かな? :sob:

```text:install
yum install haproxy
```

```text:/etc/haproxy/haproxy.cfg
listen galera *:3306
     balance source
     mode tcp
     option tcpka
     option mysql-check user haproxy
     server node1 192.168.10.1:3306 check weight 1
     server node2 192.168.10.2:3306 check weight 1
     server node3 192.168.11.1:3306 check weight 100
```

# さいごに
このほかには、MariaDB 10以降ではmroongaがバンドルされていたりしていて個人的にうれしいです。

あまり、IDCFクラウド関係なくない？といわれたら悲しいので宣伝しておきます。

IDCFクラウドには、月500円の仮想マシンからデータベースサーバに最適な超高速I/O処理が可能なioMemoryを搭載したハードウェア占有マシンなど、幅広いラインナップの仮想サーバーがあります。

また、追加ネットワーク間を相互に接続できるプライベートコネクトL3(type3)というWANサービスがあります。
IDCFクラウドのゾーン間はもとよりリージョン間接続も基本無料※なサービスなため、DBを簡単に東日本、西日本に配置することができBCP対策にも有効です。

※ 一部有料になることがあります。詳しくは[サービス仕様書](https://www.idcf.jp/cloud/pdf/connect/connect_spec.pdf)をご覧いただくか[お問い合わせ](https://www.idcf.jp/inquiry/)ください。
※ 追加ネットワークは月額1万円(税別)です(2016/12/19日時点)