CentOS7.3 MariaDB10.2.6でGalera Cluster構築

シェアする

MariaDBでGalera Cluster環境の構築します。Galera Clusterの特徴はシンプル且つ完全同期型のマルチマスターというものです。ここでは、細かい技術的な話は、他のサイト様で説明されているので、そちらを参照してもらうとして、いつもどおりのメモです。

MariaDB10.2.6のリポジトリー設定

MariaDB10系は、CentOS7.3の公式リポジトリーにありませんので、MariaDBの公式リポジトリーからダウンロードします。

MariaDBの公式リポジトリーの情報は、下記のURLにアクセスして、目的のrepoファイルを作成します。

https://downloads.mariadb.org/mariadb/repositories/

1. Choose a Distro => CentOS
2. Choose a Release => CentOS 7 (x86_64)
3. Choose a Version => 10.2 [Stable]

サイト上に、repoファイルの内容が表示されるので、それをサンプルにしてrepoファイルを作成します。

# vim /etc/yum.repos.d/mariadb.repo <LF>   <= repoファイル作成
# MariaDB 10.2 CentOS repository list - created 2017-05-25 08:12 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
#baseurl = http://yum.mariadb.org/10.2/centos7-amd64
baseurl = http://yum.mariadb.org/10.2.6/centos73-amd64/   <= 一応バージョン固定
enabled = 0
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB

gpgcheck=1
# yum --disablerepo=\* --enablerepo=mariadb list available <LF>   <= 「mariadb」リポジトリーのパッケージ一覧
Available Packages
MariaDB-aws-key-management.x86_64         10.2.6-1.el7.centos            mariadb
MariaDB-cassandra-engine.x86_64           10.2.6-1.el7.centos            mariadb
MariaDB-client.x86_64                     10.2.6-1.el7.centos            mariadb
MariaDB-common.x86_64                     10.2.6-1.el7.centos            mariadb
MariaDB-compat.x86_64                     10.2.6-1.el7.centos            mariadb
MariaDB-connect-engine.x86_64             10.2.6-1.el7.centos            mariadb
MariaDB-cracklib-password-check.x86_64    10.2.6-1.el7.centos            mariadb
MariaDB-devel.x86_64                      10.2.6-1.el7.centos            mariadb
MariaDB-gssapi-server.x86_64              10.2.6-1.el7.centos            mariadb
MariaDB-oqgraph-engine.x86_64             10.2.6-1.el7.centos            mariadb
MariaDB-rocksdb-engine.x86_64             10.2.6-1.el7.centos            mariadb
MariaDB-server.x86_64                     10.2.6-1.el7.centos            mariadb
MariaDB-shared.x86_64                     10.2.6-1.el7.centos            mariadb
MariaDB-test.x86_64                       10.2.6-1.el7.centos            mariadb
MariaDB-tokudb-engine.x86_64              10.2.6-1.el7.centos            mariadb
galera.x86_64                             25.3.20-1.rhel7.el7.centos     mariadb
jemalloc.x86_64                           3.6.0-1.el7                    mariadb
jemalloc-devel.x86_64                     3.6.0-1.el7                    mariadb

MariaDB5.5系のパッケージを削除

MariaDB5.5系のパッケージがOS最小構成インストールで入っているので削除します。

# yum info mariadb-libs.x86_64 <LF>
  :
Installed Packages
Name : mariadb-libs
Arch : x86_64
Epoch : 1
Version : 5.5.52
Release : 1.el7
Size : 4.4 M
Repo : installed
From repo : anaconda
Summary : The shared libraries required for MariaDB/MySQL clients
  :
# yum -y remove mariadb-libs.x86_64 <LF>
  :
Removed:
  mariadb-libs.x86_64 1:5.5.52-1.el7
 
Dependency Removed:
  postfix.x86_64 2:2.10.1-6.el7
 
Complete!

MariaDB10.2.6のインストール

MariaDBの公式リポジトリーからインストールされます。

# yum -y --enablerepo=mariadb install MariaDB-server MariaDB-client <LF>
  :
Installed:
  MariaDB-client.x86_64 0:10.2.6-1.el7.centos
  MariaDB-server.x86_64 0:10.2.6-1.el7.centos
 
