redis ha集群红锁

but5z9lq  于 2021-06-10  发布在  Redis
关注(0)|答案(1)|浏览(556)

我一直在尝试针对安装在kubernetes中的redis集群配置一个分布式红锁 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
基本上我的理解是有基本的支持,但是您必须直接连接到集群中的所有副本。
以前是否有人成功地针对集群配置了分布式锁定?

g0czyy6m

g0czyy6m1#

我和波利的人一起做过他们的复制请求折叠器(https://github.com/polly-contrib/polly.contrib.duplicaterequestcollapser). 我还使用redis制作了一个分布式锁版本(https://github.com/polly-contrib/polly.contrib.duplicaterequestcollapser.redisdistributedlock).
我对redis集群不太熟悉,但是如果它们涉及到某种切分,那么在继续操作之前,您需要获取集群中每个切分的分布式锁。
这两个都应该有nuget包。让我知道这是否有帮助。

相关问题