MariaDB 10.1 Galera Cluster @Ubuntu 14.04 LTS


Ubuntu 14.04上にMariaDB 10.1系でGalera Clusterを組みました。10.0系のインストール手順は見られましたが、10.1系のインストール手順が見られなかったのでまとめました。


## 環境

* Ubuntu 14.04.4 LTS
* MariaDB 10.1.12

下記`Vagrantfile`を使って、Ubuntuサーバ3台用意しました。

```Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.define "node1" do |node1|
    node1.vm.hostname = "node1"
    node1.vm.network "private_network", ip: "192.168.13.11"
    node1.vm.provision "shell", inline: <<-SHELL
      echo "127.0.0.1     localhost" >  /etc/hosts
      echo "192.168.13.11 node1"     >> /etc/hosts
      echo "192.168.13.12 node2"     >> /etc/hosts
      echo "192.168.13.13 node3"     >> /etc/hosts
      apt-get update
mariadb-server
    SHELL
    node1.vm.provider "virtualbox" do |v|
      v.customize ["modifyvm", :id, "--memory", "1024"]
    end
  end
  config.vm.define "node2" do |node2|
    node2.vm.hostname = "node2"
    node2.vm.network "private_network", ip: "192.168.13.12"
    node2.vm.provision "shell", inline: <<-SHELL
      echo "127.0.0.1     localhost" >  /etc/hosts
      echo "192.168.13.11 node1"     >> /etc/hosts
      echo "192.168.13.12 node2"     >> /etc/hosts
      echo "192.168.13.13 node3"     >> /etc/hosts
      apt-get update
mariadb-server
    SHELL
    node2.vm.provider "virtualbox" do |v|
      v.customize ["modifyvm", :id, "--memory", "1024"]
    end
  end
  config.vm.define "node3" do |node3|
    node3.vm.hostname = "node3"
    node3.vm.network "private_network", ip: "192.168.13.13"
    node3.vm.provision "shell", inline: <<-SHELL
      echo "127.0.0.1     localhost" >  /etc/hosts
      echo "192.168.13.11 node1"     >> /etc/hosts
      echo "192.168.13.12 node2"     >> /etc/hosts
      echo "192.168.13.13 node3"     >> /etc/hosts
      apt-get update
    SHELL
    node3.vm.provider "virtualbox" do |v|
      v.customize ["modifyvm", :id, "--memory", "1024"]
    end
  end
end

```

## MariaDBのインストール - Node1/Node2/Node3共通
10.0系でGalera Clusterを組むには`galera`パッケージと`mariadb-server`パッケージの両方が必要でしたが、10.1系では`mariadb-server`に同梱されるようになりました。

```
$ vagrant up
$ vagrant ssh nodeX # Xは1〜3です
vagrant@nodeX:~$ sudo -s
root@nodeX:~# apt-get install software-properties-common
root@nodeX:~# apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
root@nodeX:~# add-apt-repository 'deb [arch=amd64,i386] http://ftp.yz.yamagata-u.ac.jp/pub/dbms/mariadb/repo/10.1/ubuntu trusty main'
root@nodeX:~# apt-get update
root@nodeX:~# DEBIAN_FRONTEND=noninteractive apt-get install -y mariadb-server
root@nodeX:~# service mysql stop
```

インストール後、MariaDBが起動しますが、Clusterを組むために停止させています。

## 初期ノードの設定・起動 - Node1のみ

`galera.cnf`というファイルにクラスターの設定をしていきます。10.1系から`wsrep_on`のデフォルト値がオフになったため、10.1系でGalera Clusterを利用する場合は明示的にオンにする必要があります。

```/etc/mysql/conf.d/galera.cnf
[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
query_cache_size=0
query_cache_type=0
bind-address=0.0.0.0

wsrep_on=ON # 明示的にON
binlog_format=ROW
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_name="my_wsrep_cluster"
wsrep_cluster_address="gcomm://192.168.13.11,192.168.13.12,192.168.13.13"
wsrep_sst_method=rsync

wsrep_node_address="192.168.13.11"
wsrep_node_name="node1"
```

オプション`--wsrep-new-cluster`をつけて起動させます。

```
root@nodeX:~# service mysql start --wsrep-new-cluster
```

## ノードの設定・起動 - Node2とNode3

初期ノードが起動したら、残りの2台をClusterに追加します。

### Node2の設定・起動

設定ファイルを変更します。

```/etc/mysql/conf.d/galera.cnf
[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
query_cache_size=0
query_cache_type=0
bind-address=0.0.0.0

wsrep_on=ON
binlog_format=ROW
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_name="my_wsrep_cluster"
wsrep_cluster_address="gcomm://192.168.13.11,192.168.13.12,192.168.13.13"
wsrep_sst_method=rsync

wsrep_node_address="192.168.13.12"
wsrep_node_name="node2"
```

`debian.cnf`のパスワードをnode1と同様にします。

```
root@node2:~# sed -i "s/password = \(.*\)/password = [node1のパスワード]/" /etc/mysql/debian.cnf
```

下記のコマンドで起動させます。

```
root@node2:~# service mysql start
```

### Node3の設定・起動

設定ファイルを変更します。

```/etc/mysql/conf.d/galera.cnf
[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
query_cache_size=0
query_cache_type=0
bind-address=0.0.0.0

wsrep_on=ON
binlog_format=ROW
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_name="my_wsrep_cluster"
wsrep_cluster_address="gcomm://192.168.13.11,192.168.13.12,192.168.13.13"
wsrep_sst_method=rsync

wsrep_node_address="192.168.13.13"
wsrep_node_name="node3"
```

`debian.cnf`のパスワードをnode1と同様にします。

```
root@node3:~# sed -i "s/password = \(.*\)/password = [node1のパスワード]/" /etc/mysql/debian.cnf
```

下記のコマンドで起動させます。

```
root@node3:~# service mysql start
```


## 動作確認

下記のコマンドでクラスターサイズを表示させ、3になっていることを確認します。

```
root@node1:~# mysql -u root -e 'SELECT VARIABLE_VALUE as "cluster size"  FROM INFORMATION_SCHEMA.GLOBAL_STATUS  WHERE VARIABLE_NAME="wsrep_cluster_size"'
+--------------+
| cluster size |
+--------------+
| 3            |
+--------------+
```