はじめに
前回は、heartbeatに付属しているldirectordを使ってgatewaying型の負荷分散システムを構築するための方法について解説しました。あまりコンテンツが更新されないようなWWWサーバなど場合には、このような負荷分散の仕組みを使って、比較的簡単にシステムを冗長化することができます。しかし、メールサーバやデーターベースサーバのように、ハードディスクに記録されているデータが頻繁に更新され、そのデータがなければサービスが行えないようなサービスでは、データの共有についても考慮する必要があります。
今回は、DRBDによるハードディスクのデータ共有の設定について解説します。
DRBDの概要
DRBDは、ネットワークを経由してハードディスクのリアルタイムミラーリングを行うためのソフトウェアで、カーネルモジュールと管理用ソフトウェアのセットで利用します。DRBDは、Linbit社が開発・サポートを行っており、GNU Pulic Licenseに基づき配布されています。オープンソースソフトウェアですが、Linbit社から有償でサポートを受けることも可能です。また、SuSE LinuxなどのLinuxディストリビューションにも採用されています。
DRBDの機能
データ同期
DRBDは、2台のコンピュータの間でデータの完全な同期を取る仕組みを提供します。はじめて相手のサーバとの接続を行った場合や、サーバの故障などでローカルディスクとリモートのディスクとのデータの同一性が失われたような場合には、すべてのデータをコピーするフル同期を行います。また、一時的なサーバの再起動などで、部分的に片方のサーバにデータが更新されていない場合には、更新されたデータのみをコピーする部分同期処理を行うこともできます。
リアルタイムミラーリング
DRBDモジュールは、カーネル内のファイルシステムとディスクドライバの間で動作します。プロセスがファイルを更新すると、ファイルシステムがそのデータをハードディスクに書き込もうとします。この時、DRBDモジュールが、ローカルのディスクに書き込むのと同時に、リモートサーバのハードディスクにもデータを書き込みます。そのため、ディスクへの更新は、リアルタイムにリモートサーバにも書き込まれ、常に同じデータが保存されます。
排他制御
ext3やraiserfsなどの通常のファイルシステムは、ハードディスクのデータが別のサーバに勝手に書き換えられるようなことを予期して作られていません。そのため、2つのサーバから同時にディスクのデータにアクセスし更新処理を行うと、ファイルシステムデータが不整合を起こし、ファイルシステムが破壊されてしまいます。こうしたことを避けるため、片方のサーバだけでファイルシステムを利用し、もう片方のサーバはファイルシステムをマウントせずに待機する必要があります。待機側のサーバでは、相手サーバで障害が発生しサービスを続けられなくなった場合のみ、ファイルシステムをマウントし処理を引き継ぎます。
間違って両方のサーバからファイルシステムをマウントすると、データが破壊されてしまう恐れがあるため、DRBDでは2つのサーバで同時にファイルシステムを利用することができないようにするための排他制御の機能を持っています。
なお、最近では、Oracle Cluster File SystemやGFS(Google File System)などのクラスタ用のファイルシステムを利用すると、両方のサーバから同時にデータを更新することもできるようになっています。DRBDでは、このような場合のために、排他制御を行わないようにすることもできます。