3

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

例如,如果我有一个 URL,我将我的 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,并且像任何 HA Web 应用程序一样进行负载平衡......

我想我看到了有关 PooledRedisClientManager 的一些信息,这可能是我的答案?

感谢您的澄清。

4

2 回答 2

1

我只是在 Windows 上设置 Redis,一主一从,每台服务器一个哨兵,服务器位于 ms 网络负载均衡器的集群环境中。

所以基本上我所做的是:

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

  • 以 Master 身份运行 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,现在当我从我的客户端库连接时,代理总是将包传输到主服务器,所以它就像一个隧道。当 master redis 失败时,sentinel 会自动将 slave 的角色更改为 master,并且代理会将流量重定向到新的 master,所以基本上从客户端我不需要做任何事情。

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

于 2015-05-22T02:47:03.510 回答
0

我相信我找到了答案。

如何告诉客户端新的 Redis 主服务器在哪里使用 Sentinel

显然你只需要订阅和收听来自哨兵的事件。有道理..我只是想有一种更精简的方式。

我读了一些关于 Linux 的 Twemproxy 的东西,它充当代理,可能为你做这件事?但我在 Windows 的 redis 上,并试图找到一个 Windows 选项。如果这是经过批准的方式,我们可能会迁移到 Linux。

于 2014-09-23T00:01:55.757 回答