web-dev-qa-db-ja.com

再起動後にDRBDを自動的に起動し、ボリュームをマウントし、サービスを開始し、プライマリ/セカンダリを構成する方法

私はこの素晴らしいガイドに従って作成した2つのDebian Stretchサーバーにわたって、優れたバージョンのDRBDを使用しています https://www.howtoforge.com/setting-up-network-raid1-with-drbd-on- debian-squeeze-p2 /

しかし、再起動するたびに、いくつかのことをやり直して、再び稼働状態にする必要があります。

再起動する前の動作を確認すると、次のようになります。

root@server1:~# cat /proc/drbd version: 8.4.7 (api:1/proto:86-101) srcversion: AC50E9301653907249B740E 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----- ns:8 nr:0 dw:4 dr:1209 al:1 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

サーバー2で:

root@server2:~# cat /proc/drbd version: 8.4.7 (api:1/proto:86-101) srcversion: AC50E9301653907249B740E 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r----- ns:0 nr:8 dw:8 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

サーバー1で:

root@server1:~# mount ... /dev/drbd0 on /var/www type ext3 (rw,relatime,data=ordered)

そして、これは再起動後に表示されるものです。すべては機能していますが、マウント、サービスの開始、およびプライマリ/セカンダリ構成は失われています。私はこれを行うことによって最初にdrbdを追加しようとしました:

_update-rc.d drbd defaults_

両方のサーバーでこれは機能しないようです。 DRBDは単に起動しませんが、手動で_/etc/init.d/drdb start_を実行すると、両方のサーバーで正常に機能します。

また、DRBDボリュームをfstabに追加するだけでいいのかどうかわかりません。DRBDサービスが開始されていないと機能しないためです。 fstabでの__netdev_の使用について読みましたが、fstabエントリのさまざまな組み合わせが機能しませんでした。


最後に、再起動するたびにDRBDのプライマリステータスとセカンダリステータスを設定し、ボリュームを手動で再マウントする必要もあります。

だからこれは私が再起動後にそれを機能させる方法です:

サーバー1で:

root@server1:/etc# /etc/init.d/drbd status ● drbd.service - LSB: Control DRBD resources. Loaded: loaded (/etc/init.d/drbd; generated; vendor preset: enabled) Active: inactive (dead) Docs: man:systemd-sysv-generator(8)

root@server1:/etc# /etc/init.d/drbd start [ ok ] Starting drbd (via systemctl): drbd.service. root@jmtest1:/etc# cat /proc/drbd version: 8.4.7 (api:1/proto:86-101) srcversion: AC50E9301653907249B740E 0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r----- ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

_root@server1:/etc# drbdadm primary r0_

root@server1:/etc# cat /proc/drbd version: 8.4.7 (api:1/proto:86-101) srcversion: AC50E9301653907249B740E 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----- ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

サーバー2で:

root@server2:~# /etc/init.d/drbd status ● drbd.service - LSB: Control DRBD resources. Loaded: loaded (/etc/init.d/drbd; generated; vendor preset: enabled) Active: inactive (dead) Docs: man:systemd-sysv-generator(8)

root@server2:~# /etc/init.d/drbd start [ ok ] Starting drbd (via systemctl): drbd.service.

root@server2:~# cat /proc/drbd version: 8.4.7 (api:1/proto:86-101) srcversion: AC50E9301653907249B740E 0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r----- ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

_root@server2:~# drbdadm secondary r0_

root@server2:~# cat /proc/drbd version: 8.4.7 (api:1/proto:86-101) srcversion: AC50E9301653907249B740E 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r----- ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

私が試したいくつかのfstabエントリ:

_/dev/drbd0 /var/www ext3 _netdev 0 2 UUID=042cc2e395b2b32 /var/www ext3 none,noauto 0 0_

UUIDを使用するのか、それとも単に_/dev/drbd0_を使用するのかわからない

なぜそれが始まらないのかについて私はこれらの質問を持っています:

  1. そこにあるはずのFSTABエントリは何ですか?
  2. _update-rc.d drbd defaults_が機能しないのはなぜですか?
  3. 再起動するたびに両方のサーバーでプライマリとセカンダリをリセットする必要があるのはなぜですか?

このような問題に対処するために作られた製品の使用を検討する必要があります。

