高可用性を提供するために必要なデータベースをセットアップしています。
私の主な関心事は、高性能と堅牢性です(速くてひどく失敗するものは欲しくない)。データベースは、アプリケーションによって平均300qpsでアクセスされます。 Xen VMで実行され、MyISAMテーブルだけでなくいくつかのInnoDBテーブルもあります。 VMは、イーサネット100Mbit/sイーサネットケーブルを介して接続されます。
このような状況では、MySQLレプリケーションとDRBDのどちらをお勧めしますか?
または、DRBDを使用してマスターデータベースを高可用性にし、スレーブでMySQLレプリケーションを使用する必要がありますか?
私は開発者なので、これらすべてを適切に判断するのは簡単ではありません。
監視と自動フェイルオーバーを使用したレプリケーションは、特にrawデバイスの操作に慣れていない場合は、DRBDベースのソリューションよりも実装と保守がはるかに簡単です。読み取り専用のdbクライアントであるアプリケーションサーバーがある場合は、マスターマスターセットアップを実行し、フロント層または中間層のマシンから2倍のクライアント(接続)を持つことができます...
最も信頼性が高くスケーラブルなのはおそらくMySQLクラスタリングですが、実際には、適切に実装するには少なくとも4つのdbホストが必要です。私はmonitを使用してプレーンなMySQLレプリケーションを実行します。mysqlが適切に調整されていれば、8コアボックスで10k qpsを簡単に実行できます。システムの負荷はほとんどありません。もちろん、高速ディスクと大量のRAMヘルプ。実際、InnoとMyISAMを一緒に使用すると、高速ディスクが必要になり、テーブルのメンテナンスを定期的に行うようにしてください。
アクティブパッシブシナリオを計画している場合、レプリケーションのセットアップは非常に簡単で、共有ドライブは必要ありません。マスターとして実行されます-スレーブセットアップでは、スレーブは更新のためにマスターに接続します。
これについて覚えておくべきことがいくつかあります:
DRBDの場合、ブロックデバイスレベルでソリューションを実装します。基本的に、別のマシンに複製されたハードドライブに書き込みます。ハートビートを使用してHAを実現できます。
覚えておくべきいくつかの事柄:
最終的には、必要なものとデータベースの使用方法に帰着します。
両方に長所と短所があります。
MySQLレプリケーションは、既存のセットアップにかなり簡単に追加でき、派手なブロックデバイスを必要としません。ただし、キーの競合などが原因でレプリケーションが簡単に中断する可能性があります。誰もあなたの奴隷に手紙を書くことができないことを確認してください。 my.confファイルでread_onlyを設定して、スレーブ上のテーブルを誰も変更できないようにします。私が最もよく機能するのは、マスターマスターレプリケーションをセットアップすることですが、1つのノードをread_onlyモードで実行します。
SQLクエリが壊れたためにレプリケーションが壊れた場合は、正常な状態に戻すか、マスターからすべてのテーブルを再コピーする必要があります。
マスタースレーブ構成の利点は、冗長性とパフォーマンスの両方のために、読み取りクエリをスレーブに送信できることです。マスターに簡単に昇格させることもできます。