MySQL の memcached サポート - Amazon Relational Database Service

MySQL の memcached サポート

Amazon RDS は、MySQL 5.6 で導入された InnoDB テーブルに対する memcached インターフェイスの使用をサポートしています。memcached API を使用すると、NoSQL キー/値データストアと似た方法でアプリケーションが InnoDB テーブルを使用することができます。

memcached インターフェイスは、シンプルなキーベースのキャッシュです。アプリケーションは memcached を使用して、キャッシュにあるキーと値のデータペアの挿入、操作、取得を実行します。MySQL 5.6 では、memcached プロトコルによって InnoDB テーブルのデータを発行するデーモンサービスを実装するプラグインが導入されました。MySQL memcached プラグインの詳細については、「InnoDB と memcached の統合」を参照してください。

RDS for MySQL 5.6 以降のインスタンスの memcached サポートを有効にするには

  1. memcached インターフェイスへのアクセスを制御するために使用するセキュリティグループを決定します。既に SQL インターフェイスを使用しているアプリケーションセットが memcached インターフェイスにアクセスするアプリケーションセットと同じ場合、SQL インターフェイスで使用されている既存の VPC または DB セキュリティグループを使用できます。異なるアプリケーションセットが memcached インターフェイスにアクセスする場合は、新しい VPC または DB セキュリティグループを定義します。セキュリティグループの管理方法の詳細については、「セキュリティグループによるアクセスコントロール」を参照してください。

  2. カスタム DB オプショングループを作成し、エンジンタイプとして MySQL、バージョンとして 5.6 以降を選択します。オプショングループの作成方法の詳細については、「オプショングループを作成する」を参照してください。

  3. オプショングループに [MEMCACHED] オプションを追加します。memcached インターフェイスで使用するポート、および、インターフェイスへのアクセスを制御するために使用するセキュリティグループを指定します。オプションの追加方法の詳細については、「オプショングループにオプションを追加する」を参照してください。

  4. 必要に応じて、オプション設定を変更し、memcached パラメータを設定します。オプション設定の変更方法の詳細については、「オプションの設定を変更する」を参照してください。

  5. インスタンスにオプショングループを適用します。オプショングループが適用された場合、Amazon RDS では、そのインスタンスの memcached サポートが有効になります。

    • インスタンスを起動するときにカスタムオプショングループを指定して、新しいインスタンスの memcached サポートを有効にします。MySQL インスタンスの起動方法の詳細については、「Amazon RDS DB インスタンスの作成」を参照してください。

    • インスタンスを変更するときにカスタムオプショングループを指定して、既存のインスタンスの memcached サポートを有効にします。DB インスタンスの変更の詳細については、「Amazon RDS DB インスタンスを変更する」を参照してください。

  6. memcached インターフェイスを介して MySQL テーブル内のアクセス可能な列を指定します。memcached プラグインは、containers という専用データベースに innodb_memcache というカタログテーブルを作成します。containers テーブルに行を挿入して InnoDB テーブルをマッピングし、memcached を介してアクセスします。memcached キー値を格納する InnoDB テーブルの列を 1 つ指定し、キーに関連付けられたデータ値を格納する列を 1 つ以上指定します。また、memcached アプリケーションがその列セットを参照するときに使用する名前も指定します。containers テーブルに行を挿入する方法の詳細については、「InnoDB memcached プラグインの内部構造」を参照してください。InnoDB テーブルをマッピングし、memcached を介してアクセスする例については、「InnoDB memcached プラグインの書き込みアプリケーション」を参照してください。

  7. memcached インターフェイスにアクセスするアプリケーションが、SQL インターフェイスを使用するアプリケーションとは異なるコンピュータまたは EC2 インスタンス上にある場合は、MySQL インスタンスに関連付けられた VPC または DB セキュリティグループに、そのコンピュータの接続情報を追加します。セキュリティグループの管理方法の詳細については、「セキュリティグループによるアクセスコントロール」を参照してください。

インスタンスの memcached サポートを無効にするには、インスタンスを変更して MySQL バージョンのデフォルトオプショングループを指定します。DB インスタンスの変更の詳細については、「Amazon RDS DB インスタンスを変更する」を参照してください。

