我们有一个集群化的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识别哪个节点是当前主节点,这意味着猜测在刷新脚本中需要定位哪些节点。
答案 0 :(得分:0)
我在 Elasticache 的文档中找到了 this paragraph:
<块引用>Redis(启用集群模式)集群带有副本,因为它们有多个分片(API/CLI:节点组),这意味着它们也有多个主节点,与 Redis(禁用集群模式)集群具有不同的端点结构。 Redis(已启用集群模式)有一个配置端点,它“知道”集群中的所有主端点和节点端点。您的应用程序连接到配置端点。 每当您的应用程序写入或读取集群的配置端点时,Redis 都会在幕后确定密钥属于哪个分片以及要使用该分片中的哪个端点。这对您的应用程序完全透明。
我猜您给出的示例输出是针对禁用了集群模式的复制组,原因是上面同一篇文章中的这个片段:
<块引用>Redis (cluster mode disabled) 具有副本的集群具有三种类型的端点;主要端点、读取器端点和节点端点。
我知道这可能是一个有争议的问题(您 2 年前问过这个问题),但是如果您需要刷新集群中的主节点(启用集群模式),只需使用配置端点,更改就会传播到每个节点。