.net - Redis Cache 如何与 High Availability 和 Sentinel 协同工作?

标签 .net caching redis servicestack sentinel

我正在尝试设置一个高可用性设置,如果托管我的主要 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/

相关文章:

c# - 在 .NET web.config 文件中管理测试/产品连接字符串的正确方法

python - 从 redis pub/sub 中丢失的连接中恢复

c# - 无法连接到 Redis 服务器;要创建断开连接的多路复用器,请禁用 AbortOnConnectFail。 PING 上的套接字失败

c# - 我可以使用 LINQ GroupBy 更干净地执行此操作吗?

c# - 在 C# 应用程序中更改 "(default)"ResX 语言

c# - ASP.NET 持久缓存 ("Lazy loading"风格?)

java - 可变可见度

ruby-on-rails - 您将如何使模型或 Resque worker 中的片段缓存过期?

redis - 如何在redis中一次从多个键中获取多个字段的值?

c# - 在 Windows 窗体文本字段上指定数据类型