MySQL memcached のセキュリティ上の考慮事項

memcached プロトコルはユーザー認証をサポートしていません。MySQL memcached のセキュリティ上の考慮事項の詳細については、「memcached の配備」および「MySQL キャッシュレイヤーとしての memcached の使用」を参照してください。

以下の対策をとると、memcached インターフェイスのセキュリティを高めることができます。

  • MEMCACHED オプションをオプショングループに追加するときに、デフォルトの 11211 とは異なるポートを指定します。

  • 既知の信頼されたクライアントアドレスまたは EC2 インスタンスのみにアクセスを制限する VPC または DB セキュリティグループに、memcached インターフェイスを関連付けます。セキュリティグループの管理方法の詳細については、「セキュリティグループによるアクセスコントロール」を参照してください。

MySQL memcached の接続情報

memcached インターフェイスにアクセスするには、アプリケーションで Amazon RDS インスタンスの DNS 名と memcached ポート番号の両方を指定する必要があります。例えば、インスタンスの DNS 名が my-cache-instance.cg034hpkmmjt.region.rds.amazonaws.com で、memcached インターフェイスがポート 11212 を使用している場合、PHP で指定する接続情報は次のようになります。

<?php $cache = new Memcache; $cache->connect('my-cache-instance.cg034hpkmmjt.region.rds.amazonaws.com',11212); ?>

MySQL DB インスタンスの DNS 名と memcached ポートを確認するには

  1. AWS Management Console にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  2. AWS Management Consoleの右上隅で、DB インスタンスを含むリージョンを選択します。

  3. ナビゲーションペインで、[データベース] を選択します。

  4. MySQL DB インスタンスの名前を選択して詳細を表示します。

  5. [Connect] セクションで、[Endpoint] フィールドの値を書き留めます。DNS 名はエンドポイントと同じです。また、[Connect] セクションのポートは memcached インターフェイスへのアクセスには使用されないことにご注意ください。

  6. [Details] セクションで、[Option Group] フィールドにリストされた名前を書き留めます。

  7. ナビゲーションペインで、[オプショングループ] を選択します。

  8. MySQL DB インスタンスで使用するオプショングループの名前を選択して、オプショングループの詳細を表示します。[Options] セクションで、[MEMCACHED] オプションの [Port] 設定の値を書き留めます。

MySQL memcached のオプション設定

Amazon RDS は、MySQL memcached パラメータを Amazon RDS MEMCACHED オプションのオプション設定として公開します。

MySQL memcached のパラメータ

  • DAEMON_MEMCACHED_R_BATCH_SIZE – COMMIT を実行して新しいトランザクションを開始する前に実行する memcached 読み取りオペレーション (get) の回数を指定する整数値。指定できる値は 1〜4294967295 で、デフォルトは 1 です。このオプションは、インスタンスが再開されるまで有効になりません。

  • DAEMON_MEMCACHED_W_BATCH_SIZE – COMMIT を実行して新しいトランザクションを開始する前に実行する memcached 書き込み操作 (add、set、incr など) の回数を指定する整数値。指定できる値は 1〜4294967295 で、デフォルトは 1 です。このオプションは、インスタンスが再開されるまで有効になりません。

  • INNODB_API_BK_COMMIT_INTERVAL – InnoDB memcached インターフェイスを使用するアイドル状態の接続を自動コミットする頻度を指定する整数値。指定できる値は 1〜1073741824 で、デフォルトは 5 です。このオプションは即座に反映され、インスタンスを再開する必要はありません。

  • INNODB_API_DISABLE_ROWLOCK – InnoDB memcached インターフェイスを使用しているときに行ロックの使用を無効 (1=true) または有効 (0=false) にするブール値。デフォルトは 0 (false) です。このオプションは、インスタンスが再開されるまで有効になりません。

  • INNODB_API_ENABLE_MDL – ブール値。0 (false) に設定すると、InnoDB memcached プラグインで使用するテーブルがロックされ、SQL インターフェイスを介して DDL によってそのテーブルを削除または変更できなくなります。デフォルトは 0 (false) です。このオプションは、インスタンスが再開されるまで有効になりません。

  • INNODB_API_TRX_LEVELmemcached インターフェイスで処理されるクエリのトランザクション分離レベルを指定する整数値。指定できる値は 0〜3 です。デフォルトは 0 です。このオプションは、インスタンスが再開されるまで有効になりません。

