仕事でMariaDBによく触れるようになったので、自宅でも環境を構築しておくことにした。
で、当然DBなので中のデータが飛ぶと非常にまずいわけで、冗長性やバックアップを取得して備えておくわけなんだけど、MariaDBではGaleraClusterというクラスタが利用できる。
GaleraClusterは、マルチマスタで動作するクラスタで、組み込まれているノード全てで同じデータを保有、各ノードからデータベースの更新を行わせる事もできる。
だから、(極端な話)ディスク障害で3台中1台しかノードが生き残らなくても、そこからデータを復元させることも出来るのだ。
なお、各ノード間の連携はTCP/IPで行われているので、疎通が取れる環境であることが前提となる。
今回は、GaleraClusterの推奨が3台以上のノードでの構成のため、そのように構築する。
基本的に、以下の手順は3台全てで実施する必要がある。
1.インストール
今回はyumを使ってインストールを行う。こ
まずは、以下のコマンドでMariaDBのリポジトリを登録する。
cat << EOS > /etc/yum.repos.d/MariaDB.repo [mariadb] name = MariaDB baseurl=http://yum.mariadb.org/10.0/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1 EOS
次に、以下のコマンドでMariaDBおよびGaleraClusterをインストールする。
yum --enablerepo=mariadb install -y MariaDB-Galera-server MariaDB-client galera
2.設定
まず、余計な動作をされないようにSELinuxとfirewalldを停止しておく。
# SELinuxの無効化 setenforce 0 sed -i.bak "/SELINUX/s/enforcing/disabled/g" /etc/selinux/config # firewalldの無効化 systemctl stop firewalld systemctl disable firewalld
次に、MariaDBの設定ファイルの設置フォルダである「/etc/my.cnf.d/」配下にある、server.cnfという名称で設定ファイルを作成する。
以下、設定例。
[galera] # required default_storage_engine = InnoDB # データベースエンジン(基本デフォルト) binlog_format = ROW # バイナリログのフォーマット(ROW以外不可) log-bin = /var/lib/mysql/binlog # バイナリログのPATH log-slave-updates # バイナリログを各マスタノードで共有にする innodb_autoinc_lock_mode = 2 # 自動ロックのモード。詳細はhttps://dev.mysql.com/doc/refman/5.6/ja/innodb-auto-increment-configurable.html datadir = /var/lib/mysql # MariaDBのデータディレクトリ # connections max_connections = 256 # 最大同時コネクション数 max_allowed_packet = 8M # 最大パケット容量 skip-name-resolve # ホスト名解決を行わない max_connect_errors = 1000000 # 最大接続エラー回数 wait_timeout = 300 # 最大の接続アイドル時間(秒) bind-address = 0.0.0.0 # 接続を行わせるサーバのIPアドレス(本設定では制限無し) # galera wsrep_cluster_name = DBCLUSTER # GaleraClusterの名前 wsrep_provider = '/usr/lib64/galera/libgalera_smm.so' wsrep_sst_method = rsync # 各クラスタの連携方法の指定 wsrep_cluster_address = gcomm://DBサーバ1のIPアドレス,DBサーバ2のIPアドレス,DBサーバ3のIPアドレス wsrep_slave_threads = 8 # スレッド数の指定。目安はCPUコア数の2倍か、書き込み接続数の1/4が適正とのこと wsrep_node_address = 自身のIPアドレス # log expire_logs_days = 1 # バイナリログの自動削除日数 slow_query_log = ON # スローログクエリの有効・無効 long_query_time = 1 # スローログクエリとする処理秒数の指定 log_warnings = 1 # エラーログにWARNINGも出力 log_error="/var/lib/mysql/error.log" # エラーログのPATH # other character-set-server = utf8 # 文字コードの指定 collation-server = utf8_general_ci # 文字コードの指定 skip-character-set-client-handshake # クライアントの設定に関係なしに指定した文字コードで返す wsrep_auto_increment_control=OFF # GaleraClusterのauto incrementで、ノード数の増減を自動調整させるかどうか
3.プロセスの起動
さて、設定ファイルの記述が終わったら、プロセスを起動してみよう。
最初の1台めについては、以下のコマンドで起動出来る。
service mysql bootstrap
2台め以降は、以下のコマンドで起動させる。
service mysql start
これで、GaleraClusterが動作する。
各ノードでmysqlにログインし、以下のコマンドを実行し、GaleraClusterが動作している事を確認する。
mysql -u root -e "show status like 'wsrep_local_index';"
[root@BS-PUB-GALERA-01 ~]# mysql -u root -e "show status like 'wsrep_local_index';" +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | wsrep_local_index | 2 | +-------------------+-------+ [root@BS-PUB-GALERA-02 ~]# mysql -u root -e "show status like 'wsrep_local_index';" +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | wsrep_local_index | 0 | +-------------------+-------+ [root@BS-PUB-GALERA-03 ~]# mysql -u root -e "show status like 'wsrep_local_index';" +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | wsrep_local_index | 1 | +-------------------+-------+
各ノードで重複していないようであれば、GaleraClusterは正常に動作していると考えて良いだろう。
なお、GaleraClusterの仕様上、ユーザやパスワードは全てのノードで共通となるので、ユーザを作ったりパスワード変更する場合は1ノードからのみ実行する必要がある点に注意。
Clik here to view.