私はこの投稿で説明しました[ Nagios/Icinga:Do n't show CRITICAL for DRBD partitions on standby node ] opensvcを使用して期待どおりに何ができるか、何年もうまく機能します。

  • opensvcクラスターノード間で自動的に同期されるopensvcサービス構成ファイルにマウントが記述されているため、fstabエントリーは不要

  • update-rc.d drbd defaultsをセットアップする必要はありません。一部のサービスでdrbdリソースがあることが確認された後、opensvcスタックがdrbdモジュールをmodprobしているため、プライマリ/セカンダリステートでdrbdを起動します。

  • 起動時にプライマリ/セカンダリに到達するには、opensvcサービス設定ファイルのnodesセクションにDEFAULTパラメータを設定するだけです。

    server1をプライマリとして、server2をセカンダリとして設定するには、nodes=server1 server2svcmgr -s mydrbdsvc set --kw DEFAULT.nodes="server1 server2"コマンドを使用して設定します。

  • server1の起動時にのみサービスを開始する場合は、orchestrate=startコマンドを使用してsvcmgr -s mydrbdsvc set --kw DEFAULT.orchestrate=startパラメータを設定します

  • サービスを高可用性モード(ノード間の自動フェイルオーバー)でのみオーケストレーションする場合は、orchestrate=haコマンドを使用してsvcmgr -s mydrbdsvc set --kw DEFAULT.orchestrate=haパラメーターを設定します

  • あるノードから別のノードにサービスを再配置するには、svcmgr -s mydrbdsvc switchコマンドを使用できます

1
Robert Dedieu

ここでアンパックすることはたくさんありますが、私は言うことから始めます:そのDRBDバージョンは古いです! 8.4.11にアップグレードするか(この執筆時点では2018年12月)、または9ブランチに移動する必要があります。しかし、あなたが尋ねている質問はあなたが使っているバージョンで解決することができます。

投稿の下部で提起した3つの質問を見てみましょう。

  1. そこにあるはずのFSTABエントリは何ですか?

なし、理想的には。 DRBDデバイスを使用するには、まずプロモートする必要があります。 fstabは、自動昇格可能なDRBD-9ブロックデバイスでも最適なオプションではありません。ほとんどの場合、起動プロセスが正常に機能しないためです。ただし、技術的には多くの注意事項があります。

  1. Update-rc.d drbdのデフォルトが機能しないのはなぜですか?

そのようにしないでください。 Debianはsystemdを使用しており、DRBDにはsystemdユニットファイルがあります。クラスターマネージャーを使用している場合を除き、これを使用する必要があります。したがって、Pacemakerクラスターリソースマネージャーがない場合は、# sytemctl enable drbdなどを発行して、ブート時に起動するようにする必要があります。または、# systemctl start drbdを使用して、停止したサービスを開始します。最も一般的なコマンドは、開始、停止、再起動、有効化、無効化です。

  1. 再起動するたびに両方のサーバーでプライマリとセカンダリをリセットする必要があるのはなぜですか?

DRBDにはリーダー選挙の概念がないからです。外部システムはDRBDリソースをプライマリに昇格する必要があり、同時に存在できるプライマリは1つだけです。これを行う方法はたくさんあります。

# drbdadm primary <resource>を使用してリソースを「手動で」昇格させ、そこからマウントすることができますが、それは避けたいことです。 DRBDは、バージョン9で「自動昇格」できます。これにより、ブロックデバイスを開いてアクセスしようとすると、リソースが自動的に昇格します(ファイルシステムマウントやボリュームグループのアクティブ化など)。ただし、実行中のバージョンではそれができません。 (アップグレード?これは可能性がありますで十分です)。 OR有限状態のリーダー選出システムを使用して、プロモーションアクションを制御し、DRBDとそれがサポートするアプリケーションスタックの両方の状態を確認できます。それがPacemakerです。

あなた欲しいペースメーカー、私は約束します。ペースメーカーはそれほど難しくありませんが、非常に大きいです。あなたはあなたが望むものを達成するためにそれの多くを学ぶ必要はないでしょう。あなたは多くの時間とエネルギーを費やして、太陽の下での失敗に抵抗する「完璧な」クラスターを作ることができ、その努力は報われるでしょう。それは良いシステムです。

Corosync/Pacemaker、DRBD-9.xまたはDRBD-8.4.xの最新版の組み合わせ、およびその上にあるものは何でも自動的に必要なものを実現します。これを行う方法を詳しく説明したドキュメントがたくさんあります。最新のものは次のとおりです。

https://docs.linbit.com/docs/users-guide-9.0/#ch-pacemaker

時間があれば、ガイド全体を読むことをお勧めします。 DRBDは過去数年間で深刻な進化を遂げています。

1
Spooler