如何确定Redis(启用集群模式)复制组中的主要端点

时间:2019-10-18 04:06:28

标签: amazon-web-services redis amazon-elasticache

我们有一个集群化的Redis设置(引擎版本5.04),其中三个节点组分别位于它们自己的AZ中,每个组包含三个节点,在传输中和静止时均启用了加密。在堡垒主机上配置了Stunnel,这使我可以运行bash脚本以在需要时(在升级到我们的应用程序期间)刷新每个主副本。

通过控制台应用了最新的Redis补丁后,由于自动故障转移,每个节点组中的主要端点都已更改,我正在寻找确定新的主要端点的最佳方法,以便可以相应地更新我的bash脚本。

documentation指出运行aws elasticache describe-replication-groups --replication-group-id my-replication-group应该指示节点组成员的CurrentRole,例如

"NodeGroupMembers": [
   {
      "CurrentRole": "primary", 
      "PreferredAvailabilityZone": "us-west-2a", 
      "CacheNodeId": "0001", 
      "ReadEndpoint": {
         "Port": 6379, 
         "Address": "myreplgroup-001.1abc4d.0001.usw2.cache.amazonaws.com"
      }, 
      "CacheClusterId": "myreplgroup-001"
   }, 
   {
      "CurrentRole": "replica", 
      "PreferredAvailabilityZone": "us-west-2b", 
      "CacheNodeId": "0001", 
      "ReadEndpoint": {
         "Port": 6379, 
         "Address": "myreplgroup-002.1abc4d.0001.usw2.cache.amazonaws.com"
      }, 
      "CacheClusterId": "myreplgroup-002"
   }, 
   {
      ...
   }
]

我对此命令的响应根本不包含CurrentRole:

"NodeGroupMembers": [
    {
        "PreferredAvailabilityZone": "ap-southeast-2c",
        "CacheNodeId": "0001",
        "CacheClusterId": "my-replication-group-0001-001"
    },
    {
        "PreferredAvailabilityZone": "ap-southeast-2b",
        "CacheNodeId": "0001",
        "CacheClusterId": "my-replication-group-0001-002"
    },
    {
        "PreferredAvailabilityZone": "ap-southeast-2a",
        "CacheNodeId": "0001",
        "CacheClusterId": "my-replication-group-0001-003"
    }
]

是否存在可用于确定主要端点的替代aws cli命令?通过控制台对主节点进行故障转移很容易,但是由于我无法通过控制台/ cli识别哪个节点是当前主节点,这意味着猜测在刷新脚本中需要定位哪些节点。

1 个答案:

答案 0 :(得分:0)

我在 Elasticache 的文档中找到了 this paragraph

<块引用>

Redis(启用集群模式)集群带有副本,因为它们有多个分片(API/CLI:节点组),这意味着它们也有多个主节点,与 Redis(禁用集群模式)集群具有不同的端点结构。 Redis(已启用集群模式)有一个配置端点,它“知道”集群中的所有主端点和节点端点。您的应用程序连接到配置端点。 每当您的应用程序写入或读取集群的配置端点时,Redis 都会在幕后确定密钥属于哪个分片以及要使用该分片中的哪个端点。这对您的应用程序完全透明。

我猜您给出的示例输出是针对禁用了集群模式的复制组,原因是上面同一篇文章中的这个片段:

<块引用>

Redis (cluster mode disabled) 具有副本的集群具有三种类型的端点;主要端点、读取器端点和节点端点。

我知道这可能是一个有争议的问题(您 2 年前问过这个问题),但是如果您需要刷新集群中的主节点(启用集群模式),只需使用配置端点,更改就会传播到每个节点。