MySQL memcached 支持 - Amazon Relational Database Service

MySQL memcached 支持

Amazon RDS 支持对 InnoDB 表使用 memcached 接口,该接口已在 MySQL 5.6 中引入。通过 memcached API,应用程序可以按照 NoSQL 密钥值数据存储的类似使用方式来使用 InnoDB 表。

memcached 接口是基于键的简单缓存。应用程序使用 memcached 插入、操作和检索缓存中的“键-值”数据对。MySQL 5.6 引入了一个插件来实现一个守护进程服务,该服务通过 memcached 协议公开 InnoDB 表中的数据。有关 MySQL memcached 插件的更多信息,请参阅 InnoDB 与 memcached 的集成

实现对 RDS for MySQL 数据库实例的 memcached 支持
  1. 确定用于控制对 memcached 接口的访问的安全组。如果已在使用 SQL 接口的应用程序集与访问 memcached 接口的应用程序集相同,则可使用 SQL 接口所用的现有 VPC 安全组。如果访问 memcached 接口的系列应用程序与之不同,则请定义新的 VPC 或数据库安全组。有关管理安全组的更多信息,请参阅 使用安全组控制访问权限

  2. 创建自定义数据库选项组,引擎类型选择 MySQL 并选择版本。有关创建选项组的更多信息,请参阅 创建选项组

  3. MEMCACHED 选项添加到该选项组。指定 memcached 接口将使用的端口以及用于控制对接口的访问的安全组。有关添加选项的更多信息,请参阅 将选项添加到选项组

  4. 如有必要,修改选项设置以配置 memcached 参数。有关如何修改选项设置的更多信息,请参阅 修改选项设置

  5. 将选项组应用于实例。在应用选项组时,Amazon RDS 会为该实例启用 memcached 支持:

    • 您可以通过在启动实例时指定自定义选项组来启用新实例的 memcached 支持。有关启动 MySQL 实例的更多信息,请参阅 创建 Amazon RDS 数据库实例

    • 您可以通过在修改实例时指定自定义选项组来启用现有实例的 memcached 支持。有关修改 数据库实例的更多信息,请参阅 修改 Amazon RDS 数据库实例

  6. 指定 MySQL 表中哪些列可以通过 memcached 接口进行访问。memcached 插件会在名为 containers 的专用数据库中创建名为 innodb_memcache 的目录表。在 containers 表中插入行,使之映射通过 memcached 访问的 InnoDB 表。在 InnoDB 表中指定用于存储 memcached 键值的列,并指定一个或多个用于存储与该键关联的数据值的列。您还指定一个 memcached 应用程序用于引用列集的名称。有关在 containers 表中插入行的详细信息,请参阅 InnoDB memcached 插件内部信息。有关映射 InnoDB 表并通过 memcached 访问该表的示例,请参阅为 InnoDB memcached 插件编写应用程序

  7. 如果访问 memcached 接口的应用程序与使用 SQL 接口的应用程序位于不同的计算机或 EC2 实例上,请将这些计算机的连接信息添加到与 MySQL 实例关联的 VPC 安全组。有关管理安全组的更多信息,请参阅 使用安全组控制访问权限

您通过修改该实例并指定 MySQL 版本的默认选项组来关闭实例的 memcached 支持。有关修改 数据库实例的更多信息,请参阅 修改 Amazon RDS 数据库实例

MySQL memcached 安全注意事项

memcached 协议不支持用户身份验证。有关 MySQL memcached 安全注意事项的更多信息,请参阅 MySQL 文档中的 InnoDB memcached 插件的安全注意事项

您可以采取下列操作来帮助提高 memcached 接口的安全性:

  • 在向选项组添加 MEMCACHED 选项时,指定一个与默认 11211 不同的端口。

  • 确保将 memcached 接口与用于限制对巳知的可信客户端地址和 EC2 实例的访问的 VPC 安全组关联。有关管理安全组的更多信息,请参阅 使用安全组控制访问权限

MySQL memcached 连接信息