Dependency Installed:
  MariaDB-common.x86_64 0:10.2.6-1.el7.centos
  MariaDB-compat.x86_64 0:10.2.6-1.el7.centos
  boost-program-options.x86_64 0:1.53.0-26.el7
  galera.x86_64 0:25.3.20-1.rhel7.el7.centos
  lsof.x86_64 0:4.87-4.el7
  perl-Compress-Raw-Bzip2.x86_64 0:2.061-3.el7
  perl-Compress-Raw-Zlib.x86_64 1:2.061-4.el7
  perl-DBI.x86_64 0:1.627-4.el7
  perl-Data-Dumper.x86_64 0:2.145-3.el7
  perl-IO-Compress.noarch 0:2.061-2.el7
  perl-Net-Daemon.noarch 0:0.48-5.el7
  perl-PlRPC.noarch 0:0.2020-14.el7
  rsync.x86_64 0:3.0.9-17.el7
   
Complete!

MariaDB10.2の初期セットアップ

MariaDB自体の初期セットアップです。

# systemctl status mariadb <LF>
* mariadb.service - MariaDB database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled
  Drop-In: /etc/systemd/system/mariadb.service.d
           └─migrated-from-my.cnf-settings.conf
   Active: inactive (dead)
# systemctl disable mariadb <LF>  <= 自動起動しないようにしておく
Removed symlink /etc/systemd/system/multi-user.target.wants/mariadb.service.
Removed symlink /etc/systemd/system/mysql.service.
Removed symlink /etc/systemd/system/mysqld.service.
# systemctl status mariadb <LF>
* mariadb.service - MariaDB database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           └─migrated-from-my.cnf-settings.conf
   Active: inactive (dead)
# systemctl start mariadb <LF>
# systemctl status mariadb <LF>
# systemctl status mariadb
* mariadb.service - MariaDB database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           └─migrated-from-my.cnf-settings.conf
   Active: active (running) since Wed 2017-05-30 21:58:36 JST; 26s ago
  :  
# mysql_secure_installation <LF>  <= いつものやつ
 
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
 
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
 
Enter current password for root (enter for none):<LF> <= 空エンター
OK, successfully used password, moving on...
 
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
 
Set root password? [Y/n] y <LF>
New password:rootpass
Re-enter new password:rootpass
Password updated successfully!
Reloading privilege tables..
... Success!
 
 
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
 
Remove anonymous users? [Y/n] y <LF>
... Success!
 
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
 
Disallow root login remotely? [Y/n] y <LF>
... Success!
 
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
 
Remove test database and access to it? [Y/n] y <LF>
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
 
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
 
Reload privilege tables now? [Y/n] y <LF>
... Success!
 
Cleaning up...
 
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
 
Thanks for using MariaDB
# systemctl stop mariadb <LF>

Firewalldの許可ポート設定

ファイアウォールを動かしている場合は、下記の通りのポートを許可します。

# firewall-cmd --add-port=4567/tcp --permanent <LF>
success
# firewall-cmd --add-port=4568/tcp --permanent <LF>
success
# firewall-cmd --add-port=4444/tcp --permanent <LF>
success
# firewall-cmd --add-port=3306/tcp --permanent <LF>
success
# firewall-cmd --reload <LF>
success

※※※ ここまでの作業を、残り2台分用意します。全部で3台構成です。※※※
1号機 ・・・ 192.168.1.161
2号機 ・・・ 192.168.1.162
3号機 ・・・ 192.168.1.163

Galera Clusterの初期設定(/etc/my.cnf.d/server.cnf)

動作するための設定を、下記のURLで必須となっている設定をベースにして行ないました。
※定義ファイル内のコメントはそのうち追加するかも?

参考URL
https://mariadb.com/kb/en/mariadb/getting-started-with-mariadb-galera-cluster/

・1号機の設定

# cd /etc/my.cnf.d <LF>
# cp -p server.cnf server.cnf.original <LF>
# vim /etc/my.cnf.d/server.cnf <LF>
  :
[mysqld]
# 文字コードを指定
character-set-server=utf8
 
