标签: redis-sentinel

Redis在与主/从服务器相同的服务器中哨兵?

我一直在阅读有关如何使用Redis Sentinel的一些内容,我知道可以有2个或更多的标记,并在从客户端调用时在它们之间实现负载平衡.

将这两个哨兵与我的主人+奴隶放在同一个服务器上是一种好习惯吗?换句话说,在与主服务器相同的物理服务器中有1个标记,而在从服务器的同一个物理服务器中有另一个标识符吗?

在我看来,如果主服务器死机,从机中的标记将简单地将从机升级为主机.如果从服务器死了,那没关系,因为主服务器仍在运行.

我错过了什么吗?有什么缺点?

我宁愿让哨兵与主/从属于同一物理服务器,以减少延迟.

redis redis-sentinel

7
推荐指数
2
解决办法
5275
查看次数

WAIT命令可以在Redis中提供强大的一致性吗?

问候溢出者,

在Redis的标记/集群设置中,我们是否可以使用带有从站总数的WAIT命令来确保Redis服务器之间的一致性?为什么不?

亲切的问候

consistency redis redis-sentinel redis-cluster

7
推荐指数
1
解决办法
1632
查看次数

无法在UbuntuBash上使用redis-cli连接到Sentinel

我在Windows 10 PC上安装了Ubuntu Bash.之后使用apt-get install命令安装Redis 我可以使用命令连接到redis redis-cli信息显示详细信息

# Server
redis_version:2.8.4
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:a44a05d76f06a5d9
redis_mode:standalone
Run Code Online (Sandbox Code Playgroud)

之后我创建了一个我可以连接的复制品

发布我使用从/etc/redis/文件夹安装的默认配置文件启动Sentinel .

我用来启动redis的命令是 sudo redis-server /etc/redis/sentinel1.conf --sentinel

但是,如果我尝试使用redis-cli -p 26379命令连接,我会收到此错误

laptop:~$ redis-cli -p 26379
Could not connect to Redis at 127.0.0.1:26379: Connection refused
not connected>
Run Code Online (Sandbox Code Playgroud)

我检查了sentinel.conf文件,指定的端口是26379

我甚至尝试用redis-sentinel /path/to/sentinel.conf 相同的错误开始哨兵.

相同的设置在虚拟机上运行的Ubuntu上运行正常

编辑

我在WIndows 10 Bash上运行Ubuntu所以netstat -tunlpa命令显示了这一点

vipresh@VIPRESHJH:/etc/redis$ sudo netstat -tunlpa
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name …
Run Code Online (Sandbox Code Playgroud)

ubuntu redis-sentinel windows-10

7
推荐指数
1
解决办法
2366
查看次数

在具有哨兵的AWS上设置Redis HA - 不同哨兵看到的redis节点最终无限循环

我们的设置

  • 每个AWS Sydney AZ上有3个redis哨兵一个
  • 具有主服务器和多个从服务器的2到500个redis节点,可使用AWS自动扩展组策略自动水平扩展
  • 1x写入将流量推送到主站的ELB
  • 1x读取将流量推送到从站的ELB
  • 1x Sentinel ELB将流量推送到哨兵
  • 1x辅导员(更多关于这个波纹管)

此设置在两个集群中复制,用于称为元数据缓存.我们想要部署更多集群.

主持人

是我们构建的python守护程序,它订阅了sentinels pub/sub并侦听+ switch-master消息.以下是协调人采取的行动:

  1. 检测并主控+ switch-master触发的故障转移
  2. 使用查询新主服务器的标记 SENTINEL get-master-addr-by-name mymaster
  3. 使用RedisClusterNodeRole = slave标记旧主服务器
  4. 使用RedisClusterNodeRole = master标记新的master
  5. 在我们的写ELB中添加新的master
  6. 从我们的阅读ELB中删除新的主人
  7. 从写ELB中删除旧主人
  8. 尝试将旧主服务器添加到我们的读取ELB中(如果服务器已关闭,这将失败,这很好)

问题

