我为 HA redis 集群(2 个副本、1 个主节点、3 个哨兵)设置了本地 docker 环境。只有哨兵暴露端口(10021、10022、10023)。
我使用的是 stackexchange.redis C# 客户端 v.2.1.58,并尝试做一些基本操作。
这是我的示例代码。
ConfigurationOptions configuration = new ConfigurationOptions
{
/// sentinels
EndPoints =
{
{ "localhost", 10021 },
{ "localhost", 10022 },
{ "localhost", 10023 }
},
CommandMap = CommandMap.Sentinel,
ServiceName = "redismaster",
Ssl = false,
};
ConnectionMultiplexer connection = ConnectionMultiplexer.SentinelConnect(configuration, Console.Out);
IDatabase database = connection.GetDatabase();
尝试设置操作时
database.StringSetAsync("key", "value");
我要了
<块引用>此操作已在命令映射中禁用且无法使用:SET
我认为操作是针对哨兵节点完成的,但我不确定。
对此有帮助吗?
答案 0 :(得分:2)
由于 StackExchange Redis 的最新变化,这将不起作用,您需要使用类似服务名称的 Sentiels 直接连接
using(var connection2= ConnectionMultiplexer.Connect("localhost:10021,localhost:10022,localhost:10023,serviceName=redismaster,AllowAdmin=true"))
{
IDatabase database2 = connection.GetDatabase();
database2.StringSet("test-key", "value");
database.StringGet("test-key");
}
当您在本地机器上运行应用程序时,即使这也会失败,但如果您在与哨兵/Redis 相同的网络中的 docker 实例中运行它,这应该可以工作。简而言之,您还需要公开主 Redis 实例的端口,因为另一个从站也可以成为主站,因此您需要允许所有 Redis 实例(主站、从站和哨兵)的入站流量规则< /p>