Redis Cache如何与High Availability和Sentinel配合使用?

时间:2014-09-22 23:49:38

标签: .net caching redis servicestack sentinel

我正在尝试设置高可用性设置,如果服务器出现故障,托管我的主Redis缓存,它将选择不同的主服务器,但在阅读有关Sentinels的所有文档后我有点困惑。

例如,如果我有一个我将Redis客户端指向http://my.RedisServer.com:6379的网址,那么帮助故障转移到另一台服务器的标记如何在http://mybackup.RedisServer.com:6379说?

我正在使用.Net的ServiceStack.Redis客户端并在Windows服务器上安装我的Redis,但我想为了获得高可用性我必须切换到Linux并使用Twemproxy设置或其他东西?我猜我不能将http://my.RedisServer.com:6379存储在我的web.config中并让它以某种方式正常工作?我想在某个地方必须有一个映射到2+ IP的DNS,并像任何H.A.一样负载均衡。网络应用......

我想我看到了一些可能是我的答案的PooledRedisClientManager?

感谢您的澄清。

2 个答案:

答案 0 :(得分:1)

我只是在Windows上设置Redis,一个主设备和一个从设备,每个服务器一个标记,服务器在ms网络负载平衡器的集群环境中。

基本上我所做的是:

服务器A :(本地IP:1.10.10.1,群集IP:1.10.11.1)

  • 将Redis作为主人运行
  • 将redis作为Sentinel观看服务器A
  • 运行

服务器B :(本地IP:1.10.10.2,群集IP:1.10.11.1)

  • 将Redis作为服务器A的从属服务器
  • 将redis作为Sentinel观看服务器B
  • 运行

现在我遇到的第一个问题是当我连接到群集地址时,我不知道哪个服务器正在响应,我需要连接到主服务器,因为从服务器是只读的(仅用于故障转移)所以当然HAProxy和Twemproxy就是这样,但是没有Windows的实现,所以我决定为此目的创建一个代理:

https://bitbucket.org/israelito3000/redis

所以基本上我在两台服务器上安装了redis-proxy,现在当我从客户端库连接时,代理总是将包传输给主服务器,所以它就像一个隧道。当主redis失败时,sentinel会自动将slave的角色更改为master,代理会将流量重定向到新的master,所以基本上从客户端我不需要做任何事情。

重要的是要说我无法直接访问服务器(只能通过集群ip)

答案 1 :(得分:0)

我相信我找到了答案。

How to tell a Client where the new Redis master is using Sentinel

显然,您只需订阅并收听Sentinels的活动。有道理......我只是觉得有一种更精简的方式。

我读过一些关于Linux的Twemproxy作为代理,可能会为你做这件事吗?但我正在使用redis for Windows并试图找到Windows选项。如果这是批准的方式,我们可能会转移到Linux。