我一直在尝试针对 helm chart 中安装在 kubernetes 中的 redis 集群配置分布式 RedLock stable/redis-ha
。理想情况下,我希望集群具有多个副本(主/辅助复制)。
我正在遵循使用 StackExchangeRedis 和 Redlock.Net 进行设置的标准示例
ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost:6379");
var multiplexers = new List<RedLockMultiplexer>
{
redis
};
var redlockFactory = RedLockFactory.Create(multiplexers);
var resource = "the-thing-we-are-locking-on";
var expiry = TimeSpan.FromSeconds(30);
using (var redLock = await redlockFactory.CreateLockAsync(resource, expiry))
{
//This is almost always false and the lock status is NoQuorum
if (redLock.IsAcquired)
{
}
}
我看到的行为是锁通常永远不会被获取,即使在单个用户环境中也是如此。状态为 NoQuorum,表示 RedLock .Net 无法获得多数,但在我当前的测试集群中,我只有一个副本。我已经能够让它工作几次,但它通常是片状的并且随机停止工作。
我已经找到关于锁定集群的这一部分https://github.com/samcook/RedLock.net
基本上我的理解是有基本的支持,但是你必须直接连接到集群中的所有副本。
以前有没有人成功配置过针对集群的分布式锁定?