问题标签 [redis-sentinel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3424 浏览

spring - 使用 RedisSentinelConfiguration 不会故障转移到下一个可用的 sentinel/master

我正在尝试使用 redis-sentinel 为我的 redis 实例设置 HA。我假设我的 java 应用程序必须使用 RedisSentinelConfiguration 来创建连接工厂。因此我设置了如下的连接工厂

用于创建 RedisSentinelConfiguration 的 IP 和端口号是我已经启动的哨兵实例。我已经为每个主人设立了一个哨兵。我有 3 个大师在运行,3 个哨兵也在运行。只要映射到哨兵“mymaster”的主节点正在运行,该应用程序似乎运行良好。一旦我关闭了那个 redis 节点,应用程序就无法获得连接。我看到连接被拒绝错误。在调试时,我可以看到它正在尝试使用它在第一次尝试中使用的单个 Sentinel 配置来创建连接。

这是我的哨兵配置的样子。

有人可以让我知道我做错了什么吗?我正在使用 spring-data-redis 1.5.0.RELEASE 和 Jedis-2.7.0

谢谢

0 投票
2 回答
2802 浏览

redis - sentinels do not recognize master nor themselves

I have set up a master - slave - slave relationship among my 3 instances, at 127.0.0.1:6379, 6380, 6381.

Instances and sentinels all run on same IP, different ports. and I have set up 3 sentinels(127.0.0.1:26379,26380,26381) with following config:

port 26381

to explain my setup further, I am just trying to test on my local machine if sentinel can respond to manual shutdown of the master. Looking at the sentinel master mymaster, the result is that sentinel does not recognize the master nor the other sentinels:

I am not able to change from the config file this sentinel behavior. Is there any way sentinels can talk to each other, and recognize my master?

0 投票
2 回答
1329 浏览

redis - Redis Sentinel 手动故障转移命令超时

Redis Sentinel 手动故障转移命令超时

我有一个 Redis 主机、一个从机和一个 Sentinel 监控它们。一切似乎都在正常工作,包括当主人被杀死时的故障转移。但是当我发出 SENTINEL FAILVER 命令时,Sentinel 会卡在 +failover-state-wait-promotion 状态几分钟。似乎奴隶没有得到提升命令。这没有任何意义,因为从 Sentinel 主机到任一 Redis 主机的网络通信似乎没有任何问题。我在 Docker 容器中运行所有 3 个过程,但我不确定这会如何导致问题。我可以从 Sentinel 主机(即从 Docker 容器内部)运行 redis-cli,并且可以远程执行 slaveof 命令。我还可以监控两个 Redis 实例并查看 SENTINEL ping 和信息请求。我查看了 master 和 slave 的日志,没有发现任何异常。看着这篇文章似乎没有任何理由让 Sentinel 认为 Redis 实例无效。

我对 Sentinel 相当有经验,但对 Docker 却很陌生。不确定如何继续确定问题所在。有任何想法吗?

哨兵日志

[8] 01 Jul 01:36:57.317 # Sentinel runid 是 c337f6f0dfa1d41357338591cd0181c07cb026d0
[8] 01 Jul 01:38:13.135 # +monitor master redis-holt-overflow 10.19.8.2 6380 quorum 1
[8] 13.11 Jul 013:88 # +set master redis-holt-overflow 10.19.8.2 6380 down-after-milliseconds 3100
[8] 01 Jul 01:38:13.199 * +slave slave 10.19.8.3:6381 10.19.8.3 6381 @ redis-holt-overflow 10.19。 8.2 6380
[8] 01 Jul 01:38:42.288 # 执行用户请求 'redis-holt-overflow' 的故障转移
[8] 7 月 1 日 01:38:42.288 # +new-epoch 1
[8] 7 月 1 日 01:38:42.288 # +try-failover master redis-holt-overflow 10.19.8.2 6380
[8] 7 月 1 日 01:38: 42.352 # +vote-for-leader c337f6f0dfa1d41357338591cd0181c07cb026d0 1
[8] 01 Jul 01:38:42.352 # +elected-leader master redis-holt-overflow 10.19.8.2 6380
[8] 01 Jul 01:38:42.5+failover-state -select-slave master redis-holt-overflow 10.19.8.2 6380
[8] 7 月 1 日 01:38:42.404 # +selected-slave 从站 10.19.8.3:6381 10.19.8.3 6381 @ redis-holt-overflow 10.19.8.2 6380
[8] 7 月 1 日 01:38:42.404 * +故障转移状态-send-slaveof-noone slave 10.19.8.3:6381 10.19.8.3 6381 @ redis-holt-overflow 10.19.8.2 6380
[8] 01 Jul 01:38:42.488 * +failover-state-wait-promotion slave 10.19.8.3: 6381 10.19.8.3 6381 @ redis-holt-overflow 10.19.8.2 6380
[8] 01 Jul 01:41:42.565 #-failover-abort-slave-timeout master redis-holt-overflow 10.19.8.2 6380

Redis 主日志

[17] 01 Jul 01:13:58.251 # 服务器已启动,Redis 版本 2.8.21
[17] 01 Jul 01:13:58.252 # 警告 overcommit_memory 设置为 0!在内存不足的情况下,后台保存可能会失败。要解决此问题,请将“vm.overcommit_memory = 1”添加到 /etc/sysctl.conf,然后重新启动或运行命令“sysctl vm.overcommit_memory=1”以使其生效。
[17] 01 Jul 01:13:58.252 # 警告你的内核中启用了透明大页面 (THP) 支持。这将在 Redis 中产生延迟和内存使用问题。要解决此问题,请以 root 身份运行命令“echo never > /sys/kernel/mm/transparent_hugepage/enabled”,并将其添加到您的 /etc/rc.local 以便在重新启动后保留设置。禁用 THP 后必须重新启动 Redis。
[17] 01 Jul 01:13:58.252 # WARNING: TCP backlog 设置无法强制执行 511,因为 /proc/sys/net/core/somaxconn 设置为较低的值 128。
[17] 7 月 1 日 01:13:58.252 * 从磁盘加载的数据库:0.000 秒
[17] 7 月 1 日 01:13:58.252 * 服务器现在已准备好接受端口 6380 上的连接
[17] 7 月 1 日 01:34:45.796 * 从站 10.196.88.30:6381 请求同步
[17] 7 月 1 日 01:34:45.796 * 从站 10.196.88.30:6381 请求完全重新同步
[17] 7 月 1 日 01:34:45.796 * 启动 BGSAVE for SYNC 与目标:磁盘
[17] 7 月 1 日 01:34:45.797 * 由 pid 20 开始后台保存
[20] 7 月 1 日 01:34:45.798 * DB 保存在磁盘上
[20] 7 月 1 日 01:34:45.799 * RDB:写时复制使用的内存为 0 MB
[17] 7 月 1 日 01:34:45.808 * 后台保存成功终止
[17] 7 月 1 日 01:34:45.808 * 与从属设备 10.196.88.30:6381 同步成功
[17] 01 Jul 01:38:42.343 # 与从站 10.196.88.30:6381 的连接丢失。
[17] 7 月 1 日 01:38:43.275 * 从站 10.196.88.30:6381 请求同步
[17] 7 月 1 日 01:38:43.275 * 从站 10.196.88.30:6381 请求完全重新同步
[17] 7 月 1 日 01:38:43.275 * 启动 BGSAVE for SYNC 与目标:磁盘
[17] 7 月 1 日 01:38:43.275 * pid 21 开始后台保存
[21] 7 月 1 日 01:38:43.277 * 数据库保存在磁盘上
[21] 7 月 1 日 01:38:43.277 * RDB:写入时复制使用的 0 MB 内存
[17] 7 月 1 日 01:38:43.368 * 后台保存成功终止
[17] 01 Jul 01:38:43.368 * 与从站 10.196.88.30:6381 同步成功

Redis 从属日志

[14] 01 Jul 01:15:51.435 # 服务器已启动,Redis 版本 2.8.21
[14] 01 Jul 01:15:51.435 # 警告 overcommit_memory 设置为 0!在内存不足的情况下,后台保存可能会失败。要解决此问题,请将“vm.overcommit_memory = 1”添加到 /etc/sysctl.conf,然后重新启动或运行命令“sysctl vm.overcommit_memory=1”以使其生效。
[14] 01 Jul 01:15:51.435 # 警告您的内核中启用了透明大页面 (THP) 支持。这将在 Redis 中产生延迟和内存使用问题。要解决此问题,请以 root 身份运行命令“echo never > /sys/kernel/mm/transparent_hugepage/enabled”,并将其添加到您的 /etc/rc.local 以便在重新启动后保留设置。禁用 THP 后必须重新启动 Redis。
[14] 01 Jul 01:15:51.435 # WARNING: TCP backlog 设置无法强制执行 511,因为 /proc/sys/net/core/somaxconn 设置为较低的值 128。
[14] 7 月 1 日 01:15:51.435 * 从磁盘加载的数据库:0.000 秒
[14] 7 月 1 日 01:15:51.435 * 服务器现在准备好接受端口 6381 上的连接
[14] 7 月 1 日 01:34:45.088 * 10.196.88.29:6380 的 SLAVE 已启用(用户请求)
[14] 7 月 1 日 01:34:45.947 * 连接到 MASTER 10.196.88.29:6380
[14] 7 月 1 日 01:34:45.947 * MASTER <-> SLAVE 同步开始
[14] 7 月 1 日 01:34:45.948 * SYNC 的非阻塞连接触发了事件。
[14] 7 月 1 日 01:34:45.948 * 主服务器回复 PING,复制可以继续...
[14] 7 月 1 日 01:34:45.948 * 部分重新同步不可能(没有缓存的主服务器)
[14] 7 月 1 日 01:34:45.948 * 从主站完全重新同步:b912b647401917d52742c0eac3ae2f795f59f48f:1
[14] 7 月 1 日 01:34:45.960 * 主站 <-> 从站同步:从主站接收 18 个字节
[14] 7 月 1 日 01:34:45.960 * MASTER <-> SLAVE 同步:刷新旧数据
[14] 7 月 1 日 01:34:45.960 * MASTER <-> SLAVE 同步:将 DB 加载到内存中
[14] 7 月 1 日 01:34:45.960 * MASTER <-> SLAVE 同步:成功完成
[14] 7 月 1 日 01:38:42.495 # 与主设备的连接丢失。
[14] 01 Jul 01:38:42.495 * 缓存断开连接的主状态。
[14] 01 Jul 01:38:42.495 * 丢弃以前缓存的主状态。
[14] 7 月 1 日 01:38:42.495 * 启用主模式(用户请求)
[14] 7 月 1 日 01:38:42.495 # CONFIG REWRITE 成功执行。
[14] 7 月 1 日 01:38:42.506 * 10.196.88.29:6380 的 SLAVE 已启用(用户请求)
[14] 7 月 1 日 01:38:43.425 * 连接到 MASTER 10.196.88.29:6380
[14] 7 月 1 日 01:38:43.426 * MASTER <-> SLAVE 同步开始
[14] 7 月 1 日 01:38:43.426 * SYNC 的非阻塞连接触发了事件。
[14] 7 月 1 日 01:38:43.427 * 主服务器回复 PING,复制可以继续...
[14] 7 月 1 日 01:38:43.427 * 部分重新同步不可能(没有缓存的主服务器)
[14] 7 月 1 日 01:38:43.427 * 从主站完全重新同步:b912b647401917d52742c0eac3ae2f795f59f48f:10930
[14] 7 月 1 日 01:38:43.520 * 主站 <-> 从站同步:从主站接收 18 个字节
[14] 7 月 1 日 01:38:43.520 * MASTER <-> SLAVE 同步:刷新旧数据
[14] 7 月 1 日 01:38:43.520 * MASTER <-> SLAVE 同步:将 DB 加载到内存中
[14] 01 Jul 01:38:43.520 * MASTER <-> SLAVE 同步:成功完成

哨兵配置

端口 26379
pidfile "/var/run/redis-sentinel.pid"
logfile ""
daemonize no

由 CONFIG REWRITE 生成

dir "/data"
sentinel monitor redis-holt-overflow 10.19.8.2 6380 1
sentinel down-after-milliseconds redis-holt-overflow 3100
sentinel config-epoch redis-holt-overflow 0
sentinel leader-epoch redis-holt-overflow 1
sentinel known-slave redis-holt-overflow 10.19.8.3 6381
sentinel current-epoch 1

Redis 和哨兵信息:

redis_version:2.8.21 redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:551c16ab9d912477
redis_mode:standalone
os:Linux 3.10.0-123.8.1.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.7.2
process_id:13
run_id:7e1a1b6c844a969424d16f3efa116707ea7a60bf
tcp_port :6380
uptime_in_seconds:1312
uptime_in_days:0
hz:10
lru_clock:9642428
config_file:/usr/local/etc/redis/redis.conf

0 投票
1 回答
1322 浏览

bash - 启动 Redis sentinel 的简单 BASH 脚本

我有这个简单的脚本来尝试启动 3 个不同的 Redis Sentinel 进程来监控主/从 Redis 进程:

但当然,这实际上不会启动 3 个单独的进程 - 它只会在终端窗口中运行第一个命令,而后两个命令不会运行。我可以在一个脚本的不同窗口中运行所有 3 个命令的最佳方法是什么?(我还想从同一个脚本运行一些其他命令,但我想保持简单,例如。)

我在 Mac OSX 上使用 iTerm2。

0 投票
1 回答
1416 浏览

redis - conf文件中的Redis Sentinel输出

我正在测试 Redis Sentinel 的故障转移能力。它起作用了,Sentinel 在 conf 文件中添加了一些行。它自动发现了其他哨兵和从属副本,但它添加了一些奇怪的 id。

谁能告诉我这些ID代表什么?由于他们紧随 known-sentinel,我认为他们是那些哨兵的 id,但我不能确定。

0 投票
2 回答
571 浏览

java - Redis Sentinel 和 ShardedJedis 用于 ShardedJedisPipeline

我最初Redis在生产中使用集群模式。但后来我意识到,如果我使用Redis independent serversusing ,由于显而易见的原因ShardedJedis java API,我可以使用性能更好的。ShardedJedisPipeline但是在使用Redis Server来维护自动故障转移和高可用性时,我必须使用Redis Sentinel. 所以,我开始研究Sentinel. 但是在做初始POC时,我知道我不能同时使用ShardedJedisSentinel

现在看来我所有的路径都关闭了

  1. Redis Cluster不支持流水线
  2. 如果没有,我无法实现高可用性和自动故障转移Sentinel
  3. 我不能使用Sentinelwith ShardedJedis

如果我在任何地方错了,请纠正我,并建议我实现性能以及高可用性和自动故障转移的最佳策略。

0 投票
0 回答
170 浏览

redis - 如何使用 redis sentinel 获取当前 master 的配置?

我已经为 Redis 服务器配置了 1 个主服务器和 2 个从服务器以及 1 个哨兵来监控主服务器。根据文档,如果主人宕机,哨兵将提升任何奴隶作为主人。所以我的问题是如何通过 sentinel 使用 c# 代码获取替换主控的配置???先感谢您....

0 投票
1 回答
1606 浏览

amazon-ec2 - Redis 故障转移,哨兵不工作

我正在尝试为故障转移支持设置 redis-sentinel 配置。这是我的配置,

Redis 哨兵配置

机器1:

机器2:

机器3:

添加机器 2 和机器 3 作为机器 1 的从机。复制工作正常。但是当机器 1 关闭时,其他机器不会发生主切换。他们仍然充当奴隶。我的设置有任何配置问题吗?

0 投票
3 回答
1999 浏览

node.js - 什么是 npm 模块支持 Redis Sentinel 作为会话存储

我将在我的 Node js (express) Web 应用程序中使用 redis sentinel cluster 作为会话存储。您能否列出执行此操作的最佳 npm 模块。

0 投票
1 回答
1385 浏览

notifications - Redis Sentinel:通知中的主名称

当 Redis Sentinel 通知事件时,它不提供 Redis 主节点的名称。

配置摘录:

所以只有事件类型(例如+odown)和事件描述,在+odown简单的情况下是master。不知何故,我觉得这缺乏重要的信息。我们不仅要通知用户某些事情发生了变化,还要通知用户发生变化。

您不能注册带有附加参数的脚本,例如

Redis 将使用该值作为一个整体,并检查它是否存在并且是否可执行。

我们通过创建小型包装脚本来解决这个问题,每个主实例都有一个。

然后将此包装器脚本附加到主控器:

这有点不舒服,但也不算太糟,只要你有固定数量的大师并且不要在网上快速创建它们。

您只需通过网络与哨兵交互即可注册新主人。( redis-cli -h <host> -p <port> sentinel whatever...) 但是创建这些包装脚本更加复杂。并不是说这是不可能的,但感觉就像白白地跳过燃烧的箍。

有没有办法通知包括主姓名:

  • 无需修补 redis
  • 没有包装脚本

?