[galera]
# wsrepライブラリーのフルパスを設定(default:無し)
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
# 起動時に接続するクラスターノードのアドレスを指定
wsrep_cluster_address='gcomm://192.168.1.161,192.168.1.162,192.168.1.163'
# レプリケーションのバイナリーログフォーマットを指定(default:MIXED)
binlog_format=ROW
# デフォルトのストレージエンジンを指定(default:InnoDB)
#default_storage_engine=InnoDB
# 自動インクリメント値の生成に使用されるロックモードを指定(default:2)
#innodb_autoinc_lock_mode=2
# データをデータファイルに書き込む前に二重書込みバッファに格納するかどうかを指定(default:ON)
#innodb_doublewrite=ON
# クエリーキャッシュで使用できるサイズ(単位:バイト)(default:1024)(max:1024)
#query_cache_size=1024
# wsrepが有効かどうかを設定(default:OFF)
wsrep_on=ON
  :
# 自論理クラスター名を指定(default:example_cluster)
wsrep_cluster_name=DBCluster
# 自IPアドレスとポートを指定(default:最初のNICのIPアドレス:4587)
wsrep_node_address=192.168.1.161     <= ノードごとにユニーク
  
wsrep_node_name=DBHOST01             <= ノードごとにユニーク

   
wsrep_sst_method=rsync
 
wsrep_slave_threads=4
 
innodb_locks_unsafe_for_binlog=1

  :
# chkconfig --list mysql <LF>
  :
mysql           0:off   1:off   2:on    3:on    4:on    5:on    6:off
# chkconfig mysql off <LF>
# chkconfig --list mysql <LF>
  :
mysql           0:off   1:off   2:off   3:off   4:off   5:off   6:off

・2号機の設定

# cd /etc/my.cnf.d <LF>
# cp -p server.cnf server.cnf.original <LF>
# vim /etc/my.cnf.d/server.cnf <LF>
  :
[mysqld]
# 文字コードを指定
character-set-server=utf8
 
[galera]
# wsrepライブラリーのフルパスを設定(default:無し)
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
# 起動時に接続するクラスターノードのアドレスを指定
wsrep_cluster_address='gcomm://192.168.1.161,192.168.1.162,192.168.1.163'
# レプリケーションのバイナリーログフォーマットを指定(default:MIXED)
binlog_format=ROW
# デフォルトのストレージエンジンを指定(default:InnoDB)
#default_storage_engine=InnoDB
# 自動インクリメント値の生成に使用されるロックモードを指定(default:2)
#innodb_autoinc_lock_mode=2
# データをデータファイルに書き込む前に二重書込みバッファに格納するかどうかを指定(default:ON)
#innodb_doublewrite=ON
# クエリーキャッシュで使用できるサイズ(単位:バイト)(default:1024)(max:1024)
#query_cache_size=1024
# wsrepが有効かどうかを設定(default:OFF)
wsrep_on=ON
  :
# 自論理クラスター名を指定(default:example_cluster)
wsrep_cluster_name=DBCluster
# 自IPアドレスとポートを指定(default:最初のNICのIPアドレス:4587)
wsrep_node_address=192.168.1.162     <= ノードごとにユニーク
  
wsrep_node_name=DBHOST02             <= ノードごとにユニーク

   
wsrep_sst_method=rsync
 
wsrep_slave_threads=4
 
innodb_locks_unsafe_for_binlog=1

  :
# chkconfig --list mysql <LF>
  :
mysql           0:off   1:off   2:on    3:on    4:on    5:on    6:off
# chkconfig mysql off <LF>
# chkconfig --list mysql <LF>
  :
mysql           0:off   1:off   2:off   3:off   4:off   5:off   6:off

・3号機の設定

# cd /etc/my.cnf.d <LF>
# cp -p server.cnf server.cnf.original <LF>
# vim /etc/my.cnf.d/server.cnf <LF>
  :
[mysqld]
# 文字コードを指定
character-set-server=utf8
 
