设置 Redis 集群以实现可扩展性和高可用性

Amazon ElastiCache for Redis 集群模式的设置、配置、安全性和预配置
发布时间:2019 年 6 月 5 日
Amazon ElastiCache for Redis
免费套餐
Olawale Olaleye
亚马逊云科技使用经验
100 - 初级
完成所需时间
10 - 20 分钟
所需费用

可通过 免费套餐 试用。

前提条件

注册 / 登录 亚马逊云科技账户

使用场景

扩展、高可用性和实时应用程序

受众

开发人员

上次更新时间
2019 年 6 月 5 日

在本教程中,您将学习如何使用启用了 TLS 加密的 ElastiCache for Redis 7.0 版本创建和配置 Redis 集群。启用集群模式后,Redis 集群将获得增强的可扩展性和高可用性。您可以从小规模开始,并随着应用程序的增长轻松扩展 Redis 数据,通过在不同可用区设置副本,还可以提高读取能力。通过学习本教程,您还将了解有关部署 Redis 集群的一些最佳实践。

Redis 客户端生态系统非常丰富,支持集群模式功能。客户端可以在本地缓存中跟踪哈希槽的位置,因此可以很容易且可靠地处理分片数据,从而提高整个系统的性能。

本教程中创建的 ElastiCache 节点适用于免费套餐。

登录 Amazon ElastiCache 控制面板 »

要求

在本教程的某个阶段,您需要连接到 Redis 集群,以便亲身体验它的某些功能。这意味着您需要访问一个安装了 Redis 客户端的 EC2 实例。如果您已经有一个安装了 Redis 客户端的 EC2 实例,可以跳到步骤 1。否则,请连接到您的 Amazon EC2 实例,并按照以下说明安装 Redis 客户端。

如果没有可用的 C 编译器,请运行以下命令安装一个:

$ sudo yum install gcc

下载并编译 Redis 客户端:

$ curl -O http://download.redis.io/redis-stable.tar.gz
$ tar xvzf redis-stable.tar.gz
$ cd redis-stable
$ make distclean  # Ubuntu systems only
$ make

现在您已经准备好开始本教程了。

步骤 1:进入 ElastiCache 控制面板

打开 ElastiCache 控制面板,然后:

1.1 — 在右上角,选择要启动 Redis 集群的区域。

1.2 — 点击 Get Started Now(立即开始)。

步骤 2:创建 Redis 集群

2.1 — 选择 Redis 作为集群引擎。

2.2 — 勾选 Cluster Mode enabled(启用集群模式)。

步骤 3:配置 Redis 设置

3.1 — 为 Redis 集群选择一个名称,例如 elc-tutorial。

3.2 — 将 Node type(节点类型)更改为 cache.t2.micro。在本教程中可以使用这种节点类型,但对于生产集群而言,节点的大小应取决于您的工作负载,您应该从 m5 或 r5 实例系列开始。

3.3 — 在 Number of Shards(分片数)中,选择 3。这意味着数据将被划分到三个不同的主节点中。

3.4 — 在 Replicas per Shard(每个分片的副本数)中,选择 2。这意味着每个主节点将有两个副本。如果出现故障,将触发自动故障转移,其中一个副本将接管主节点的角色。

3.5 — 选择子网组。如果您需要有关子网组的更多信息,请参阅本文档

步骤 4:配置高级 Redis 设置

4.1 — 勾选 Multi-AZ with Auto-Failover(具有自动故障转移功能的多可用区)复选框。

每个主节点将在不同的可用区中创建,其每个副本也将分配到不同的可用区。这是提高可靠性的最佳实践。

其他字段保留默认值

步骤 5:配置安全设置

在本例中,我们将不使用加密,但请记住,您可以同时为静态数据和传输中的数据配置加密。

5.1 — 为 Redis 集群选择安全组。

这一点很重要:请确保您选择的安全组允许端口 6379 上的传入 TCP 连接。否则,您将无法连接到 Redis 节点。

步骤 6:将数据导入集群

在本例中,我们不会加载任何 RDB 种子文件,因此可以完全跳过此配置步骤。只需记住,该选项是可用的。

步骤 7:配置备份

对于大多数使用场景,每日备份都很重要,一种较好的做法是启用具有保留期的备份,以便在出现任何问题时有足够的时间采取行动。在本教程中,我们不会使用任何备份。

7.1 — 取消选中 Enable automatic backups(启用自动备份)。

步骤 8:维护设置

8.1 — 指定适合您需求的维护时间窗口。

在这里,您可以考虑应用程序工作负载较低的时间和日期。对于我们目前的需求,我们可以选择 No preference(无首选项)。

步骤 9:检查并创建

快速检查表单中的所有字段后,您可以点击 Create(创建)。

