2017-02-15 60 views
1

我有我的本地機器上,它由一個簡單的Redis集羣:如何連接到需要使用ServiceStack.Redis的Redis Sentinel?

  • 主端口的端口3679
  • 從6380
  • 定點端口26379

我使用ServiceStack.Redis連接到目前爲止沒有問題。今天我使用requirepass 42設置爲每個人添加了一個密碼。我可以使用Redis桌面管理器連接到它們全部,並且一切按預期工作。

使用下面的代碼,當我嘗試連接時出現錯誤。刪除密碼按預期工作。

var config = RedisConfiguration.Instance; 

Func<string, string> hostFilter = host => string.IsNullOrEmpty(config.SecurityKey) 
            ? $"{host}?db={config.Database}" 
            : $"{config.SecurityKey}@{host}?db={config.Database}"; 


var sentinelHosts = config.SentinelHosts.Select(hostFilter); 
var sentinel = new RedisSentinel(sentinelHosts, config.ServiceName) 
{ 
    HostFilter = hostFilter, 
    RedisManagerFactory = (master, slaves) => new RedisManagerPool(master) 
}; 

sentinel.OnFailover += manager => Logger?.Warn($"Redis fail over to {sentinel.GetMaster()}"); 

sentinel.Start() 

此代碼拋出RedisException 「沒有Redis的哨兵都可用」「未知命令‘AUTH’」內部異常。

我不清楚我是否正在使用ServiceStack.Redis庫或我的Redis羣集配置不正確。

有人能指出我正確的方向嗎?

回答

1

您可以使用HostFilter指定密碼:

sentinel.HostFilter = host => $"{config.SecurityKey}@{host}?db={config.Database}"; 

但在使用密碼時,需要在這兩個Master and Slave configurations處處配置,即使用:

requirepass password 
masterauth password 

Redis的哨兵也需要配置爲使用相同的密碼,以便它可以控制它正在監視的redis實例,可以在sentinel.conf中配置該實例:

sentinel auth-pass mymaster pasword 

redis-config項目中的windows-password文件夾顯示了受密碼保護的Redis Sentinel配置示例。

+0

這看起來可能是我的問題的根源。我會試一試,看看我能否得到它的工作。 – NotMyself

+0

好的,你讓我朝着正確的方向前進。最後,我不得不爲我的主控和從屬配置添加'requirepass'和'masterauth',然後將'protected-mode'設置爲no來控制我的哨兵。這似乎是訣竅。 [這裏是我的conf文件](https://gist.github.com/NotMyself/49bafe59daf68efd18992ce852ac03cb)這有意義嗎? – NotMyself

+0

@NotMyself從這裏看起來不錯。 – mythz

相關問題