gpt4 book ai didi

python - 通过 AWS PrivateLink 从不同的 AWS 账户访问 AWS ElastiCache(Redis CLUSTER 模式)

转载 作者:行者123 更新时间:2023-12-04 11:43:46 25 4
gpt4 key购买 nike

我有一个业务案例,我想从一个帐户(假设帐户 A)到帐户 B 访问集群 Redis 缓存。
我使用了下面链接中提到的解决方案,并且在大多数情况下,它有效 Base Solution
如果我尝试通过 redis-py 访问集群 Redis,则基本解决方案工作正常,但是如果我尝试将它与 redis-py-cluster 一起使用,则会失败。
我在 Redis 集群只有一个节点的临时环境中测试所有这些,但在生产环境中,它有两个节点,所以 redis-py 方法对我不起作用。
下面是我的示例代码

redis = "3.5.3"
redis-py-cluster = "2.1.3"
==============================


from redis import Redis
from rediscluster import RedisCluster

respCluster = 'error'
respRegular = 'error'

host = "vpce-XXX.us-east-1.vpce.amazonaws.com"
port = "6379"

try:
ru = RedisCluster(startup_nodes=[{"host": host, "port": port}], decode_responses=True, skip_full_coverage_check=True)
respCluster = ru.get('ABC')
except Exception as e:
print(e)

try:
ru = Redis(host=host, port=port, decode_responses=True)
respRegular = ru.get('ABC')
except Exception as e:
print(e)

return {"respCluster": respCluster, "respRegular": respRegular}
上面的代码在账户 A 中完美运行,但在账户 B 中我得到的输出是
{'respCluster': 'error', 'respRegular': '123456789'}
我得到的错误是
rediscluster.exceptions.ClusterError: TTL exhausted
在账户 A 中,我们使用 AWS ECS + EC2 + docker 来运行它,并且
在账户 B 中,我们在 AWS EKS Kubernetes pod 中运行代码。
在这种情况下,我应该怎么做才能使 redis-py-cluster 工作?或者是否有替代python中的 redis-py-cluster来访问多节点Redis集群?
我知道这是一个非常具体的案例,任何帮助表示赞赏。
EDIT 1 :经过进一步研究,似乎 TTL 排气是一个一般错误,在日志中,初始错误是
redis.exceptions.ConnectionError: 
Error 101 connecting to XX.XXX.XX.XXX:6379. Network is unreachable
这里的 XXXX 是账户 A 中 Redus 集群的 IP。
这很奇怪,因为 redis-py 也连接到相同的 IP 和端口,
这个错误不应该存在。

最佳答案

原来问题是由于 redis-py-cluster管理主机和端口。
当新redis-py-cluster创建对象后,它会从 Redis 服务器获取主机 IP 列表(即来自帐户 A 的 Redis 集群主机 IP),然后客户端尝试连接到新主机和端口。
在正常情况下,它作为初始主机和来自响应的 IP 是一回事。(即在创建对象时添加的主机和端口)
在我们的例子中,对象创建主机和端口是从账户 B 的端点服务的 DNS 名称中获取的。
它导致代码尝试从帐户 A 访问实际 IP,而不是从帐户 B 访问 DNS 名称。
该问题已使用 Host port remapping 解决,这里我们将从账户 A 的 Redis 服务器返回的 IP 与账户 B 的端点服务 DNA 名称的 IP 绑定(bind)。

关于python - 通过 AWS PrivateLink 从不同的 AWS 账户访问 AWS ElastiCache(Redis CLUSTER 模式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68224424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com