- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我理解 redis sentinel 是一种在多个 redis 实例之间配置 HA(高可用性)的方法。如我所见,在任何给定时间都有一个 redis 实例主动服务于客户端请求。还有两台额外的服务器处于待命状态(等待故障发生,因此其中一台可以再次运行)。
我已经查找了 sentinel 的 Redis 文档和 clustering ,请有经验的人解释一下。
更新
好的。在我的真实部署场景中,我有两台专用于 redis 的服务器。我有另一台服务器,我的 Jboss 服务器正在运行。在 Jboss 中运行的应用程序配置为连接到 redis 主服务器(M)。
故障转移场景
理想情况下,我认为当 Master 缓存服务器发生故障(Redis 进程宕机或机器故障)时,Jboss 中的应用程序需要连接到 Slave 缓存服务器。我将如何配置 redis 服务器来实现这一目标?
+--------+ +--------+
| Master |---------| Slave |
| | | |
+--------+ +--------+
Configuration: quorum = 1
最佳答案
首先,让我们谈谈哨兵。
Sentinel 管理故障转移,它不会为 HA 配置 Redis。这是一个重要的区别。其次,您发布的图表实际上是一个错误的设置 - 您不想在与它管理的 Redis 节点相同的节点上运行 Sentinel。当您失去该主机时,您将失去两者。
关于“是否浪费资源?”这取决于您的用例。在那个设置中你不需要三个 Redis 节点,你只需要两个。三增加了你的冗余,但不是必需的。如果您需要增加冗余,那么这不会浪费资源。如果您不需要冗余,那么您只需运行一个 Redis 实例并称之为好 - 因为运行更多实例会“浪费”。
运行两个从服务器的另一个原因是拆分读取。同样,如果您需要它,那就不会浪费。
关于“有没有更好的方法充分利用现有资源?”我们无法回答这个问题,因为它太依赖于您的特定场景和代码。也就是说,如果要存储的数据量“很小”并且命令率不是非常高,那么请记住您不需要为 Redis 提供专用主机。
现在是“Redis 集群是 Redis sentinel 的替代品吗?”。这实际上完全取决于您的用例。 Redis Cluster 不是 HA 解决方案——它是一个多写入器/大于内存的解决方案。如果您的目标只是 HA,那么它可能不适合您。 Redis 集群具有局限性,尤其是在多键操作方面,因此它不一定是简单的“仅使用集群”操作。
如果您认为让三台主机运行 Redis(和三台运行哨兵)是一种浪费,您可能会认为 Cluster 需要更多资源,因此会浪费更多。
您提出的问题可能过于宽泛且基于观点,因此无法像书面那样存在。如果您有正在解决的具体案例/问题,请进行更新,以便我们提供具体的帮助和信息。
具体更新:
为了在您的场景中进行适当的故障转移管理,我会使用 3 个哨兵,一个在您的 JBoss 服务器上运行。如果你有 3 个 JBoss 节点,那么每个节点一个。我会在不同的节点上有一个 Redis pod(master+slave),并让 sentinel 管理故障转移。
从那里开始,连接 JBoss/Jedis 以使用 Sentinel 进行信息和连接管理是一个问题。由于我不使用这些,所以快速搜索发现 Jedis 支持它,您只需要正确配置它。我发现的一些示例位于 Looking for an example of Jedis with Sentinel。和 https://github.com/xetorthio/jedis/issues/725其中谈到 JedisSentinelPool
是使用池的路径。
当 Sentinel 执行故障转移时,客户端将断开连接,Jedis 将(应该?)通过询问 Sentinels 当前的主人是谁来处理重新连接。
关于Redis哨兵与集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31143072/
我有一个关于 Redis Pubsub 的练习,如下所示: 如果发布者发布消息但订阅者没有收到服务器崩溃。订阅者如何在重启服务器时收到该消息? 请帮帮我,谢谢! 最佳答案 在这种情况下,消息将永远消失
我们正在使用 Service Stack 的 RedisClient 的 BlockingDequeue 来保存一些数据,直到它可以被处理。调用代码看起来像 using (var client =
我有一个 Redis 服务器和多个 Redis 客户端。每个 Redis 客户端都是一个 WebSocket+HTTP 服务器,其中包括管理 WebSocket 连接。这些 WebSocket+HTT
我有多个 Redis 实例。我使用不同的端口创建了一个集群。现在我想将数据从预先存在的 redis 实例传输到集群。我知道如何将数据从一个实例传输到集群,但是当实例多于一个时,我无法做到这一点。 最佳
配置:三个redis集群分区,跨三组一主一从。当 Master 宕机时,Lettuce 会立即检测到中断并开始重试。但是,Lettuce 没有检测到关联的 slave 已经将自己提升为 master
我想根据从指定集合中检索这些键来删除 Redis 键(及其数据集),例如: HMSET id:1 password 123 category milk HMSET id:2 password 456
我正在编写一个机器人(其中包含要禁用的命令列表),用于监视 Redis。它通过执行禁用命令,例如 (rename-command ZADD "")当我重新启动我的机器人时,如果要禁用的命令列表发生变化
我的任务是为大量听众使用发布/订阅。这是来自 docs 的订阅的简化示例: r = redis.StrictRedis(...) p = r.pubsub() p.subscribe('my-firs
我一直在阅读有关使用 Redis 哨兵进行故障转移的内容。我打算有1个master+1个slave,如果master宕机超过1分钟,就把slave变成master。我知道这在 Sentinel 中是
与仅使用常规 Redis 和创建分片相比,使用 Redis 集群有哪些优势? 在我看来,Redis Cluster 更注重数据安全(让主从架构解决故障)。 最佳答案 我认为当您需要在不丢失任何数据的情
由于 Redis 以被动和主动方式使 key 过期, 有没有办法得到一个 key ,即使它的过期时间已过 (但 在 Redis 中仍然存在 )? 最佳答案 DEBUG OBJECT myKey 将返回
我想用redis lua来实现monitor命令,而不是redis-cli monitor。但我不知道怎么办。 redis.call('monitor') 不起作用。 最佳答案 您不能从 Redis
我读过 https://github.com/redisson/redisson 我发现有几个 Redis 复制设置(包括对 AWS ElastiCache 和 Azure Redis 缓存的支持)
Microsoft.AspNet.SignalR.Redis 和 StackExchange.Redis.Extensions.Core 在同一个项目中使用。前者需要StackExchange.Red
1. 认识 Redis Redis(Remote Dictionary Server)远程词典服务器,是一个基于内存的键值对型 NoSQL 数据库。 特征: 键值(key-value)型,value
1. Redis 数据结构介绍 Redis 是一个 key-value 的数据库,key 一般是 String 类型,但 value 类型多种多样,下面就举了几个例子: value 类型 示例 Str
1. 什么是缓存 缓存(Cache) 就是数据交换的缓冲区,是存贮数据的临时地方,一般读写性能较高。 缓存的作用: 降低后端负载 提高读写效率,降低响应时间 缓存的成本: 数据一致性成本 代码维护成本
我有一份记录 list 。对于我的每条记录,我都需要进行一些繁重的计算,因为我要在Redis中创建反向索引。为了达到到达记录,需要在管道中执行多个redis命令(sadd为100 s + set为1
我有一个三节点Redis和3节点哨兵,一切正常,所有主服务器和从属服务器都经过验证,并且哨兵配置文件已与所有Redis和哨兵节点一起更新,但是问题是当Redis主服务器关闭并且哨兵希望选举失败者时再次
我正在尝试计算Redis中存储的消息之间的响应时间。但是我不知道该怎么做。 首先,我必须像这样存储chat_messages的时间流 ZADD conversation:CONVERSATION_ID
我是一名优秀的程序员,十分优秀!