Ubuntu
vagrant
mariadb

MariaDB 10.1 Galera Cluster @Ubuntu 14.04 LTS

More than 1 year has passed since last update.

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

環境

  • Ubuntu 14.04.4 LTS
  • MariaDB 10.1.12

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

# -*- 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            |
+--------------+