因为奴隶每天可以根据交通进出多次,所以我们最终会遇到属于同一个奴隶争夺同一奴隶的哨兵的一些奴隶.这是因为IP池在集群之间共享,并且据我们所知,从属ID是它们的IP.

这是复制的方法:

  1. 群集缓存具有IP 172.24.249.152的主服务器
  2. 群集缓存具有主故障转移提升从站,主机为IP 172.24.246.142.IP 172.24.249.152的节点现已关闭
  3. 群集元数据向上扩展,DHCP分配IP 172.24.249.152(群集缓存上的先前主服务器)
  4. 群集缓存将看到它的先前主服务器现在已启动,并将尝试将其重新配置为172.24.246.142(缓存群集上的新主服务器)的slave
  5. 簇的元数据将触发上的+ SDOWN 172.24.246.142和一段时间后接着是+从属可重新-发送给它的尝试重新配置它作为元数据群集从属一个-sdown
  6. 群集缓存将尝试执行与群集元数据在第5点上执行的操作相同的操作.

哨兵陷入无休止的循环中,永远为这种资源而战.即使我们只有一个哨兵小组管理具有不同主名称的两个redis群集,这种情况也会发生.这使我们相信哨兵不了解不同群集之间的资源,而只是分别对每个群集执行合乎逻辑的操作.

解决方案我们试过

  1. 触发a SENTINEL reset mymaster+ sdown事件后,尝试让哨兵忘记该节点.问题是,如果该集群正在执行主故障转移,它可能会生成竞争条件.我们成功地复制了这个假设,并且让哨兵不同步,其中一个指向一个主人,另外两个指向另一个.
  2. 将网络分成每个群集一个IP池.这是有效的,因为IP不会被重用,但是当我们需要一个新的集群时,它也会使事情变得更加灵活和复杂.这是我们最终要解决的问题,但我们希望尽可能避免这种情况.

理想的解决方案

  1. Redis哨兵提供SENTINEL removeslave 172.24.246.142 mymaster我们可以在每次有奴隶的+ sdown事件时运行.这将使该群集忘记那个奴隶曾经存在而不会产生副作用SENTINEL reset …

amazon-web-services redis autoscaling redis-sentinel devops

6
推荐指数
0
解决办法
862
查看次数

使用Redis Sentinel支持从属复制的奴隶?

我们有两个数据中心,每个数据中心都有两个redis实例.通常它们被复制为链.

NY1 (Master) --> NY2 (Slave) --> CO1 (Slave) --> CO2 (Slave)

NY是纽约,CO是科罗拉多州,我们的备份数据中心.为了节省WAN上的带宽,我们不希望CO1 CO2连接到NY1.相反,我们想要一种链配置,其中只有一个从属设备直接连接到主设备,而其他设备都是"奴隶的奴隶".

可以使用Sentinel维护这种复制布局吗?或者所有奴隶都必须是主人的奴隶,而不是奴隶的奴隶?

redis redis-sentinel

6
推荐指数
1
解决办法
164
查看次数

2019 年 Windows 上的 Redis 状况?

我需要使用带有两个 Windows Server 2016 的 Redis Sentinel 以 HA 模式(在集群中)配置 Redis。四处搜索,有很多关于如何在 Windows 上安装 Redis 的材料,但它们似乎都没有......对我来说。

我到了这个页面,其中以有组织的方式列出了大部分内容:https : //github.com/ServiceStack/redis-windows

我基本上对所有这些都有问题,想了解一些事情,甚至可能得到推荐的方法来指导我:

  • 在 Windows 上的 Ubuntu 上安装 Redis
    • 这似乎……作弊。会有好的表现吗?在 Windows 上运行 Ubuntu VM 时,我是否能够以这种方式配置集群(没有太多麻烦)?
  • 流浪汉
    • 基本和上面一样
  • 微软本地端口
    • 这似乎不那么作弊,但另一方面已经过时了。可用版本适用于 Redis 3.0(最新版本为 5.0)。所以我担心我会错过很多好的功能和改进。

