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