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


8

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

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

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

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

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

KM

回答:


3

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

MySQL循環レプリケーションよりもはるかに優れたテクノロジーとトポロジは数多くあります。私のお気に入りは、DRBD(Distributed Replicated Block Device)です。ただし、DRBDは、サーバーペアが同じ建物、データセンター、およびラックにある場合に適切に機能します。DRBDプライマリとDRBDセカンダリの間の192.168.xxサブネットでクロスオーバーケーブルを使用する場合は、さらに優れています。残念ながらDRBDは引き続き機能しますが、DRBDは2つの場所の間の距離にわたって恐ろしいパフォーマンスを発揮します。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接続をフリーズさせる可能性がなくなります。MyISAMテーブルに対するすべてのDML更新(INSERT、UPDATE、DELETE)は、常にフルテーブルロックを実行します!!! InnoDBを使用すると、行レベルのロックが導入され、テーブル全体のロックがなくなります。

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

アップデート#2

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

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

DRBDプライマリでDBサーバーの
起動DRBD
起動MySQLのペアを設定します。

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

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

各DRBDプライマリはMySQLを実行し
、相互にマスターとスレーブの両方として機能します

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


@RolandoMySQLDBAに感謝します。データセンターの停止に負荷分散されたVIPを使用することについてのあなたのポイントは理にかなっています。つまり、各データセンターにマスタースレーブを配置することになりますよね。フェールバックが発生した場合、プライマリDBを最新の状態に保つための最良の方法は何だと思いますか?また、私は循環レプリケーションを見ていましたが、それはMySQLクラスタリングに基づいているように見えますか?NDBとは?Drupal 6がNDB(drupal.org/node/391130)でうまく機能しないと思います。お時間をいただきありがとうございます!
和基。

回答を更新しました!!! ところで、私はNDBについて言及したことはありません。MySQL循環レプリケーションは、双方向で実装されたマスタースレーブです。
RolandoMySQLDBA 2011年

説明をありがとう。私はダブルチェックしたかったので、MySQLの円形複製参照の一部は、NDBを述べた( - :ところで、あなたはこれらのトポロジを使用して、フェールオーバーを得ることができる自動化された方法は?
KM。

DRBDは、Linux HeartBeatまたはucarp(ucarp.org/project/ucarp)を使用して自動フェイルオーバーを容易にするように設計されています。私の会社LogicWorksはucarpショップです。ucarpを使用すると、2つのマシンが1つの仮想IP(VIP)アドレスを共有できます。DRBDマスターは、MySQLが実行されているVIPを持ちます。DRBDセカンダリはucarpを実行し、自動フェイルオーバーをトリガーするためにデッドタイムの​​比率を待ちます。ucarpがDB VIPを想定するためのアップスクリプトとダウンスクリプトには、DRBDディスクのマウント、プライマリの作成、およびMySQLの起動が含まれている必要があります。ダウンスクリプトは、MySQLを停止してDRBDをアンマウントし、セカンダリに移動してVIPを終了します。
RolandoMySQLDBA 2011年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.