web-dev-qa-db-ja.com

MySQLレプリケーションでマスターがダウンしているときにスレーブを使用するクライアント

Mysqlレプリケーションでマスターがダウンしているときにクライアントがスレーブを使用することは可能ですか?

私はすでにマスターとスレーブを持つ単純なmysqlレプリケーションをセットアップしました。

クライアントはマスターに接続してデータベースにアクセスします。マスターサーバーに加えられた変更はすべてスレーブに複製されます。マスターサーバーがダウンしたときにクライアントが自動的にスレーブサーバーに接続するように構成するにはどうすればよいですか?

MySQLサーバー5.1およびMySQLワークベンチ5.2 CEを使用しています。マスターとスレーブの両方のmy.iniファイルを編集しました。

クライアントはJ2EEアプリケーションを使用します。

変更を加えるために、マスターmy.iniファイルにどの追加コマンドを入力する必要がありますか?

また、レプリケーション間の時間間隔を増減する方法はありますか?

4
Dwayne Johnson

あなたはマスター/スレーブを持っているので、2つのものの使用を実装したいかもしれません

  1. 循環レプリケーション
  2. データベース仮想IP(別名DBVIP)

循環レプリケーション

循環レプリケーションは、最初にマスター/スレーブをセットアップしてから、スレーブをマスターのマスターとして、マスターをスレーブのスレーブとして使用して同じ手順を実行することです。それはただ伴うだけです

  • 各DBサーバーで異なるserver_idを明示的に使用する
  • 両方のDBサーバーでバイナリログを有効にする
  • レプリケーションユーザーが両方のDBサーバーで定義されていることを確認する

データベース仮想IP(別名DBVIP)

DBVIPをセットアップするためにダウンロードしてインストールできる製品があります。私が使用するそのような製品の1つは ucarp です。別の製品はLinux Heartbeatです。私は通常、MySQL循環レプリケーションまたはマスター/スレーブでそのようなものを使用しません。どうして?

これらの製品は自動フェイルオーバーを実行できるため、スレーブがレプリケーションラグで数秒遅れている場合は、これを実行する必要はありません。

手動フェイルオーバーを実行する必要があります。

DBVIP管理を実装するための貧乏人のアプローチを次に示します。

この設定があるとしましょう

  • DBサーバー1にはIP 10.1.2.30があります
  • DB Server2にはIP 10.1.2.40があります
  • DBVIP 10.1.2.50を使用したい

このように/ usr/local/sbin/MyAppDBVIPというスクリプトを作成します

echo echo 10.1.2.50 > /usr/local/sbin/MyAppDBVIP

/ usr/local/sbin/dbvip-upというスクリプトを作成します

DBVIP=`/usr/local/sbin/MyAppDBVIP`
ip addr add ${DBVIP}/24 dev eth1

/ usr/local/sbin/dbvip-downというスクリプトを作成します

DBVIP=`/usr/local/sbin/MyAppDBVIP`
ip addr del ${DBVIP}/24 dev eth1

すべてのスクリプトが実行可能であることを確認してください

chmod +x /usr/local/sbin/MyAppDBVIP
chmod +x /usr/local/sbin/dbvip-up
chmod +x /usr/local/sbin/dbvip-down

これらのスクリプトが両方のDBサーバーに存在することを確認してください

選択したサーバーでdbvipを実行するだけです。 。

したがって、フェイルオーバープロセスとプロトコルは次のとおりです。

  • DBVIPがあるDBサーバーでdbvip-downを実行します。出来なければ
  • DBVIPを作成するDBサーバーでdbvip-upを実行します
  • 両方のマシンでdbvip-upを実行しないでください。
  • dbvip-upを実行した後、Apache、JBoss、または古いマスター経由でMySQLに接続しているその他のアプリサーバーを再起動します。
3
RolandoMySQLDBA

「マスターがダウンしているときにスレーブを使用する」とはどういう意味ですか?マスターがダウンした場合、スレーブをマスターに切り替えるプロセスを「フェイルオーバー」と呼びます。

ただし、このフェイルオーバーシナリオでアプリケーションが古いスレーブの使用を開始すると、新しいスレーブになります。古いマスターを再びオンラインにすると、データが変更されているため、スレーブとして設定する必要があります。

状況(単一スレーブ)のフェイルオーバーは、主にアプリケーションで処理されます。アプリケーションが接続していることを確認するロジックを実装する必要があります。そうでない場合は、代わりにアプリケーションをスレーブに接続させます。

覚えておくべきいくつかのこと:

  • この場合も、アプリケーションがスレーブに接続してデータを変更したら、アプリケーションがマスターに再度接続しないようにする必要があります。
  • (Nagiosまたはその他のスイートを使用して)アラート監視を設定して、マスターがいつ失敗したかを確認することをお勧めします。
1
Derek Downey