要访问 memcached 接口,应用程序必须同时指定 Amazon RDS 实例的 DNS 名称和 memcached 端口号。例如,如果实例的 DNS 名称为 my-cache-instance.cg034hpkmmjt.region.rds.amazonaws.com,并且内存缓存接口使用端口 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中的右上角,选择包含该数据库实例的地区。

  3. 在导航窗格中,选择 Databases (数据库)

  4. 选择 MySQL 数据库实例名称以显示其详细信息。

  5. 连接部分中,记下终端节点字段的值。DNS 名称与终端节点相同。另请注意,连接部分中的端口未用于访问 memcached 接口。

  6. 详细信息部分,记下选项组字段中列出的名称。

  7. 在导航窗格中,选择选项组

  8. 选择 MySQL 数据库实例所用的选项组名称以显示该选项组的详细信息。在选项部分,记下 MEMCACHED 选项的端口设置值。

MySQL memcached 选项设置

Amazon RDS 将 MySQL memcached 参数公开为 Amazon RDS MEMCACHED 选项中的选项设置。

MySQL memcached 参数

  • DAEMON_MEMCACHED_R_BATCH_SIZE – 一个整数,用于指定在执行 COMMIT 操作启动新的事务前应执行多少个 memcached 读取操作(获取)。允许的值是 1 到 4294967295;默认值为 1。此选项在重新启动实例后生效。

  • DAEMON_MEMCACHED_W_BATCH_SIZE – 一个整数,用于指定在执行 COMMIT 操作启动新的事务前应执行多少个 memcached 写入操作,如添加、设置或者 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 插件使用的表,以便 DDL 无法通过 SQL 接口删除或者更改该表。默认为 0 (false)。此选项在重新启动实例后生效。

  • INNODB_API_TRX_LEVEL – 一个整数,用于指定 memcached 接口处理的查询的事务隔离级别。容许值是 0 到 3。默认值为 0。此选项在重新启动实例后生效。

Amazon RDS 配置以下 MySQL memcached 参数,这些参数无法修改:DAEMON_MEMCACHED_LIB_NAMEDAEMON_MEMCACHED_LIB_PATHINNODB_API_ENABLE_BINLOG。在 Amazon RDS 中,也以单个 daemon_memcached_options 选项设置是形式提供 MySQL 管理员使用 MEMCACHED 设置的参数。

MySQL daemon_memcached_options 参数

  • BINDING_PROTOCOL – 一个字符串,用于指定要使用的绑定协议。允许的值是 autoasciibinary。默认值为 auto,这意味着服务器与客户端自动协商协议。此选项在重新启动实例后生效。

  • BACKLOG_QUEUE_LIMIT 一个整数,用于指定可等待 处理的网络连接的数目。memcached增大此限值会减少无法连接到 memcached 实例的客户端所收到的错误,但不会提高服务器性能。允许的值是 1 到 2048;默认值为 1024。此选项在重新启动实例后生效。

  • CAS_DISABLED – 一个布尔值,该值启用 (1 (true)) 或禁用 (0 (false)) 比较和交换 (CAS),它可使每个项大小减少 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。此选项在重新启动实例后生效。

  • VERBOSITY – 一个字符串,用于指定 memcached 服务在 MySQL 错误日志中记录的信息级别。默认值为 v。此选项在重新启动实例后生效。容许值为:

    • v – 记录运行主事件循环时出现的错误和警告。

    • vv – 除了 v 选项记录的信息之外,还会记录每个客户端命令和响应。

    • vvv – 除了 vv 选项记录的信息之外,还会记录内部状态转换。

Amazon RDS 配置这些 MySQL DAEMON_MEMCACHED_OPTIONS 参数,且无法进行修改:DAEMON_PROCESSLARGE_MEMORY_PAGESMAXIMUM_CORE_FILE_LIMITMAX_ITEM_SIZELOCK_DOWN_PAGE_MEMORYMASKIDFILEREQUESTS_PER_EVENTSOCKETUSER