[galera]
# wsrepライブラリーのフルパスを設定(default:無し)
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
# 起動時に接続するクラスターノードのアドレスを指定
wsrep_cluster_address='gcomm://192.168.1.161,192.168.1.162,192.168.1.163'
# レプリケーションのバイナリーログフォーマットを指定(default:MIXED)
binlog_format=ROW
# デフォルトのストレージエンジンを指定(default:InnoDB)
#default_storage_engine=InnoDB
# 自動インクリメント値の生成に使用されるロックモードを指定(default:2)
#innodb_autoinc_lock_mode=2
# データをデータファイルに書き込む前に二重書込みバッファに格納するかどうかを指定(default:ON)
#innodb_doublewrite=ON
# クエリーキャッシュで使用できるサイズ(単位:バイト)(default:1024)(max:1024)
#query_cache_size=1024
# wsrepが有効かどうかを設定(default:OFF)
wsrep_on=ON
  :
# 自論理クラスター名を指定(default:example_cluster)
wsrep_cluster_name=DBCluster
# 自IPアドレスとポートを指定(default:最初のNICのIPアドレス:4587)
wsrep_node_address=192.168.1.163     <= ノードごとにユニーク
  
wsrep_node_name=DBHOST03             <= ノードごとにユニーク

   
wsrep_sst_method=rsync
 
wsrep_slave_threads=4
 
innodb_locks_unsafe_for_binlog=1

  :
# chkconfig --list mysql <LF>
  :
mysql           0:off   1:off   2:on    3:on    4:on    5:on    6:off
# chkconfig mysql off <LF>
# chkconfig --list mysql <LF>
  :
mysql           0:off   1:off   2:off   3:off   4:off   5:off   6:off

とりあえず、起動するための最低限の設定ができましたので、起動して動作確認をしてみます。

1号機のMariaDB Galera Cluster起動確認

1号機の起動確認を行ないます。
このときは、2号機と3号機は停止状態です。

※ Galera Clusterでは、初期設定ファイルの「wsrep_cluster_address」に記述されたノードのどれかが起動していないと、起動することはできません。
1台目(ファーストノード)を起動する際には、他のノードは停止状態ですので、「/bin/galera_new_cluster」コマンド(中身はシェルスクリプト)で起動します。

galera_new_cluster <LF>
# systemctl status mariadb <LF>
* mariadb.service - MariaDB database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           └─migrated-from-my.cnf-settings.conf
   Active: active (running) since Wed 2017-05-30 23:01:38 JST; 8s ago
  :
