如何测试我与 Amazon ElastiCache Redis 或 Memcached 集群的连接?

4 分钟阅读
0

我想从 Linux 客户端测试我与 Amazon ElastiCache for Redis 或 Amazon ElastiCache for Memcached 集群的连接。

简述

Amazon ElastiCache 支持两个内存中键值引擎:Redis 和 Memcached。请在启动 ElastiCache 缓存群集时,选择您的首选引擎。

**注意:**该解决方案包括测试仅供计划外使用的连接。如需获取受支持的 Redis 客户端列表,请参阅 Redis 网站文档

对于搭载 Java、.NET 或 PHP 的 Memcached,最佳实践是使用具备 Auto Discovery 功能的 ElastiCache 客户端。具备 Auto Discovery 功能的 ElastiCache 客户端会自动识别添加到缓存群集的新 ElastiCache 节点。

解决方案

创建 ElastiCache 集群

**注意:**如果您要连接到现有集群,请继续执行下一步。

有关如何创建 ElastiCache Redis 集群的信息,请参阅创建集群(Amazon ElastiCache for Redis 用户指南)。

有关如何创建 Memcached 集群的信息,请参阅创建集群(Amazon ElastiCache for Memcached 用户指南)。

连接到 ElastiCache Redis 集群

ElastiCache 支持已禁用集群模式和已启用集群模式的 Redis 集群。要测试与这些集群的连接,请使用 redis-cli 或 redis6-cli 实用程序。最新版本的 redis-cli 和 redis6-cli 支持 SSL/TLS 连接到开启了加密和身份验证的集群。在您连接的 Amazon Elastic Compute Cloud(Amazon EC2)实例上下载并编译 redis-cli 实用程序。有关如何连接到 Amazon EC2 实例的说明,请参阅教程: 开始使用 Amazon EC2 Linux 实例

**注意:**以下示例中使用运行 Amazon Linux、Amazon Linux 2 和 Amazon Linux 2023 的 EC2 实例。有关如何使用其他 Linux 发行版安装和编译 redis-cli 和 redis6-cli 的文档,请参阅特定操作系统的文档。

Amazon Linux 2023

sudo yum install redis6 -y

Amazon Linux 2

$sudo amazon-linux-extras install epel -y$sudo yum install gcc jemalloc-devel openssl-devel tcl tcl-devel -y
$sudo wget http://download.redis.io/redis-stable.tar.gz
$sudo tar xvzf redis-stable.tar.gz
$cd redis-stable
$sudo make BUILD_TLS=yes

Amazon Linux

$sudo yum install gcc jemalloc-devel openssl-devel tcl tcl-devel clang wget$sudo wget http://download.redis.io/redis-stable.tar.gz
$sudo tar xvzf redis-stable.tar.gz
$cd redis-stable
$sudo CC=clang make BUILD_TLS=yes

默认情况下,redis-cli 在连接到 Redis 时使用未加密的 TCP 连接。当 redis-cli 编译时,BUILD_TLS=yes 选项会启用 SSL/TLS。如果您连接的集群对传输没有设置加密,则不需要 Build_TLS=yes 选项。在以下步骤中,加密或未加密的集群是指是否对传输进行加密。

**注意:**当您安装 redis6 软件包时,您会自动安装默认支持 SSL/TLS 的 redis6-cli。

有关如何查找 Redis 端点的信息,请参阅查找连接端点

连接到已禁用集群模式的未加密集群

  1. 要连接到集群,请运行以下命令。在以下示例命令中,将 change-node-type.54awdt.ng.0001.use1.cache.amazonaws.com6379 替换为您的集群端点和端口号:

    Amazon Linux 2023

    redis6-cli -h change-node-type.54awdt.ng.0001.use1.cache.amazonaws.com -p 6379

    Amazon Linux 和 Amazon Linux 2

    src/redis-cli -h change-node-type.54awdt.ng.0001.use1.cache.amazonaws.com -p 6379

    此命令返回的 Redis 命令提示符类似于以下示例:

    change-node-type.54awdt.ng.0001.use1.cache.amazonaws.com:6379>
  2. 连接到集群后,您可以运行 Redis 命令,例如以下示例:

    set a "hello"OK
    get a
    "hello"
    quit

    有关更多信息,请参阅 redis.io 网站上的Commands

