Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


MySQL 5.6 リファレンスマニュアル  /  ...  /  レプリケーションでの InnoDB memcached プラグインの使用

14.18.6 レプリケーションでの InnoDB memcached プラグインの使用

InnoDB memcached デーモンプラグインは MySQL バイナリログをサポートしているため、memcached インタフェース経由でマスターサーバーに実行した更新は、バックアップ、読み取り処理の多いワークロードのバランスの確保、および高可用性のためにレプリケーションできます。すべての memcached コマンドは、バイナリロギング用にサポートされています。

スレーブサーバー上で InnoDB memcached プラグインをセットアップする必要はありません。この構成の主な利点は、マスター上での書き込みスループットの増加です。レプリケーションメカニズムの速度は影響を受けません。

次のセクションでは、バイナリログ機能を使用して、InnoDB memcached プラグインを MySQL レプリケーションと一緒に使用する方法を示します。セクション14.18.3「InnoDB Memcached プラグインの概要」に記載されている基本設定がすでに実行されていることを前提としています。

innodb_api_enable_binlog による InnoDB Memcached バイナリログの有効化:

  • InnoDB memcached プラグインを MySQL バイナリログと一緒に使用するには、マスターサーバー上で innodb_api_enable_binlog 構成オプションを有効にします。このオプションはサーバーのブート時にのみ設定できます。また、--log-bin オプションを使用して、マスターサーバー上で MySQL バイナリログを有効にする必要もあります。これらのオプションを、my.cnf などのサーバー構成ファイルに追加したり、mysqld コマンド行に追加したりできます。

    mysqld ... --log-bin -–innodb_api_enable_binlog=1
  • 次に、セクション17.1.1「レプリケーションのセットアップ方法」に記載されているようにマスターサーバーおよびスレーブサーバーを構成します。

  • mysqldump を使用してマスターデータスナップショットを作成し、これをスレーブサーバーに同期します。

    master shell: mysqldump --all-databases --lock-all-tables > dbdump.db
    slave shell: mysql < dbdump.db
  • マスターサーバー上で、show master status を発行してマスターバイナリログ座標を取得します。

    mysql> show master status;
  • スレーブサーバー上で、change master to ステートメントを使用して、上記の座標でスレーブサーバーをセットアップします。

    mysql> CHANGE MASTER TO
           MASTER_HOST='localhost',
           MASTER_USER='root',
           MASTER_PASSWORD='',
           MASTER_PORT = 13000,
           MASTER_LOG_FILE='0.000001,
           MASTER_LOG_POS=114;
  • 次に、スレーブを開始します。

    mysql> start slave;

    次のような出力がエラーログから出力される場合、スレーブはレプリケーションの準備ができています。

    111002 18:47:15 [Note] Slave I/O thread: connected to master 'root@localhost:13000',
    replication started in log '0.000001' at position 114

memcached telnet インタフェースによるテスト

上記のレプリケーション設定を備えたサーバーをテストするには、memcached telnet インタフェースを使用し、さらに SQL を使用してマスターサーバーおよびスレーブサーバーにクエリーを実行して、結果を検証します。

ここでの構成設定 SQL で、memcached によって使用される test データベース内に 1 つのサンプルテーブル demo_test が作成されます。このデフォルトテーブルをデモ用に使用します。

  • set を使用して、キー test1、値 t1、およびフラグ 10 を持つレコードを挿入します。

    telnet 127.0.0.1 11211
    Trying 127.0.0.1...
    Connected to 127.0.0.1.
    Escape character is '^]'.
    set test1 10 0 2
    t1
    STORED

マスターサーバーで、行が挿入されたことを確認できます。c1 はキーにマップされ、c2 は値にマップされ、c3 はフラグ、c4cas 値、および c5 は期限です。

mysql> select * from test.demo_test;
c1 c2 c3 c4 c5
test1 t1 10 2 0
1 row in set (0.00 sec)

スレーブサーバーでは、レプリケーションによって同じレコードが挿入されたことがわかります。

mysql> select * from test.demo_test;
c1 c2 c3 c4 c5
test1 t1 10 2 0
1 row in set (0.00 sec)
  • set コマンドを使用して、キー test1 を新しい値 new に更新します。

Connected to 127.0.0.1.
Escape character is '^]'.
set test1 10 0 3
new
STORED

スレーブサーバーで、更新がレプリケーションされます (cas 値も更新されます)。

mysql> select * from test.demo_test;
c1 c2 c3 c4 c5
test1 new 10 3 0
1 row in set (0.00 sec)
  • delete コマンドでレコードを削除します。

Connected to 127.0.0.1.
Escape character is '^]'.
delete test1
DELETED

削除がスレーブにレプリケーションされると、スレーブ上のレコードも削除されます。

mysql> select * from test.demo_test;
Empty set (0.00 sec)
  • flush_all コマンドでテーブルを削除します。

最初に、telnet でマスターサーバーに接続して 2 つのレコードを挿入します。

Connected to 127.0.0.1.
Escape character is '^]'
set test2 10 0 5
again
STORED
set test3 10 0 6
again1
STORED

スレーブサーバーで、これらの 2 つのレコードがレプリケーションされることを確認します。

mysql> select * from test.demo_test;
c1 c2 c3 c4 c5
test2 again 10 5 0
test3 again1 10 6 0
2 rows in set (0.00 sec)

telnet インタフェースで flush_all を呼び出してテーブルを削除します。

Connected to 127.0.0.1.
Escape character is '^]'.
flush_all
OK

次に、削除操作がスレーブサーバーにレプリケーションされたことを確認します。

mysql> select * from test.demo_test;
Empty set (0.00 sec)

すべての memcached コマンドは、レプリケーションでサポートされます。

InnoDB Memcached Binlog に関する注意点

Binlog 形式:

  • ほとんどの memcached 操作は (挿入、削除、更新に類似した) DML ステートメントにマップされます。MySQL Server によって実際に処理される SQL ステートメントがないため、memcached コマンド (flush_all 以外) は行ベースのレプリケーション (RBR) ロギングを使用します。これはサーバーのすべての binlog_format 設定とは無関係です。

  • memcached flush_all コマンドは TRUNCATE TABLE コマンドにマップされます。DDL コマンドはステートメントベースのロギングのみ使用できるため、この flush_all コマンドは TRUNCATE TABLE ステートメントを送信することでレプリケーションされます。

トランザクション:

  • トランザクションの概念は、これまで通常は memcached アプリケーションの一部をなすものではありませんでした。ここでは daemon_memcached_r_batch_size および daemon_memcached_w_batch_size を使用して、パフォーマンスを考慮した読み取りおよび書き込みトランザクションのバッチサイズを制御します。これらの設定はレプリケーションに影響せず、基礎テーブル上でのすべての SQL 操作は実行完了後すぐにレプリケーションされます。

  • daemon_memcached_w_batch_size のデフォルト値は 1 であるため、memcached の書き込み操作は即時にコミットされます。このデフォルト設定は、マスターサーバーとスレーブサーバーに表示されるデータの不整合を回避するために、ある程度のパフォーマンスオーバーヘッドを発生させます。レプリケートされたレコードは、常にスレーブサーバー上でただちに使用可能になります。daemon_memcached_w_batch_size を 1 より大きく設定した場合、memcached インタフェースを介して挿入または更新されたレコードは、マスターサーバー上にすぐには表示されません。これらのレコードがコミットされる前にレコードをマスターサーバー上に表示するには、set transaction isolation level read uncommitted を発行します。


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