【问题标题】:Redlock with redis-ha cluster使用 redis-ha 集群进行 Redlock
【发布时间】:2020-10-17 12:35:06
【问题描述】:

我一直在尝试针对 helm chart stable/redis-ha 中安装在 kubernetes 中的 redis 集群配置分布式 RedLock。理想情况下,我希望集群有多个副本(主/辅助复制)。

我正在遵循使用 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的部分

基本上我的理解是有基本的支持,但是你必须直接连接到集群中的所有副本。

之前有没有人成功配置过针对集群的分布式锁定?

【问题讨论】:

  • 你能做到吗?

标签: c# redis stackexchange.redis redis-cluster redlock.net


【解决方案1】:

我曾与 Polly 团队合作开发他们的重复请求折叠器 (https://github.com/Polly-Contrib/Polly.Contrib.DuplicateRequestCollapser)。我还使用 redis (https://github.com/Polly-Contrib/Polly.Contrib.DuplicateRequestCollapser.RedisDistributedLock) 做了一个分布式锁版本。

我对redis集群不太熟悉,但是如果他们涉及到某种分片,你需要在继续操作之前获取集群每个分片上的分布式锁。

这两个都应该有 nuget 包。让我知道这是否有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多