次の MySQL memcached のパラメータは Amazon RDS によって設定され、ユーザーが変更することはできません: DAEMON_MEMCACHED_LIB_NAMEDAEMON_MEMCACHED_LIB_PATHINNODB_API_ENABLE_BINLOG。MySQL 管理者が daemon_memcached_options を使用して設定したパラメータは、Amazon RDS の個々の MEMCACHED オプション設定として使用できます。

MySQL daemon_memcached_options のパラメータ

  • BINDING_PROTOCOL – 使用するバインディングプロトコルを指定する文字列。指定できる値は、autoascii、または binary です。デフォルトは auto で、サーバーが自動的にクライアントとプロトコルを交渉します。このオプションは、インスタンスが再開されるまで有効になりません。

  • BACKLOG_QUEUE_LIMIT – による処理待ちが可能なネットワーク接続の数を指定する整数値。memcachedこの値を増やすと、クライアントが memcached インスタンスに接続できないというエラーの発生回数が減る可能性がありますが、サーバーのパフォーマンスは向上しません。指定できる値は 1〜2048 で、デフォルトは 1024 です。このオプションは、インスタンスが再開されるまで有効になりません。

  • CAS_DISABLED – 比較と交換 (CAS: compare and swap) の使用を有効 (1=true) または無効 (0=false) にするブール値。項目ごとのサイズが 8 バイトずつ小さくなります。デフォルトは 0 (false) です。このオプションは、インスタンスが再開されるまで有効になりません。

  • CHUNK_SIZE – 最小項目のキー、値、およびフラグに割り当てる最小のチャンクサイズ (バイト単位) を指定する整数値。指定できる値は 1〜48 です。デフォルトは 48 で、値を小さくするとメモリ効率が大幅に向上します。このオプションは、インスタンスが再開されるまで有効になりません。

  • CHUNK_SIZE_GROWTH_FACTOR – 新しいチャンクのサイズを制御する浮動小数点値。新しいチャンクのサイズは、前のチャンクのサイズに CHUNK_SIZE_GROWTH_FACTOR を掛けた値です。指定できる値は 1〜2 で、デフォルトは 1.25 です。このオプションは、インスタンスが再開されるまで有効になりません。

  • ERROR_ON_MEMORY_EXHAUSTED – ブール値。1 (true) に設定すると、項目を格納するメモリが不足した場合、memcached は項目を削除するのではなく、エラーを返します。0 (false) に設定した場合、メモリ不足になると memcached は項目を削除します。デフォルトは 0 (false) です。このオプションは、インスタンスが再開されるまで有効になりません。

  • MAX_SIMULTANEOUS_CONNECTIONS – 同時接続の最大数を指定する整数値。この値を 10 未満に設定すると、MySQL は起動できなくなります。指定できる値は 10〜1024 で、デフォルトは 1024 です。このオプションは、インスタンスが再開されるまで有効になりません。

  • VERBOSITYmemcached サービスが MySQL エラーログに記録する情報のレベルを指定する文字列。デフォルトは「v」です。このオプションは、インスタンスが再開されるまで有効になりません。指定できる値は次のとおりです。

    • v – メインイベントループの実行中に発生したエラーと警告を記録します。

    • vv – v で記録する情報に加えて、各クライアントのコマンドとレスポンスも記録します。

    • vvv – vv で記録する情報に加えて、内部の状態遷移も記録します。

これらの MySQL DAEMON_MEMCACHED_OPTIONS のパラメータは Amazon RDS によって設定され、ユーザーが変更することはできません: DAEMON_PROCESSLARGE_MEMORY_PAGESMAXIMUM_CORE_FILE_LIMITMAX_ITEM_SIZELOCK_DOWN_PAGE_MEMORYMASKIDFILEREQUESTS_PER_EVENTSOCKETUSER