# systemctl stop mariadb <LF>
# galera_new_cluster <LF>
# mysql -u root -p <LF>
Enter password: rootpass
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 14
Server version: 10.2.6-MariaDB MariaDB Server
 
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
MariaDB [(none)]> show status like 'wsrep_%';
+------------------------------+--------------------------------------+
| Variable_name                | Value                                |
+------------------------------+--------------------------------------+
| wsrep_apply_oooe             | 0.000000                             |
| wsrep_apply_oool             | 0.000000                             |
| wsrep_apply_window           | 0.000000                             |
| wsrep_causal_reads           | 0                                    |
| wsrep_cert_deps_distance     | 0.000000                             |
| wsrep_cert_index_size        | 0                                    |
| wsrep_cert_interval          | 0.000000                             |
| wsrep_cluster_conf_id        | 1                                    |
| wsrep_cluster_size           | 1                                    |
| wsrep_cluster_state_uuid     | 3a112843-45be-11e7-a41a-5621c23d157e |
| wsrep_cluster_status         | Primary                              |
| wsrep_commit_oooe            | 0.000000                             |
| wsrep_commit_oool            | 0.000000                             |
| wsrep_commit_window          | 0.000000                             |
| wsrep_connected              | ON                                   |
| wsrep_desync_count           | 0                                    |
| wsrep_evs_delayed            |                                      |
| wsrep_evs_evict_list         |                                      |
| wsrep_evs_repl_latency       | 0/0/0/0/0                            |
| wsrep_evs_state              | OPERATIONAL                          |
| wsrep_flow_control_paused    | 0.000000                             |
| wsrep_flow_control_paused_ns | 0                                    |
| wsrep_flow_control_recv      | 0                                    |
| wsrep_flow_control_sent      | 0                                    |
| wsrep_gcomm_uuid             | 3a0b0e1a-45be-11e7-9cf5-0b01d574e2ad |
| wsrep_incoming_addresses     | 192.168.1.161:3306                   |
| wsrep_last_committed         | 0                                    |
| wsrep_local_bf_aborts        | 0                                    |
| wsrep_local_cached_downto    | 18446744073709551615                 |
| wsrep_local_cert_failures    | 0                                    |
| wsrep_local_commits          | 0                                    |
| wsrep_local_index            | 0                                    |
| wsrep_local_recv_queue       | 0                                    |
| wsrep_local_recv_queue_avg   | 0.500000                             |
| wsrep_local_recv_queue_max   | 2                                    |
| wsrep_local_recv_queue_min   | 0                                    |
| wsrep_local_replays          | 0                                    |
| wsrep_local_send_queue       | 0                                    |
| wsrep_local_send_queue_avg   | 0.000000                             |
| wsrep_local_send_queue_max   | 1                                    |
| wsrep_local_send_queue_min   | 0                                    |
| wsrep_local_state            | 4                                    |
| wsrep_local_state_comment    | Synced                               |
| wsrep_local_state_uuid       | 3a112843-45be-11e7-a41a-5621c23d157e |
| wsrep_protocol_version       | 7                                    |
| wsrep_provider_name          | Galera                               |
| wsrep_provider_vendor        | Codership Oy <info@codership.com>    |
| wsrep_provider_version       | 25.3.20(r3703)                       |
| wsrep_ready                  | ON                                   |
| wsrep_received               | 2                                    |
| wsrep_received_bytes         | 145                                  |
| wsrep_repl_data_bytes        | 0                                    |
| wsrep_repl_keys              | 0                                    |
| wsrep_repl_keys_bytes        | 0                                    |
| wsrep_repl_other_bytes       | 0                                    |
| wsrep_replicated             | 0                                    |
| wsrep_replicated_bytes       | 0                                    |
| wsrep_thread_count           | 5                                    |
+------------------------------+--------------------------------------+
58 rows in set (0.00 sec)
   
MariaDB [(none)]> exit
Bye

2号機のMariaDB Galera Cluster起動確認

2号機の起動確認を行ないます。
このときは、1号機は起動状態で、3号機は停止状態です。

※ Galera Clusterでは、初期設定ファイルの「wsrep_cluster_address」に記述されたノードのどれかが起動していれば、通常の起動方法である「systemctl start mariadb」コマンドで問題ありません。

systemctl start mariadb <LF>
# systemctl status mariadb <LF>
* mariadb.service - MariaDB database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           └─migrated-from-my.cnf-settings.conf
   Active: active (running) since Wed 2017-05-30 23:16:13 JST; 9s ago
  :
