コラム

宮﨑悟氏の「KUSANAGIでクラスタを組んでみよう」第3回

前回はファイル同期について説明しました。今回は、mariadbとGalera Cluster の組み合わせについて説明します。

Galera Clusterとは

Galera Clusterは、mysql5.x/mariadb上で稼働するActive-Activeクラスタ実装の一つです。複数ノード間のDB情報を同一の内容になるよう維持します。

かつてDBのクラスタといえば、Active-Stanby型のクラスタが殆どでした。Active-Standbyでは、DBデータをコピーしているだけのStandby機が必要です。そのため2台のマシンが必要で、切り替え時間も遅く、性能も1台のみの性能となります。

MySQL/mariadbの場合は、Replicaノードを使用した読み込み専用のノードを用意することができます。この場合Read動作(SELECT文など)の動作は早くできても、Write動作(INSERT/UPDATE文など)はMasterに集中します。そのためWrite動作の多いユースケースでは、Masterに負荷集中する問題があります。

Galera Clusterは、Active-Active型つまり全ノードがMasterとして動作するクラスタです。そのためRead/Write動作を全ノードで行うことができ、負荷分散やノード追加も可能です。Galera Clusterは全ノードをMasterとするため、ノード同士のDB情報に不整合が発生する可能性もあります。Galera Clusterでは、多数決方式でDB情報の不整合を解決します。多数決方式のため、構成ノードは3つ以上の奇数台であることが推奨されます。

KUSANAGIにおけるGalera Cluster構成

KUSANAGIでは、初期状態でGalera Clusterをインストールしています。ただし、Galera Clusterの設定を行っていないため、初期状態ではクラスタが組まれていません。

以下例では、3ノード構成での構成とします。

  • node1(192.168.34.201)
  • node2(192.168.34.202)
  • node3(192.168.34.203)

node1

node1をクラスタのマスターとします。mariadbの設定ファイル /etc/my.cnf.d/server.conf の、 [galera] 以下に設定を追加します。

wsrep_on = on
wsrep_cluster_name = kusanagi
wsrep_provider= '/usr/lib64/galera/libgalera_smm.so'
wsrep_node_name = node1
wsrep_node_address = 192.168.34.201
wsrep_cluster_address = gcomm://
wsrep_auto_increment_control = on
binlog_format = row
default_storage_engine = InnoDB
innodb_autoinc_lock_mode = 2
max_allowed_packet = 8M
skip-name-resolve
wait_timeout = 60

重要な設定は以下のとおりです。

設定説明
wsrep_onwsrep(Write set replication project)を有効にする
マルチマスターの完全同期型のレプリカとします
wsrep_cluster_nameクラスタ名を設定します
wsrep_providerデータ同期用のプラグイン(libgalera_smm.so)を指定します
wsrep_node_name自ノード名
wsrep_node_address自IPアドレス
wsrep_cluster_addressクラスタを構成するIPアドレス
binlog_formatバイナリログの動作をROWにします
default_storage_engineストレージエンジンをInnoDBにします

設定内容を補足します。

  • wsrep_cluster_address
    マスターとするノードでは、”gcomm://”飲みを指定しIPアドレスを指定しません。
    ここでIPアドレスを指定すると、起動時に指定したIPアドレスを探そうとします。
  • binlog_format
    Galera Clusterではバイナリログをデータ同期に使用するため、ROWにすることが必要です。
  • default_storage_engine
    Galera Cluster は、MyISAMなどをサポートしません。

node2/node3

node2/node3はnode1の設定を元にしますが、以下の部分を変更します。

設定node2node3
wsrep_node_namenode2node3
wsrep_node_address192.168.34.202192.168.34.203
wsrep_cluster_addressgcomm://192.168.34.201,192.168.34.203gcomm://192.168.34.201,192.168.34.202

クラスタの起動

事前準備

全ノードでmysqlサービスを停止、無効にします。

sudo systemctl stop mysql
sudo systemctl disable mysql

node1起動

まずはマスターとなる node1から起動します。通常どうり起動します。

sytemctl start mysql

以前はsystemctlで起動させず、service mysql bootstrapを使用していました。ところがmariadbのサービスがsystemctlでの制御に変更され、この機能が使用できなくなりました。そこで、wsrep_cluster_addressのIPアドレスを指定しないことで、回避しています。

node2/node3起動

続いて node2/node3 も、通常通り起動します。

sytemctl start mysql

これによりnode1をベースとしてnode2/node3がクラスタに追加されます。

確認方法

以下の方法で確認できます。$DBROOTPASSはmysqlのrootユーザ用パスワードです。

mysql -uroot -p$DBROOTPASS -e "show status like 'wsrep_incoming_addresses';"
+--------------------------+-------------------------------------------------------------+
| Variable_name            | Value                                                       |
+--------------------------+-------------------------------------------------------------+
| wsrep_incoming_addresses | 192.168.34.201:3306,192.168.34.202:3306,192.168.34.203:3306 |
+--------------------------+-------------------------------------------------------------+

3つのノードが含まれていることがわかります。

停止方法

通常通りsystemctl で停止します。

クラスタノード変更

ノード追加するときは、wsrep_cluster_addressに起動中のクラスタのIPアドレスを追加してmariadbを起動します。masterノードに障害が発生し再接続するときは、wsrep_cluster_addressを追加時と同様に設定する必要があります。

KUSANAGIでの適用

KUSANAGIでクラスタ構成する場合は、Galera Clusterの特性から3台以上の奇数構成を推奨します。Galera Clusterの設定および、/home/kusanagi 以下のディレクトリのlsync設定を行ってからkusanagi initを実行すると楽にクラスタ構成できると思います。

kusanagi provisionまで行ったら、/etc/kusanagi*および/etc/{httpd,nginx}/conf.d/プロファイル_*.conf を各ノードにコピーします。その後、WordPressなどの個別の設定をすると良いでしょう。

終わりに

これで、KUSANAGIでActive-Activeのクラスタを設定する事ができると思います。Galera Cluster のマスターノードが停止するのは起動時・障害時だけなので、運用で回避しましょう。回避できない場合は、WordPressの設定で外部のDBaaSを使うのも選択肢の一つです。運用時の手間など考えて決定して下さい。

今回提示した設定はあくまでもサンプルです。ユースケースによってはパフォーマンスチューニングの必要です。その際は、Galera Clusterを参考にしてください。

さて、このコラムを掲載いただいているデジタル・ヒュージ・テクノロジー社は老舗のOSSインテグレーターです。特にLinuxは強く、OSSを活用した業務システムの実績も多いです。興味がある方は以下のページもご覧ください。

DHT OSS導入コンサルティングサービス

DHT OSS導入コンサルティングサービス

関連記事一覧