KUSANAGIでクラスタを組んでみよう第1回(宮崎悟氏)
今回から、KUSANAGIでクラスタを組んで見ようと思います。
クラスタとは
クラスタ(cluster)は直訳だと塊という意味です。今回は、同じ機能を持つ複数のサーバーを連携して動作させることを指します。一般的には、クラスタには2種類あります。
– HA(High Availability) クラスタ
可用性(Availability)を高めるために使用されるクラスタです。携帯によって以下の2種類があります。
– Active-Standby型
通常は起動側(Active)で起動し、待機側(Standby)へデータをコピーし続けます。
起動側に障害が発生したときにはサービスを即時停止し、待機側でサービスを再開します。
– Active-Active 型
すべてのサービスをすべてのサーバで行います。どのサーバが壊れても他サーバでサービス提供は継続されます。Webサーバなどで多く使われます。
– HP(High Performance) クラスタ(HPC)
高い計算力(Performance)を求める際に使用されるクラスタです。現在のスーパーコンピュータの上位の多くはHPCを使用し、分散計算を複数サーバで行うことにより高いパフォーマンスを得ます。
KUSANAGIは標準イメージに含まれるソフトウェアだけで、Active-Active 型のHA クラスタを構築することができます。
KUSANAGIのHAクラスタ
KUSANAGIはWebサーバ、アプリケーションサーバ(主にPHP)、DB(mariadb)の3つの要素で成り立っています。これをActive-ActiveのHAクラスタで実現するには、以下のデータを同期する必要があります。
– アプリケーションが扱うデータ(WordPressのファイルや、アップロードした画像など)
– DBのテーブル情報
KUSANAGIでは、上記データをリアルタイムで同期できます。
複数サーバ間ファイル同期
KUSANAGIでは、サーバ間のファイル同期にlsyncコマンドを含みます。
lsync コマンドは、inotify(inode notify)を使用して、指定したサーバに対してrsyncのようにファイルを転送する仕組みです。inotifyはLinuxカーネルの機能で、ファイルの変更をディレクトリ単位で検知する機能です。
通常このような場合には、NFSなどの共有ファイルシステムを利用します。しかし、高速を謳うKUSANAGIではNFSはファイルシステムとして遅すぎます。そのため、どのサーバのファイルが更新されたときでも、lsyncでファイルを他サーバにコピーして最新の状態にします。そして、高速なストレージであるSSDを使用することで、Webアクセス時のレスポンスタイムを小さくします。
もちろん、Webアクセスのレスポンスタイムを小さくするためにCDNの使用を進められることがあります。CDNは、世界中からの膨大なアクセスが行われる場合には必要です。日本国内のみのアクセスが予想される場合は返って遅くなる場合もあります。そのため、よほど高アクセス数でアクセス数が売上につながるようなサイトでない限りはCDNをお勧めしません。
複数サーバ間DB同期
KUSANAGIは、サーバ間のDB同期にmariadbを[Galera Cluster](https://galeracluster.com/products/)上で使用します。
Galera Clusterは、マルチマスタかつActive-Activeのクラスタを構成できるソフトウェアです。通常、DBの同期はマスタサーバへの書き込みを、レプリカサーバに転送することで行います。マルチマスタというのは、すべてのサーバへのデータ書き込みを、他サーバに送りデータ同期します。そのため、データの食い違いが発生するのですが、サーバ間の多数決により正しいデータを決めます。
そのためGalera Cluster のマルチマスタ構成は、奇数台であることを推奨しています。また、正しくデータを転送しデータの食い違いを防ぐために、すべてのDB同士が接続する状態を維持する必要があります。データ転送の経路を多重化するなどの施策も有効です。IaaSなどのクラウドでは、同じネットワーク上にあればSLAの範囲でデータ接続性を維持してくれるはずです。
終わりに
今回は、KUSANAGIでクラスタを組む際に、前提となる知識について述べました。次回からクラスタの構成の仕方を説明しようと思います。次回をお楽しみに。
さて、このコラムを掲載いただいているデジタル・ヒュージ・テクノロジー社は老舗のOSSインテグレーターです。特にLinuxは強く、OSSを活用した業務システムの実績も多いです。興味がある方は以下のページもご覧ください。