# systemctl restart mariadb <LF>
# mysql -u root -p <LF>
Enter password: rootpass
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 14
Server version: 10.2.6-MariaDB MariaDB Server
 
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
MariaDB [(none)]> show status like 'wsrep_%';
+------------------------------+---------------------------------------+
| Variable_name                | Value                                 |
+------------------------------+---------------------------------------+
| wsrep_apply_oooe             | 0.000000                              |
| wsrep_apply_oool             | 0.000000                              |
| wsrep_apply_window           | 0.000000                              |
| wsrep_causal_reads           | 0                                     |
| wsrep_cert_deps_distance     | 0.000000                              |
| wsrep_cert_index_size        | 0                                     |
| wsrep_cert_interval          | 0.000000                              |
| wsrep_cluster_conf_id        | 2                                     |
| wsrep_cluster_size           | 2                                     |
| wsrep_cluster_state_uuid     | 3a112843-45be-11e7-a41a-5621c23d157e  |
| wsrep_cluster_status         | Primary                               |
| wsrep_commit_oooe            | 0.000000                              |
| wsrep_commit_oool            | 0.000000                              |
| wsrep_commit_window          | 0.000000                              |
| wsrep_connected              | ON                                    |
| wsrep_desync_count           | 0                                     |
| wsrep_evs_delayed            |                                       |
| wsrep_evs_evict_list         |                                       |
| wsrep_evs_repl_latency       | 0/0/0/0/0                             |
| wsrep_evs_state              | OPERATIONAL                           |
| wsrep_flow_control_paused    | 0.000000                              |
| wsrep_flow_control_paused_ns | 0                                     |
| wsrep_flow_control_recv      | 0                                     |
| wsrep_flow_control_sent      | 0                                     |
| wsrep_gcomm_uuid             | 3fbb96a3-45c0-11e7-bf83-2f304c750a0e  |
| wsrep_incoming_addresses     | 192.168.1.161:3306,192.168.1.162:3306 |
| wsrep_last_committed         | 0                                     |
| wsrep_local_bf_aborts        | 0                                     |
| wsrep_local_cached_downto    | 18446744073709551615                  |
| wsrep_local_cert_failures    | 0                                     |
| wsrep_local_commits          | 0                                     |
| wsrep_local_index            | 1                                     |
| wsrep_local_recv_queue       | 0                                     |
| wsrep_local_recv_queue_avg   | 0.000000                              |
| wsrep_local_recv_queue_max   | 1                                     |
| wsrep_local_recv_queue_min   | 0                                     |
| wsrep_local_replays          | 0                                     |
| wsrep_local_send_queue       | 0                                     |
| wsrep_local_send_queue_avg   | 0.000000                              |
| wsrep_local_send_queue_max   | 1                                     |
| wsrep_local_send_queue_min   | 0                                     |
| wsrep_local_state            | 4                                     |
| wsrep_local_state_comment    | Synced                                |
| wsrep_local_state_uuid       | 3a112843-45be-11e7-a41a-5621c23d157e  |
| wsrep_protocol_version       | 7                                     |
| wsrep_provider_name          | Galera                                |
| wsrep_provider_vendor        | Codership Oy <info@codership.com>     |
| wsrep_provider_version       | 25.3.20(r3703)                        |
| wsrep_ready                  | ON                                    |
| wsrep_received               | 3                                     |
| wsrep_received_bytes         | 226                                   |
| wsrep_repl_data_bytes        | 0                                     |
| wsrep_repl_keys              | 0                                     |
| wsrep_repl_keys_bytes        | 0                                     |
| wsrep_repl_other_bytes       | 0                                     |
| wsrep_replicated             | 0                                     |
| wsrep_replicated_bytes       | 0                                     |
| wsrep_thread_count           | 5                                     |
+------------------------------+---------------------------------------+
58 rows in set (0.00 sec)
  
MariaDB [(none)]> exit
Bye

3号機のMariaDB Galera Cluster起動確認

3号機の起動確認を行ないます。
このときは、1号機と2号機とも起動状態です。

※ 起動条件は2号機と同じです。

# systemctl start mariadb <LF>
# systemctl status mariadb <LF>
* mariadb.service - MariaDB database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           └─migrated-from-my.cnf-settings.conf
   Active: active (running) since Wed 2017-05-30 23:27:40 JST; 9s ago
   :
