web-dev-qa-db-ja.com

MySQLの高可用性、フェイルオーバー、およびレイテンシを伴うレプリケーション

MySQLで実行される新しいCMS(Drupal 6.x)の実装を進めています。プライマリとセカンダリの2つのデータセンターがあり、それらの間のレイテンシは既知です。 MySQLのどのバージョンを実行するか不明です。コミュニティまたはエンタープライズのいずれかですが、それは未定です。 InnoDBエンジンを実行するように見えます。OSはRedHat EL 5.5になります。セカンダリサーバーはパッシブまたはホットスタンバイですが、プライマリサーバーはアクティブになります。

2つのデータセンターにまたがるMySQLのレプリケーション、高可用性、自動フェイルオーバーを実装したいと考えています。

セカンダリサーバーへのフェールオーバー後、プライマリサーバーにフェールバックするときに、プライマリサーバーからコンテンツを引き続き提供できるように、セカンダリDBからプライマリDBにデータを迅速かつ完全に同期させる必要があります。

これらの問題を解決/解決するために使用できるテクノロジー/ツール/ベストプラクティスを知ることに興味があります。また、落とし穴やああは瞬間も同様に高く評価されます。 MySQLのレプリケーション、クラスタリング、TungstenやDolphinicsなどのサードパーティツールについては読んだことがありますが、どのようなアクションが最適かはわかりません。

お時間をいただきありがとうございます!

KM

8
KM.

簡単にするために、MySQL循環レプリケーションのみをお勧めします。理由は次のとおりです。

MySQL循環レプリケーションよりもはるかに優れたテクノロジーとトポロジは数多くあります。私のお気に入りは、 DRBD(分散複製ブロックデバイス) です。ただし、DRBDは、サーバーペアが同じ建物、データセンター、およびラック内にある場合に適切に機能します。 192.168.x.xでクロスケーブルを使用する場合はさらに優れています。 DRBDプライマリとDRBDセカンダリ間のサブネット。 残念ながらDRBDは2つの場所の間の距離で恐ろしいパフォーマンスを発揮しますが、DRBDは引き続き機能します。 2つのデータセンター間で必要な十分なDRBDパフォーマンスを提供するネットワークトポロジはありません。

2つの異なるデータセンターにある2つのDBサーバー間でMySQL循環レプリケーションをセットアップしたら、必要なチューニングはネットワークのみです。本質的に、レプリケーションパフォーマンスは、ネットワーク設定(MySQLレプリケーションセットアップでのバイナリログ転送の速度/待ち時間)とディスクI/O(DRBD)の関数です。

冗長性を高めるために必要な代替策は、例として次のとおりです。

両方の場所でDRBDペアをセットアップする
VIP 111.111.111.111を含むサイト#1のDRBDペア
VIP 222.222.222.222を使用したサイト#2のDRBDペア

次の条件下で、DRBDプライマリサーバー間のMySQL循環レプリケーションをセットアップします。
サイト#1の場合、MySQLでMaster_Hostとして222.222.222.222を使用します
サイト#2の場合、MySQLでMaster_Hostとして111.111.111.111を使用します

ある程度の複雑さを導入していますが、これで2つのレベルの冗長性があります。各サイト内のDRBDとサイト間のMySQL循環レプリケーションです。ホットスタンバイサーバーのDRBDプライマリでmysqldumpを介してバックアップを実行することの追加の利点があります。

フェイルオーバーに関しては、DRBDは任意の1つのサイトで自動フェイルオーバーを提供します。

データセンターがまったく利用できない場合にのみ、ホットスタンバイサイトでDB VIP=を使用します。

更新

私はダブルテイクを実行したところ、Drupal6を使用していることに気付きました。すべてのdrupalテーブルをInnoDBに変換します。これにより、MyISAMテーブルが更新され、テーブルロックがMyISAMテーブルを単に読み取るDB接続がフリーズする可能性がなくなります。DML更新( MyISAMテーブルに対するINSERT、UPDATE、DELETE)は常にフルテーブルロックになります!!! InnoDBを使用すると、行レベルのロックが導入され、テーブル全体のロックがなくなります。

さらに、すべてがInnoDBである場合、DRBDペア間でクラッシュリカバリが一貫するため、DRBDは友だちになります。反対に、MyISAMを使用するDRBDは、DRBDプライマリでクラッシュしたMyISAMテーブルがクラッシュしたMyISAMテーブルであると推測されるため、DRBDセカンダリに単純に複製されるため、何も購入しません。

アップデート#2

2つのレベルの冗長性を使用する必要があります

レベル1:各データベースセンターで、DRBDを使用します。
http://dev.mysql.com/doc/refman/5.1/en/ha-drbd.html

DBサーバーのペアをセットアップする
スタートアップDRBD
DRBDプライマリでのMySQLの起動

これにより、ディスクレベルで冗長データが作成されます。

レベル2:MySQL循環レプリケーションを設定する必要があります
DataCenter#1のDRBDプライマリとDataCenter#2のDRBDプライマリ

各DRBDプライマリはMySQLを実行し、動作します
互いにマスターおよびスレーブとして

私はこのようなクライアントトポロジのセットアップを行っており、非常に安定していると考えています。

3
RolandoMySQLDBA