drbd + ocfs2に基づく小さなWebクラスターのクラスターストレージ

私たちが話したいこと:
drbd + ocfs2ソリューションに基づいて2つのサーバーの共有ストレージを迅速に展開する方法。

誰にとって有用か:
このチュートリアルは、システム管理者や、ストレージの実装方法を選択したり、ソリューションを試したい人に役立ちます。

拒否した決定とその理由


多くの場合、読み取り/書き込みのパフォーマンスが良好な小さなWebクラスターに共通ストレージを実装する必要がある状況に直面しています。 プロジェクトに共通のリポジトリを実装するためのさまざまなオプションを試しましたが、いくつかの指標についてすぐに満足することはできませんでした。 では、その理由を説明しましょう。






チュートリアル:drbd + ocfs2に基づいて共有ストレージを展開する方法


私たちにとって最も便利なソリューションの1つは、たくさんのocfs2 + drbdでした。 次に、ソリューションデータベースに基づいて2つのサーバーの共有ストレージをすばやく展開する方法を示します。 しかし、最初に、コンポーネントについて少し:

DRBDは、サーバーブロック間でデータを複製する標準のLinuxストレージシステムです。 主な用途は、フォールトトレラントストレージを構築することです。

OCFS2は、複数のシステムで同じストレージを共有して使用できるファイルシステムです。 Linuxのディストリビューションに含まれ、FSを操作するためのカーネルモジュールとユーザースペースツールです。 OCFS2は、DRBDの上だけでなく、複数の接続を持つiSCSIの上でも使用できます。 この例では、DRBDを使用します。

すべてのアクションは、最小限の構成でubuntuサーバー18.04で実行されます。

手順1. DRBDを設定します。

ファイル/etc/drbd.d/drbd0.resで、仮想ブロックデバイス/ dev / drbd0を記述します。

resource drbd0 { syncer { rate 1000M; } net { allow-two-primaries; after-sb-0pri discard-zero-changes; after-sb-1pri discard-secondary; after-sb-2pri disconnect; } startup { become-primary-on both; } on drbd1 { meta-disk internal; device /dev/drbd0; disk /dev/vdb1; address 10.10.10.192:7789; } on drbd2 { meta-disk internal; device /dev/drbd0; disk /dev/vdb1; address 10.10.10.193:7789; } } 

meta-disk internal-メタデータの保存に同じブロックデバイスを使用します
device / dev / drbd0 -drbdボリュームへのパスとして/ dev / drbd0を使用します。
ディスク/ dev / vdb1-/ dev / vdb1を使用
syncer {レート1000M; } -ギガビットチャネル帯域幅を使用する
allow-two-primaries-2つのプライマリサーバーで変更の受け入れを許可する重要なオプション
after-sb-0pri、after-sb-1pri、after-sb-2pri -splitbrainが検出されたときのノードのアクションを担当するオプション。 詳細については、ドキュメントを参照してください。
become-primary-on both-両方のノードをプライマリに設定します。

この場合、2つの完全に同一のVMがあり、専用の仮想ネットワーク帯域幅は10ギガビットです。

この例では、2つのクラスターノードのネットワーク名はdrbd1とdrbd2です。 適切に動作させるには、/ etc / hostsにあるノードの名前とIPアドレスをマップする必要があります。

 10.10.10.192 drbd1 10.10.10.193 drbd2 

ステップ2.ノードを構成します。

両方のサーバーで次を実行します。
 drbdadm create-md drbd0 

画像

 modprobe drbd drbdadm up drbd0 cat /proc/drbd 

次のものが得られます。

画像

同期を開始できます。 最初のノードで行う必要がある:
 drbdadm primary --force drbd0 

ステータスを確認します。
 cat /proc/drbd 

画像

素晴らしい、同期が始まりました。 私たちは終わりを待っており、写真を見ています:

画像

ステップ3. 2番目のメモで同期を開始します。

 drbdadm primary --force drbd0 

次のものが得られます。

画像

これで、2つのサーバーからdrbdに書き込むことができます。

手順4. ocfs2をインストールして構成します。

かなり単純な構成を使用します。

 cluster: node_count = 2 name = ocfs2cluster node: number = 1 cluster = ocfs2cluster ip_port = 7777 ip_address = 10.10.10.192 name = drbd1 node: number = 2 cluster = ocfs2cluster ip_port = 7777 ip_address = 10.10.10.193 name = drbd2 

両方のノードの/etc/ocfs2/cluster.confに書き込む必要があります。

任意のノードのdrbd0でFSを作成します。
 mkfs.ocfs2 -L "testVol" /dev/drbd0 

ここでは、デフォルト設定を使用して、drbd0にtestVolというラベルの付いたFSを作成しました。

画像

/ etc / default / o2cbで設定する必要があります(設定ファイルのように)
 O2CB_ENABLED=true O2CB_BOOTCLUSTER=ocfs2cluster 

各ノードで実行します:
 o2cb register-cluster ocfs2cluster 

その後、必要なすべてのユニットをオンにしてスタートアップに追加します。
 systemctl enable drbd o2cb ocfs2 systemctl start drbd o2cb ocfs2 

この一部は、セットアッププロセス中に既に実行されています。

手順5.両方のノードのfstabにマウントポイントを追加します。

 /dev/drbd0 /media/shared ocfs2 defaults,noauto,heartbeat=local 0 0 

/ media /共有ディレクトリは事前に作成する必要があります。

ここでは、noautoオプションを使用します。これは、起動時にFSがマウントされないことを意味します(systemdを介してネットワークFSをマウントすることを好みます)。 また、大規模なクラスターにより適したグローバルハートビートもあります。

次に、 /メディア/共有をマウントし、コンテンツの同期を確認できます。

できた! その結果、多かれ少なかれフォールトトレラントなストレージとスケーラビリティとまともなパフォーマンスが得られます。

Source: https://habr.com/ru/post/J445612/


All Articles