2013-07-02 60 views
6

根据git提交消息,ServiceStack最近添加了故障转移支持。我最初认为这意味着我可以将一个Redis实例拉下来,而我的池客户端管理器将优雅地处理故障转移,并尝试与其中一个备用Redis实例连接。不幸的是,我的代码出错了,并且说它无法连接到最初的Redis实例。ServiceStack PooledRedisClientManager故障转移如何工作?

我目前正在Windows上运行Redis 2.6.12的实例,主端口为6379,从端为6380,如果主站发生故障,设置标记以自动将从站升级为主站。我目前实例我的客户经理是这样的:

​​

,其中第一阵列读写主机(主),与第二阵列是只读的主机(奴隶)。

当我终止在6379端口的主人,哨兵促使奴隶成为主人。现在,当我尝试运行我的C#代码时,不是故障转移到端口6380,而是简单地中断并返回错误“无法连接到redis实例在localhost:6379”。

有没有办法解决这个问题,或者故障切换是不是以我想要的方式工作?

+1

您是否找到了方法@Vliu – jaxxbo

+0

不,从我所做的大多数研究中,大多数人不依赖代码来处理故障转移。他们在redis数据库上使用了一个(linux)代理层,比如HAProxy @jaxxbo – Vliu

回答

4

PooledRedisClientManager.FailoverTo允许您重置哪些是读/写主机,只读主机,并重新启动工厂。这允许快速转换而无需重新创建客户端。

+1

就像try {// redis operation} catch {PooledRedisClientManager.FailoverTo(从端口作为读写端口)}? – Vliu

+1

这将是一种方法,是的。我设置了一个特殊服务来处理来自Redis Sentinel的传入请求,这样,如果它检测到一个失败的节点,它会协商并提升合适的从站,然后通知我的web服务新的地址和端口。 – TheDruidsKeeper

+0

嗨@TheDruidsKeeper,你会详细介绍一下你的方法和一些样本,例如,你的意思是什么服务,以及它如何检测失败的节点,非常感谢。 – wliao