Ant*_*n M 6 stackexchange.redis kubernetes asp.net-core
我正在学习 StackExchange.Redis 和 Kubernetes,所以我制作了一个简单的 .net 核心应用程序,它从部署在 kubernetes 上的 Redis master+2slaves 读取键/值。(所以,一切,Redis 和我的应用程序,都在容器内运行)
要连接到 redis,我使用文档中建议的语法:
ConnectionMultiplexer.Connect("server1:6379,server2:6379,server3:6379");
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用 redis-cli MONITOR 监视 3 个容器,则请求总是从 master 处理,2 个 slave 什么都不做,因此没有负载平衡。
我还尝试连接到暴露 3 个 Redis 容器端点的 Kubernetes 负载均衡器服务,结果是当我启动 .net 应用程序时,请求由 3 个 Redis 节点之一随机处理,但随后始终处于相同状态节点。我必须重新启动 .net 应用程序,它将查询另一个节点,但后续查询始终在该节点上进行。
使用 StackExchange.Redis 和主/从 Redis 设置以负载平衡的方式读取键/值的正确方法是什么?
谢谢
SE.RedisCommandFlags在每个命令上都有一个可选的参数。这里有一些有用且相关的选项:
DemandMasterPreferMasterDemandSlavePreferSlave默认行为是PreferMaster; 写操作将其撞到DemandMaster,并且有极少数命令主动选择副本(键空间迭代等)。
所以:如果您没有指定CommandFlags,那么现在您可能正在使用默认值:PreferMaster。假设 master 存在并且可以访问,那么:它将使用 master。并且只能有一个 master,因此:它将使用一台服务器。
今天的一个便宜的选择是在您的大容量读取操作中添加PreferSlave一个CommandFlags选项。如果可以解决,这会将工作推送到副本 - 或者如果找不到副本:主。由于可以有多个副本,它应用了一个基本的基于轮换的负载平衡方案,您应该开始看到多个副本上的负载。
如果您想将负载分散到包括主节点和副本在内的所有节点上……那么我需要为此添加新代码。因此,如果您需要,请将其作为问题记录在 github 存储库上。
根据文档,它应该自动检测主/从。可能是StackExchange.Redis检测到您的所有节点都是主节点,因此只需使用自己的决胜规则选择一个节点。
如果 StackExchange.Redis 发送了一些无效命令,我还会检查您的 redis-pod 上的请求日志,也许您没有正确的权限来检测主/从设备。
也许您还启用了Sentinel,但 StackExchange不支持 Sentinel
如果您发现某些功能无法正常工作,您可以在Github上提出问题
最后,您还可以尝试twemproxy。
| 归档时间: |
|
| 查看次数: |
2705 次 |
| 最近记录: |