9.1 — 点击 Create(创建)。

Redis 集群将被初始化,一旦其状态变为可用 (Available),您就可以继续执行步骤 10。

如果您偏好使用 Amazon CLI,以下命令将一次性创建 Redis 集群:

如果您偏好使用 Amazon CLI,以下命令将一次性创建 Redis 集群:

$ aws elasticache create-replication-group \
--replication-group-id elc-tutorial \
--replication-group-description "Tutorial example" \
--num-node-groups 3 \
--cache-node-type cache.t2.micro \
--cache-parameter-group default.redis5.0.cluster.on \
--engine redis \
--engine-version 5.0.3 \
--cache-subnet-group-name sn-value \
--security-group-ids sg-value \
--node-group-configuration \
"ReplicaCount=2,PrimaryAvailabilityZone='us-east-1a',ReplicaAvailabilityZones='us-east-1b','us-east-1c',Slots=0-5460" \
"ReplicaCount=2,PrimaryAvailabilityZone='us-east-1b',ReplicaAvailabilityZones='us-east-1c','us-east-1a',Slots=5461-10921" \
"ReplicaCount=2,PrimaryAvailabilityZone='us-east-1c',ReplicaAvailabilityZones='us-east-1a','us-east-1b',Slots=10922-16383"

对于 --security-group-ids 的参数,您必须将 sg-value 替换为要使用的安全组的 ID。

对于 --cache-subnet-group-name 的参数,请将 sn-value 替换为子网组的名称。如果需要创建子网组,请使用以下命令:

$ aws elasticache create-cache-subnet-group \
--cache-subnet-group-name elc-tutorial-subnet \
--cache-subnet-group-description "Tutorial Subnet Group" \
--subnet-ids sn-ids

sn-ids 的值必须是子网 ID 的列表。

如果您偏好使用 Amazon API,以下请求将创建一个 Redis 集群:

https://elasticache.us-east-1.amazonaws.com/
?Action=CreateReplicationGroup 
&CacheParameterGroup=default.redis5.0.cluster.on
&Engine=redis
&EngineVersion=5.0.3
&ReplicationGroupDescription=Tutorial%20example
&ReplicationGroupId=elc-tutorial
&NumNodeGroups=3
&PrimaryClusterId=elc-primary
&ReplicasPerNodeGroup=2
&Version=<version>
&SignatureVersion=4
&SignatureMethod=HmacSHA256
&Timestamp=<timestamp>
&X-Amz-Credential=<credential>

在之前的请求中,您需要提供 Version、Timestamp 和 X-Amz-Credential 的值。

步骤 10:连接到 Redis

获取 Redis 集群的配置端点。

10.1 — 点击箭头以显示 Redis 集群详细信息。

10.2 — 复制配置端点。在这些示例中,每次提到端点时,都应使用配置端点的主机名。

10.4 — 使用 redis-cli 实用程序连接到 Redis 节点。

$ ./src/redis-cli -c -h endpoint

10.5 — 使用 PING 测试连接。

endpoint:6379> PING
	PONG

步骤 11:触发故障转移

现在,您拥有了一个正常运行的 Redis 集群。集群模式的特性之一是,如果某个节点出现故障,集群可以自行恢复。为了验证这一说法,您可以触发手动故障转移,将会发生以下情况:系统将选择一个只读副本来接管主节点的角色,一旦故障转移执行完成,您就可以连接到新的主节点。同时,系统将自动添加一个新副本,这样该集群仍将有一个主节点和两个副本。

使用步骤 10 中的端点,检查节点的角色。

11.1 — 检查端点的角色。

	endpoint:6379> ROLE
	1) "master"
 	...

您需要连接到主节点。如果您未连接到主节点,请尝试使用其他端点。您有三次机会可以找到正确的节点。

找到主节点后:

11.2 — 选择任一节点,点击 Action(操作)并选择 Failover primary(对主集群进行故障转移)。

阅读消息以了解正在发生的情况,然后点击 Continue(继续)。其中一个副本将成为新的主节点,每个主节点的副本数量也将恢复。您可以运行 CLUSTER NODES 命令来验证正在发生的情况。

步骤 12:删除集群

为了完成本实验,您将了解如何在不再需要 Redis 集群时将其删除。

要删除 Redis 集群,请转到 ElastiCache 控制面板并按照以下说明操作:

12.1 — 在左侧栏中点击 Redis。

系统将为您显示所有 Redis 集群的列表。

12.2 — 选择您为本教程创建的 Redis 集群。

12.3 — 点击 Delete(删除)。

12.4 — 系统会询问您是否要创建最终备份。这通常是个好主意,但对于本教程而言没有必要。选择 No(否),然后点击 Delete(删除)。

集群的状态将变为 deleting(正在删除)。