连接到已启用集群模式的未加密集群

要连接到集群,请运行以下命令。在以下示例命令中,将 cluster-disable-rediscli.54awdt.clustercfg.use1.cache.amazonaws.com6379 替换为您集群的配置端点和端口号:

Amazon Linux 2023

redis6-cli -h cluster-disabled-rediscli.54awdt.clustercfg.use1.cache.amazonaws.com -c -p 6379

Amazon Linux 和 Amazon Linux 2

src/redis-cli -h cluster-disabled-rediscli.54awdt.clustercfg.use1.cache.amazonaws.com -c -p 6379

**注意:**在这些命令中,选项 -c 在 -ASK 和 -MOVED 重定向后启用集群模式。有关更多信息,请参阅 redis.io 网站上的 Client and Server roles in the Redis cluster protocol

Redis 命令提示符中的结果类似于以下示例:

cluster-disabled-rediscli.54awdt.clustercfg.use1.cache.amazonaws.com:>

现在您可以运行 Redis 命令了。-c 选项将会带来重定向。如果您未开启重定向,则该命令返回 MOVED 错误。有关 MOVED 错误的更多信息,请参阅 Redis 网站上的 Redis cluster specification

以下是一些 Redis 命令示例:

set x Hi-> Redirected to slot [16287] located at 172.31.28.122:6379
OK
set y Hello
OK
get y
"Hello"
set z Bye
-> Redirected to slot [8157] located at 172.31.9.201:6379
OK
get z
"Bye"
get x
-> Redirected to slot [16287] located at 172.31.28.122:6379
"Hi"

在开启了加密和身份验证的情况下连接到集群

您可以选择启用 AUTH。但是,要启用 AUTH,您必须开启传输中加密。有关 ElastiCache 加密和身份验证的详细信息,请参阅 ElastiCache 传输中加密(TLS)

要同时连接到已启用集群模式和已禁用集群模式的加密集群,请在 redis-cli 中使用 --tls 选项。如果集群设置了 AUTH 令牌,则您可以使用选项 -a 提供 AUTH 密码。

**注意:**在 Redis 版本 7 和之后的版本中,会对现有 ElastiCache 集群开启传输中加密。您可以更改 Redis 集群的 TLS 配置,无需重新构建或重新配置集群,也不会影响应用程序可用性。开启传输中加密后,请更新您的客户端配置以使用新的特定于 TLS 的端点。有关更多信息,请参阅在启用传输中加密之前、期间和之后建立连接的最佳实践

在以下示例中,用您的集群端点和端口进行替换。

连接到已禁用集群模式的加密集群

以下示例命令连接到开启了加密和身份验证的集群:

Amazon Linux 2023

redis6-cli -h master.rediscli-cluster-disabled.54awdt.use1.cache.amazonaws.com --tls -a PASSWORD -p 6379

Amazon Linux 和 Amazon Linux 2

src/redis-cli -h master.rediscli-cluster-disabled.54awdt.use1.cache.amazonaws.com --tls -a PASSWORD -p 6379

以下示例命令连接到仅开启了加密的集群:

Amazon Linux 2023

redis6-cli -h master.cluster-disabled-noauth.54awdt.use1.cache.amazonaws.com --tls -p 6379

Amazon Linux 和 Amazon Linux 2

src/redis-cli -h master.cluster-disabled-noauth.54awdt.use1.cache.amazonaws.com --tls -p 6379

连接到已启用集群模式的加密集群

以下示例命令连接到开启了加密和身份验证的集群:

Amazon Linux 2023

redis6-cli -h clustercfg.tlswithauth.54awdt.use1.cache.amazonaws.com --tls -c -a PASSWORD -p 6379

Amazon Linux 和 Amazon Linux 2

src/redis-cli -h clustercfg.tlswithauth.54awdt.use1.cache.amazonaws.com --tls -c -a PASSWORD -p 6379

