DRBD(Distributed Replicated Block Device)はオーストリアのLINBIT社が開発・メンテナンスしているLinux上での分散ストレージシステムです。
DRBDを使えば、2台以上のサーバ間でファイルシステム(ブロックデバイス)の内容を同期する事ができます。通常こうしたソリューションを使う場合はシステムに高可用性が求められる場合が多いので、併せてHAクラスタソフトとして代表的なPacemaker, Corosyncも組み合わせた構築手順についてご紹介します。
プラットフォームはAWSです。お問い合わせも多い構築の大まかな流れも紹介していますので、是非ご参考ください。
構築環境
今回はAWSを利用し2台のEC2インスタンスは冗長性を考慮し、別AZに配置しました。MariaDBを乗せて、HAなDBクラスタとして構築しています。
「MySQLやMariaDBならDBでレプリケーションさせれば?」という声も聞こえてきそうですが、実際にウェブアプリ等を作成する場合には、画像や添付ファイルなど、DBではなくてファイルでデータを持ちたいケースもそれなりにあります。
自分でアプリを作成するのであればこの辺は設計方針次第ですが、WordPress等の既存のアプリを冗長化したい場合もあったりしますので一例として読んでいただければと思います。
なお、DRBDは日本国内ではサイオステクノロジーがサポートを提供していますので、エンタープライズでの利用についても安心して使用することができます。今回はLINBITオフィシャルのバイナリを使用して紹介します。
構成の詳細
手順書では以下のアプリケーションを使用します。2020年4月現在の最新となります。
DRBD, Pacemaker, Corosyncのバイナリはサイオステクノロジー / LINBIT社と保守契約を締結した際に提供されるバイナリを使用します。
- CentOS 8.1.1911
Linuxカーネル 4.18.0-147 を使用しています。 - DRBD 9.0.22
2台以上のサーバ間のディスク領域を同期します。DRBDはカーネルモジュールとして稼働するため、原則対応したLinuxカーネルバージョンと一致している必要がありますので留意してください。 - Pacemaker 2.0.2
クラスタを構成し、監視・フェールオーバ処理を行います。 - corosync 3.0.2
Pacemakerの下位で動作し、クラスタ間の情報通信を司ります。 - pcs 0.10.2
Pacemaker, Corosyncを運用管理します。 - MariaDB 10.5.2 beta
DBMSです。本手順ではMariaDBを使用しますが、MariaDB固有の機能は使用していませんのでMySQLやPostgreSQL等でも同様の手順で高可用性を実現可能です。
今回説明するクラスタの全体像・各アプリケーション間の関係については以下の図をご覧ください。
DRBDはバージョン9から2台以上の複数サーバ間の同期にも対応していますが、今回はオーソドックスな2台のサーバでのクラスタについて説明します。Pacemakerが稼働しているDRBD, MariaDB等各種サービスの状態を監視し、障害を検知した場合には待機しているもう一台のサーバ上に切り替えてサービスを継続します。
使用環境
前述のようにサーバはAWS上に構築します。
リージョン・AZの配置やネットワークについては次の図を参照ください。
説明では東京リージョンを使用します。ただしどのリージョンでも基本は同じとなります。
2台のEC2インスタンスは冗長性を考慮し、別AZに配置しています。
またEC2インスタンスにはOS領域となるEBSの他に、DRBDデータを行う領域としてEBSを追加でアタッチしています。AZが異なりますので2台のサーバは別のサブネットに存在し、間にVPCゲートウェイが存在する形となります。
一般的なクラスタでは稼働している系に仮想IPを付与するのが定石となりますが、この構成ですと異なるAZのため同一IPを持ち越すことはできません。このため、稼働系にはElastic IPを付与してサービスは付与したIPを介してアクセスする形となります。
物理マシンでクラスタを構成する場合にはネットワークインタフェースカードは複数持たせてさらにチーミングするなどネットワークレベルの冗長化も必須となってきますが、今回はクラウド上ということでネットワークは1本としています。 どのクラウドにも言えることですが、他の利用者との兼ね合いでインスタンスの応答やネットワークのレイテンシが一時的に悪化するといった事象は起こりえます。
タイムアウト値等のパラメーターチューニングは構築したクラスタ毎に別途必要となりますので注意してください。
構築の流れ
色々と構築していきますので最初に全体的な構築の流れについて説明します。
まず、サーバの用意含めAWS側の準備をしておきます。
次に各要素であるDRBD, Pacemaker/Corosync, MariaDBの設定を行います。
MariaDBはDRBDで設定した領域にデータを置くので DRBD → MariaDBの順となります。
最後にこれらをまとめてクラスタとして動作するように設定します。
具体的な手順の解説は「AWS上でのLINBIT HAによるクラスタの構築ガイド」をダウンロードして
是非ご覧ください。