MySQL 5.6 リファレンスマニュアル  /  ...  /  MySQL Cluster レプリケーションを使用したフェイルオーバーの実装

18.6.8 MySQL Cluster レプリケーションを使用したフェイルオーバーの実装

プライマリクラスタのレプリケーションプロセスが失敗した場合、セカンダリレプリケーションチャネルに切り替えることができます。次に、この実現に必要なステップについて説明します。

  1. 最新のグローバルチェックポイント (GCP) の時間を取得します。すなわち、スレーブクラスタの ndb_apply_status テーブルから最新のエポックを指定する必要があり、これは次のクエリーを使用して特定できます。

    mysqlS'> SELECT @latest:=MAX(epoch)
          ->        FROM mysql.ndb_apply_status;
    
  2. ステップ 1 で示したクエリーから得た情報を使用して、マスタークラスタの ndb_binlog_index テーブルから対応するレコードを取得します。

    MySQL Cluster NDB 7.3 では、次のクエリーを使用すると、マスターの ndb_binlog_index テーブルから必要なレコードを取得できます。

    mysqlM'> SELECT
          ->     @file:=SUBSTRING_INDEX(next_file, '/', -1),
          ->     @pos:=next_position
          -> FROM mysql.ndb_binlog_index
          -> WHERE epoch = @latest
          -> ORDER BY epoch ASC LIMIT 1;
    

    これらは、プライマリレプリケーションチャネルでの障害発生後に、マスターに保存されたレコードです。ここでは、ユーザー変数 @latest を使用して、ステップ 1 で取得した値を表します。もちろん、ある mysqld インスタンスが、ほかのサーバーインスタンスに設定されたユーザー変数には直接アクセスできません。これらの値は、手動で 2 番目のクエリーに、またはアプリケーションコードにプラグインする必要があります。

    重要

    START SLAVE を実行する前に、スレーブ mysqld--slave-skip-errors=ddl_exist_errorsで起動されていることを確認します。そうしないと、レプリケーションが重複 DDL エラーで停止する可能性があります。

  3. これで、セカンダリスレーブサーバーで次のクエリーを実行して、セカンダリチャネルの同期を取ることができるようになります。

    mysqlS'> CHANGE MASTER TO
          ->     MASTER_LOG_FILE='@file',
          ->     MASTER_LOG_POS=@pos;
    

    再度ユーザー変数 (この場合は @file@pos) を使用して、ステップ 2 で取得され、ステップ 3 で適用される値を表します。実際には、これらの値を手動で挿入するか、関与する両方のサーバーにアクセスできるアプリケーションコードを使用して挿入する必要があります。

    注記

    @file'/var/log/mysql/replication-master-bin.00001' などの文字列値であるため、SQL またはアプリケーションコードで使用するときは、引用符で囲む必要があります。ただし、@pos で表される値は引用符で囲む必要はありません。通常、MySQL は文字列を数字に変換しようとしますが、この場合は例外です。

  4. これで、セカンダリスレーブの mysqld で適切なコマンドを発行して、セカンダリチャネルでレプリケーションを開始できるようになりました。

    mysqlS'> START SLAVE;
    

セカンダリレプリケーションチャネルがアクティブになったら、プライマリの不具合を調べて、修復できます。これを行うために必要な的確なアクションは、プライマリチャネルで失敗した原因によって異なります。

警告

セカンダリレプリケーションチャネルは、プライマリレプリケーションチャネルの停止時や停止した場合にのみ、起動されます。複数のレプリケーションチャネルを同時に実行すると、不要な重複レコードがレプリケーションスレーブで作成される可能性があります。

障害が 1 台のサーバーに限定される場合、M から S' に、または M' から S に、(論理的には) 複製できますが、まだ検証されていません。


User Comments
Sign Up Login You must be logged in to post a comment.