以下示例命令连接到仅开启了加密的集群:

Amazon Linux 2023

redis6-cli -h clustercfg.tlswithoutauth.54awdt.use1.cache.amazonaws.com --tls -c -p 6379

Amazon Linux 和 Amazon Linux 2

src/redis-cli -h clustercfg.tlswithoutauth.54awdt.use1.cache.amazonaws.com --tls -c -p 6379

连接到集群后,即可运行 Redis 命令,如前面的未加密集群示例所示。

redis-cli 的替代方案

对于未经过 redis-cli 编译的简短测试,您可以将其连接到未启用集群模式的集群。为此,请使用 telnet 或 openssl。在以下示例命令中,用您的集群端点和端口进行替换。

注意:要安装 telnet 实用程序,请参阅下文中的在不采用传输中加密的情况下连接到 Memcached 集群章节。

连接后,即可运行 Redis 命令,如前面的示例所示。

以下示例命令连接到已禁用加密或身份验证集群模式的集群:

openssl s_client -connect master.rediscli-cluster-disabled.54awdt.use1.cache.amazonaws.com:6379

如果集群设置了密码,则首先连接到集群。连接后,使用以下命令对集群进行身份验证,然后按 Enter 键。在以下示例命令中,将 Password 替换为您的集群密码:

Auth Password

以下示例命令连接到未开启加密或身份验证且已禁用集群模式的集群:

telnet change-node-type.54awdt.ng.0001.use1.cache.amazonaws.com 6379

连接到 ElastiCache Memcached 集群

要连接到 Memcached 集群,请使用 telnet 实用程序。

在不采用传输中加密的情况下连接到 Memcached 集群

  1. 在您正在测试连接的 EC2 实例上安装 telnet 实用程序。

    对于基于 CentOS 的系统,运行以下命令:

    $sudo yum install telnet

    对于基于 Debian 的系统(Ubuntu),运行以下命令:

    $sudo apt-get install telnet

    有关如何连接到 Amazon EC2 实例的说明,请参阅教程: 开始使用 Amazon EC2 Linux 实例

  2. 要连接到端点,请运行以下示例命令。将 mycachecluster.eaogs8.0001.usw2.cache.amazonaws.com 替换为您的端点,将 11211 替换为您的节点端口:

    telnet mycachecluster.eaogs8.0001.usw2.cache.amazonaws.com 11211

    输出结果类似于以下示例:

    Trying 128.0.0.1...Connected to mycachecluster.eaogs8.0001.usw2.cache.amazonaws.com.
    Escape character is '^]'.
    >

现在,您已连接到一个节点。您可以运行 Memcached 命令,如以下示例输出所示:

set a 0 0 5hello
STORED
get a
VALUE a 0 5
hello
END

在采用传输中加密的情况下连接到 MemCached 集群

运行 Memcached 版本 1.6.12 及更高版本的集群支持传输中加密。Telnet 不使用加密。要连接到开启了加密的 MemCached 集群,请使用 openssl 客户端。

**注意:**只有在创建集群时,您才能在该集群上开启传输中加密。您不能通过修改集群来开启和关闭传输中加密。有关更多信息,请参阅 ElastiCache 传输中加密(TLS)

要连接到端点,请运行以下示例命令。将 testwithtls.qtyxq7.cfg.apse2.cache.amazonaws.com 替换为您的端点,将 11211 替换为您的节点端口:

openssl s_client -quiet -crlf -connect testwithtls.qtyxq7.cfg.apse2.cache.amazonaws.com:11211

下面是示例输出:

depth=2 C = US, O = Amazon, CN = Amazon Root CA 1  verify return:1  
depth=1 C = US, O = Amazon, CN = Amazon RSA 2048 M02  
verify return:1  
depth=0 CN = *.testwithtls.qtyxq7.apse2.cache.amazonaws.com  
verify return:1

现在,您已连接到一个节点。您可以运行 Memcached 命令,如以下示例输出所示:

set a 0 0 5hello
STORED
get a
VALUE a 0 5
hello
END
AWS 官方
AWS 官方已更新 7 个月前