web-dev-qa-db-ja.com

MySQLを使用したDRBD

DRBDを使用してMySQLにHAを提供することに関する質問。

フェイルオーバーが発生したときに、バックアップMySQLインスタンスが常に機能状態になることを確認する必要があります。たとえば、プライマリがトランザクションのコミットの途中で停止した場合はどうなりますか?

Mysqlが処理できないセカンダリにコピーされたデータになってしまうのでしょうか?または、2つの同期中にネットワークが停止し、すべてのデータがネットワークを通過するわけではない場合はどうなりますか。

セカンダリ上のデータが不完全であるためにmysqlが起動してデータベースを読み取ることができない状態になる可能性があるようです。

私は何かが足りないのですか?

3
tdimmig

当然、フェイルオーバーの性質によって異なります。また、あなたはすでにあなたの質問に対する答えを知っているように聞こえます。

DRBDは、基本的にネットワークRAIDミラーリングです。ブロックイン->ブロックアウト。レイテンシの要件に応じて、同期または非同期で実行できます。これらのどれを選択するかは、レプリカがクラッシュコンシステントであるかどうかに大きく影響します。

そのレベルに減らすと、あなたの質問は「MySQLが起動してデータファイルを読み取るとどうなりますか?」になります。データは整形式で静止していて、問題なく開始されるか、クラッシュの一貫性があり、一貫性の問題が発生する可能性があります。 (もちろん、ディスク上で破損している可能性もあります。これは、DRBDでも問題になる可能性があります。特に、スプリットブレインシナリオが発生した場合はなおさらです。)通常、ログを再生することで回復できます。トランザクションエンジンを使用していますが、より深刻な問題が発生する場合があります。これは、NFS上の共有SANボリュームまたは(天国では禁止されている)データベースファイルなど、他の共有ブロックストレージと同様にDRBDにも当てはまります。

仮に、ACID準拠のデータベースは、不完全なトランザクションから常に正常に回復する必要があります。実際には、特に一部のMySQLバージョンでは、これが常に当てはまるとは限りません(MySQLにはACIDコンプライアンスの最大の遺産がないためですが、近年は改善されています)。頻繁なバックアップを維持することは、常に賢明なことです。

高可用性システムが常にフェイルオーバーで動作し続けることを保証する方法はありません。最善の方法は、HAソリューションを設計するときに正しい決定を下し、それらのがらくたをテストして、問題が発生したときにどのように動作するかについての仮定を検証することです。

あなたの場合、マスターのディスクで一貫性の問題が発生した場合に備えて、スタンバイスレーブを検討することをお勧めします。もちろん、それを宣伝するには手作業が必要ですが、少なくとも数時間または数日前のデータを復元することはありません。

10
jgoldschrafe

ここではDRBDが正しい解決策ではないと思います。

作業負荷に応じて、以下の1つまたは組み合わせが必要になる可能性があります

  • マスター-スレーブレプリケーション
  • マスター-マスター
  • マスター-奴隷とのマスター
  • MySQLクラスター

1つ目はかなり簡単な設定で、2つ目はスプリットブレイン、STONITH(Shoot The Other Node In The Head)などのいくつかの注意点があります。

これは複雑なトピックになる可能性があるため、使用目的に応じてresearchおよびTestの詳細をお勧めします。それぞれの周りにはたくさんのガイドがいます。

1
daxroc

アプリケーションコードを制御できる場合は、DRBDの代わりにMySQLGalera同期レプリケーションを使用できます。 Galeraには、奇数のクラスターノードメンバー、できれば少なくとも3つという要件があるため、正しいデータである多数決が勝ちます。 MySQLGaleraをHAProxyで拡張できます。したがって、各WebブリックでHAProxyを実行し、HAProxyが接続して、MySQLサーバーが稼働していることを確認します。

ここにいくつかの制限があります http://www.codership.com/wiki/doku.php?id=limitations

1
Christian

もし、あんたが

  • 同期モードでDRBDを実行します(モードCだと思いますか?)
  • STONITHを使用します(DRBDがノードを選択すると、「範囲外」メカニズムを介して他のノードをシャットダウンできるようにフェンシングします(つまり、APCスマート電源タップ、消灯、dracなど)。これにより、マスターが1つだけになるようになります。 '可能です。
  • ドライブ/ RAIDコントローラーが実際にディスクに書き込むことについて嘘をついていないことを確認します。 (または、適切なバッテリーバックアップキャッシュがあります)
  • すべての故障モードを徹底的にテストします。 (電源、ネットワーク、ダム管理者コマンド、ダムアプリケーション)

そうすれば、データベースの可用性が高いことを合理的に確認できます。あなたの例では、トランザクションの途中で失敗した場合、それは中止され、アプリケーションはうまくいけば再試行し、うまくいけばデータの一貫したコピーを持っているはずの2番目のノードに接続できるはずです(すべての書き込みが同期しているため)書き込まれたデータベースに戻る前に、両方のノードに書き込まれます)。

1
David

数年前にDRBDを試しましたが、フェイルオーバー後に多くの問題が発生しました。

すべてのデータとログをデュアルSASコントローラーを介して接続された別のドライブアレイに移動することで、画像からDRBDを削除しました。これにはIBMDS-3525を使用します。このセットアップの良い点はセカンダリシステムは常に接続されており、パーティションがマウントされていません。Corosyncを使用してフェイルオーバーを制御しました。プライマリが戻ると、CorosyncはMySQLをシャットダウンし、パーティションをアンマウントし、マスターに再マウントし、MySQLを起動します。マスターマシンがトランザクションの途中で停止した場合でも、InnoDBは回復します。

ドライブアレイは、この範囲で約15,000〜2万ドルで動作します。すべてのうち2つが必要であることを考慮に入れると(ノードごとに同等のハードウェアが必要になることは言うまでもありません)、アレイのコストは十分に正当化されます。ドライブアレイのもう1つの利点は、速度です。私の場合、システムが両方のコントローラーを同時に使用できるように、マルチパスドライバーを使用しています。通常、内部RAIDと比較してスループットははるかに高くなります。

クリスチャンはガレラに言及しました。 Perconaクラスターをチェックしてください。これはGaleraを使用しており、MySQLの信頼性を一段と高めるための非常に有望な追加機能です。

0
gmck