我正在尝试设置一个高可用性设置,如果托管我的主要 Redis 缓存的服务器出现故障,它将选择一个不同的主服务器,但在阅读所有关于 Sentinels 的文档后我有点困惑。
例如,如果我有一个 url,我将我的 Redis 客户端指向:http://my.RedisServer.com:6379 ,哨兵如何帮助故障转移到另一台服务器说在 http://mybackup.RedisServer.com:6379 ?
我正在使用 .Net 的 ServiceStack.Redis 客户端并将我的 Redis 安装在 Windows 服务器上,但我在想为了获得高可用性我必须切换到 Linux 并使用 Twemproxy 设置或其他东西?我猜我不能只存储 http://my.RedisServer.com:6379在我的 web.config 中并让它以某种方式正常工作?我想某处必须有一个映射到 2+ IP 的 DNS,并且像任何 H.A. 一样进行负载平衡。网络应用程序...
我想我看到了一些关于 PooledRedisClientManager 的信息,这可能是我的答案?
感谢您的澄清。
最佳答案
我只是在 Windows 上设置了 Redis,一主一从,每台服务器一个哨兵,服务器在 ms 网络负载均衡器的集群环境中。
基本上我所做的是:
服务器A:(本地IP:1.10.10.1,集群ip:1.10.11.1)
- 以 Master 身份运行 Redis
- 运行 redis 作为监视服务器 A 的哨兵
服务器B:(本地IP:1.10.10.2,集群ip:1.10.11.1)
- 将 Redis 作为服务器 A 的从属运行
- 运行 redis 作为监视服务器 B 的哨兵
现在我遇到的第一个问题是,当我连接到集群地址时,我不知道哪个服务器正在响应,我需要连接到主服务器,因为从服务器是只读的(仅用于故障转移)所以当然HAProxy 和 Twemproxy 就是为此目的,但没有针对 windows 的实现,所以我决定为此目的创建一个代理:
https://bitbucket.org/israelito3000/redis
所以基本上我在两台服务器上都安装了 redis-proxy,现在当我从我的客户端库连接时,代理总是将包传输到主服务器,所以它就像一个隧道。当 master redis 失败时,sentinel 会自动将 slave 的角色更改为 master,proxy 会将流量重定向到新的 master,所以基本上从客户端我不需要做任何事情。
重要的是我不能直接访问服务器(只能通过集群 ip)
关于.net - Redis Cache 如何与 High Availability 和 Sentinel 协同工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25984776/