windows redis redis-sentinel

6
推荐指数
2
解决办法
4545
查看次数

为Sentinel配置配置ASP.NET Redis会话状态提供程序

我一直试图在我的应用程序中配置ASP.NET Redis会话状态提供程序一段时间.由于这篇文章,我终于能够成功连接到master和set/get键:无法使用ASP.NET Session State Provider连接到Redis服务器

现在,我的下一个问题是...使用Sentinel配置.

我熟悉SENTINEL get-master-addr-by-name master-dev-sessionstate命令来确定主人.这个提供商是否内置了此功能?基于上面链接的博客文章的评论(这也是我可以找到的唯一文档),似乎我应该能够使用connectionString属性来传递多个主机.不过,我不确定这些多个主机是否打算成为Sentinels.

<connectionStrings>
  <add name="RedisConnection" connectionString="1.2.3.4:5,6.7.8.9:10,abortConnect=false,ssl=false,password=XXXXXX,operationTimeoutInMilliseconds=5000"/>
</connectionStrings>

<sessionState mode="Custom" customProvider="MySessionStateStore">
  <providers>
    <clear/>
    <add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" connectionString="RedisConnection"/>
  </providers>
</sessionState>
Run Code Online (Sandbox Code Playgroud)

像这样配置我的连接时,我收到此错误:

附加信息:无法连接到redis服务器; 要创建断开连接的多路复用器,请禁用AbortOnConnectFail.

即使我的连接字符串中只有主IP,我也会收到此错误.如上所示,我的连接字符串中有abortConnect ="false",这就是它指示我做的事情.连接字符串中存在或不存在相同的错误.

考虑到这一点,这是我的问题......

  1. 此提供商是否支持Sentinel配置?
  2. 如果是,连接字符串的正确格式是什么?
  3. 有没有人有这方面的任何其他良好的文档资源?我甚至都没有在该博客文章之外的微软网站上找到任何东西.

编辑:我应该注意,这是一个自定义的本地Redis安装.我们没有通过Azure运行.

编辑:我最近试图将我的工作配置指向Sentinel,我收到"没有连接可用于服务此操作:EVAL." 这让我相信这个提供商没有Sentinel支持.谁能证实这一点?

c# asp.net session redis redis-sentinel

5
推荐指数
1
解决办法
9115
查看次数

Redis sentinel不会自动发现其他哨兵

我将redis配置为master,有两个slave,每个都在一个单独的盒子上.我还在每个盒子上运行了一个哨兵进程.它是这里的文档中描述的设置:

http://redis.io/topics/sentinel#example-2-basic-setup-with-three-boxes

每个哨兵都可以连接到我的主人,可以看到奴隶.他们能够独立检测主设备或从设备是否发生故障.问题是哨兵无法互相发现.

我已经验证了每个哨兵都__sentinel__:hello按预期向频道发布消息,但似乎没有一个实际上是从其他节目接收消息.

我如何让哨兵看到对方?

redis redis-sentinel

5
推荐指数
1
解决办法
3551
查看次数

使用nodeJS中的sentinal识别Redis Master

我有 2 个 Redis 服务器,一个主服务器,另一个从服务器(复制)。一旦Master由于某种原因宕机了,Slave就会成为Master,并继续充当Master,直到该服务器出现问题为止。

我有一个nodeJS服务器,我想将数据推送到当前作为Master运行的Redis。我有一个监视 Redis 服务器的哨兵,但我的问题是如何使用 nodeJS 从哨兵获取主信息?如果有办法的话,它是否会自动将数据推送到备用redis服务器而无需重新启动任何服务?

redis node.js node-redis redis-sentinel

5
推荐指数
1
解决办法
5412
查看次数

获取redis主哨兵

我正在尝试获取当前正在监视 redis master 的所有哨兵的列表。

我知道如果我有一个哨兵,我就可以使用sentinel sentinels mymaster,但如果我没有任何哨兵的地址,我怎样才能获得它们?

redis redis-sentinel

5
推荐指数
1
解决办法
1万
查看次数