# systemctl restart mariadb <LF>
# mysql -u root -p <LF>
Enter password: rootpass
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 14
Server version: 10.2.6-MariaDB MariaDB Server
 
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
MariaDB [(none)]> show status like 'wsrep_%';
+------------------------------+----------------------------------------------------------+
| Variable_name                | Value                                                    |
+------------------------------+----------------------------------------------------------+
| wsrep_apply_oooe             | 0.000000                                                 |
| wsrep_apply_oool             | 0.000000                                                 |
| wsrep_apply_window           | 0.000000                                                 |
| wsrep_causal_reads           | 0                                                        |
| wsrep_cert_deps_distance     | 0.000000                                                 |
| wsrep_cert_index_size        | 0                                                        |
| wsrep_cert_interval          | 0.000000                                                 |
| wsrep_cluster_conf_id        | 3                                                        |
| wsrep_cluster_size           | 3                                                        |
| wsrep_cluster_state_uuid     | 3a112843-45be-11e7-a41a-5621c23d157e                     |
| wsrep_cluster_status         | Primary                                                  |
| wsrep_commit_oooe            | 0.000000                                                 |
| wsrep_commit_oool            | 0.000000                                                 |
| wsrep_commit_window          | 0.000000                                                 |
| wsrep_connected              | ON                                                       |
| wsrep_desync_count           | 0                                                        |
| wsrep_evs_delayed            |                                                          |
| wsrep_evs_evict_list         |                                                          |
| wsrep_evs_repl_latency       | 0/0/0/0/0                                                |
| wsrep_evs_state              | OPERATIONAL                                              |
| wsrep_flow_control_paused    | 0.000000                                                 |
| wsrep_flow_control_paused_ns | 0                                                        |
| wsrep_flow_control_recv      | 0                                                        |
| wsrep_flow_control_sent      | 0                                                        |
| wsrep_gcomm_uuid             | d8cc9249-45c1-11e7-8700-837e20ca2bcc                     |
| wsrep_incoming_addresses     | 192.168.1.161:3306,192.168.1.162:3306,192.168.1.163:3306 |
| wsrep_last_committed         | 0                                                        |
| wsrep_local_bf_aborts        | 0                                                        |
| wsrep_local_cached_downto    | 18446744073709551615                                     |
| wsrep_local_cert_failures    | 0                                                        |
| wsrep_local_commits          | 0                                                        |
| wsrep_local_index            | 2                                                        |
| wsrep_local_recv_queue       | 0                                                        |
| wsrep_local_recv_queue_avg   | 0.000000                                                 |
| wsrep_local_recv_queue_max   | 1                                                        |
| wsrep_local_recv_queue_min   | 0                                                        |
| wsrep_local_replays          | 0                                                        |
| wsrep_local_send_queue       | 0                                                        |
| wsrep_local_send_queue_avg   | 0.000000                                                 |
| wsrep_local_send_queue_max   | 1                                                        |
| wsrep_local_send_queue_min   | 0                                                        |
| wsrep_local_state            | 4                                                        |
| wsrep_local_state_comment    | Synced                                                   |
| wsrep_local_state_uuid       | 3a112843-45be-11e7-a41a-5621c23d157e                     |
| wsrep_protocol_version       | 7                                                        |
| wsrep_provider_name          | Galera                                                   |
| wsrep_provider_vendor        | Codership Oy <info@codership.com>                        |
| wsrep_provider_version       | 25.3.20(r3703)                                           |
| wsrep_ready                  | ON                                                       |
| wsrep_received               | 3                                                        |
| wsrep_received_bytes         | 299                                                      |
| wsrep_repl_data_bytes        | 0                                                        |
| wsrep_repl_keys              | 0                                                        |
| wsrep_repl_keys_bytes        | 0                                                        |
| wsrep_repl_other_bytes       | 0                                                        |
| wsrep_replicated             | 0                                                        |
| wsrep_replicated_bytes       | 0                                                        |
| wsrep_thread_count           | 5                                                        |
+------------------------------+----------------------------------------------------------+
58 rows in set (0.01 sec)
  
MariaDB [(none)]> exit
Bye

MariaDB Galera Clusterの停止

MariaDBの停止を行ないます。
停止する際は、号機の順番に関係なく、通常の「systemctl stop mariadb」で問題ありませんが、次回の起動のために、少し見ておくファイルがあります。

・起動状態時の1号機

# cat /var/lib/mysql/grastate.dat <LF>
# GALERA saved state
version: 2.1
uuid:    3a112843-45be-11e7-a41a-5621c23d157e
seqno:   -1
safe_to_bootstrap: 0

・起動状態時の2号機

# cat /var/lib/mysql/grastate.dat <LF>
# GALERA saved state
version: 2.1
uuid:    3a112843-45be-11e7-a41a-5621c23d157e
seqno:   -1
safe_to_bootstrap: 0

・起動状態時の3号機

# cat /var/lib/mysql/grastate.dat <LF>
# GALERA saved state
version: 2.1
uuid:    3a112843-45be-11e7-a41a-5621c23d157e
seqno:   -1
safe_to_bootstrap: 0

上記の通り、該当ファイルの「safe_to_bootstrap」の値は「0」となっています。

では、1号機 → 2号機 → 3号機 の順番に停止します。

# systemctl stop mariadb <LF>
# systemctl status mariadb <LF>
* mariadb.service - MariaDB database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           └─migrated-from-my.cnf-settings.conf
   Active: inactive (dead)
  :

1号機から3号機までを順番に停止できましたので、さきほどのファイルを見てみます。

