FreeRedis icon indicating copy to clipboard operation
FreeRedis copied to clipboard

哨兵只能一直读写主

Open ming2882 opened this issue 3 years ago • 12 comments

哨兵只能一直读写主,从的没有请求过,这是正常的吗?然后主就时不时的Unable to read data from the transport connection: 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。.

ming2882 avatar Feb 16 '22 13:02 ming2882

var cli = new RedisClient(redisOption.Connection, redisOption.Sentinels, true); cli.Serialize = obj => JsonConvert.SerializeObject(obj); cli.Deserialize = (json, type) => JsonConvert.DeserializeObject(json, type, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore }); cli.Notice += (s, e) => Console.WriteLine(e.Log); services.AddSingleton(cli);这样配置对吗,单例注入

ming2882 avatar Feb 16 '22 14:02 ming2882

把连接串加上配置 idletimeout=20000

2881099 avatar Feb 17 '22 06:02 2881099

确定哨兵环境配置正确吗

2881099 avatar Feb 17 '22 06:02 2881099

image 我有做6379端口kill时,哨兵就会切换端口

ming2882 avatar Feb 19 '22 06:02 ming2882

image image

ming2882 avatar Feb 19 '22 06:02 ming2882

是用jmeter直接跑业务,做压力测试,jmeter的线程组里的线程数是100,循环1次,用户文件里有100个用户,api请求有64条,共计就是6400并发数

ming2882 avatar Feb 19 '22 06:02 ming2882

是不是同一台服务器做的主从不行啊?

ming2882 avatar Feb 19 '22 07:02 ming2882

测试了下StackExchange.Redis,可以主写分离,就是从的也有请求,说明哨兵模式没有问题

ming2882 avatar Feb 19 '22 09:02 ming2882

sentinel slaves mymaster

返回的所有信息发出来一下,其实可以根据源码分析:

Sentome;Adapter.cs

if (_rw_splitting)
{
    foreach (var slave in sentinelcli.Salves(_connectionString.Host))
    {
        ConnectionStringBuilder slaveConnectionString = localTestHost($"{slave.ip}:{slave.port}", RoleType.Slave);
        if (slaveConnectionString == null) continue;
    }
}

2881099 avatar Feb 23 '22 04:02 2881099

作者重现这个问题了没? 我配置了哨兵模式,但是和这位老兄一样,读写始终操作的是主。。。

johnhorse avatar Jul 14 '22 01:07 johnhorse

作者重现这个问题了没? 我配置了哨兵模式,但是和这位老兄一样,读写始终操作的是主。。。

看上一楼回复

2881099 avatar Jul 14 '22 01:07 2881099

@johnhorse @ming2882 是读取 redis 哨兵配置时转换 bug 导致读写分离功能失效。

v0.5.5 已修复

2881099 avatar Jul 14 '22 02:07 2881099