・停止状態時の1号機

# cat grastate.dat <LF>
# GALERA saved state
version: 2.1
uuid:    3a112843-45be-11e7-a41a-5621c23d157e
seqno:   0
safe_to_bootstrap: 0

・停止状態時の2号機

# cat grastate.dat <LF>
# GALERA saved state
version: 2.1
uuid:    3a112843-45be-11e7-a41a-5621c23d157e
seqno:   0
safe_to_bootstrap: 0

・停止状態時の3号機

# cat grastate.dat <LF>
# GALERA saved state
version: 2.1
uuid:    3a112843-45be-11e7-a41a-5621c23d157e
seqno:   0
safe_to_bootstrap: 1  <= 値が変更されている

この場合、ファーストノードとして、1号機から起動をしようとすると、エラーとなります。

# galera_new_cluster <LF>
Job for mariadb.service failed because the control process exited with error code.
 See "systemctl status mariadb.service" and "journalctl -xe" for details.
# systemctl status mariadb -l <LF>
  :
... [ERROR] WSREP: It may not be safe to bootstrap the cluster from this node.
 It was not the last one to leave the cluster and may not contain all the updates.
 To force cluster bootstrap with this node,
 edit the grastate.dat file manually and set safe_to_bootstrap to 1 .

... [ERROR] WSREP: wsrep::connect(gcomm://192.168.1.161,192.168.1.162,192.168.1.163) failed: 7
... [ERROR] Aborting
  :

ですので、「safe_to_bootstrap: 1」となっている3号機から起動する必要があります。すなわち、Galera Clusterの場合、マルチマスター構成であるため、最後に停止したノードが最新のデータということです。

MariaDB Galera Clusterの起動(最後に停止したノードから)

最後に停止したノードから起動します。
起動されると、「/var/lib/mysql/grastate.dat 」ファイル内は「safe_to_bootstrap: 0」になります。

・3号機の起動

# galera_new_cluster <LF>
# systemctl status mariadb <LF>
* mariadb.service - MariaDB database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           └─migrated-from-my.cnf-settings.conf
   Active: active (running) since Wed 2017-05-31 00:23:51 JST; 10s ago

・1号機の起動

# galera_new_cluster <LF>
# systemctl status mariadb <LF>
* mariadb.service - MariaDB database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           └─migrated-from-my.cnf-settings.conf
   Active: active (running) since Wed 2017-05-31 00:24:20 JST; 10s ago

・2号機の起動

# galera_new_cluster <LF>
# systemctl status mariadb <LF>
* mariadb.service - MariaDB database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           └─migrated-from-my.cnf-settings.conf
   Active: active (running) since Wed 2017-05-31 00:25:12 JST; 10s ago

実際の運用では、停止及び起動の順序性は、定例運用にて守られると思いますが、不具合発生時などは、意識しておく必要があるんだと思います。

データ同期の確認

最後に肝心なデータ同期の確認も、かる~くしておきます。

・1号機でのデータベース作成

# mysql -u root -p <LF>
Enter password: rootpass
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 13
Server version: 10.2.6-MariaDB MariaDB Server
 
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
 
MariaDB [(none)]> create database orangetakam;  <= データベースの作成
Query OK, 1 row affected (0.17 sec)
 
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| orangetakam        |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)
 
MariaDB [(none)]> exit
Bye

・2号機側の確認

# mysql -u root -p <LF>
Enter password: rootpass
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 13
Server version: 10.2.6-MariaDB MariaDB Server
 
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| orangetakam       <= 存在してる
| performance_schema |
+--------------------+
4 rows in set (0.01 sec)
 
MariaDB [(none)]> exit
Bye

・3号機側の確認

# mysql -u root -p <LF>
Enter password: rootpass
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 13
Server version: 10.2.6-MariaDB MariaDB Server
 
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| orangetakam        <= 存在してる
| performance_schema |
+--------------------+
4 rows in set (0.01 sec)
 
MariaDB [(none)]> exit
Bye

もちろん、削除をどこの号機でおこなっても、同期される。

が、ノード間でのデッドロックとか起こりやすくならないのだろうか?
更なる確認していこー。