标签: redis-sentinel

如何使用StackExchange.Redis支持Redis哨兵架构?

我的应用程序使用该StackExchange.Redis包,我开始使用sentinel体系结构,以支持高可用性和故障.

我在网上搜索,试图ConnectionMultiplexer在使用哨兵架构时找到正确的方法来使用该对象,并且无法找到有用的答案.

有些帖子说它不支持它或部分支持它,有些帖子告诉你将所有redis连接地址添加到连接字符串,有些帖子告诉你,他们通过订阅事件提供了自定义实现.

那么,ConnectionMultiplexer支持这种架构吗?
如果答案是肯定的,我的连接字符串应该如何?

c# redis redis-sentinel stackexchange.redis

16
推荐指数
1
解决办法
3572
查看次数

redis-sentinel 抛出错误:“无法解析主实例主机名。”

我正在使用以下配置启动 redis 和哨兵节点。我首先启动redis节点,当我启动Sentinel时,如果失败并出现错误:

sentinel_node |
sentinel_node | *** FATAL CONFIG FILE ERROR ***
sentinel_node | Reading the configuration file, at line 1
sentinel_node | >>> 'sentinel monitor MasterRedis redis_node 6000 3'
sentinel_node | Can't resolve master instance hostname.
sentinel_node exited with code 1
Run Code Online (Sandbox Code Playgroud)

Redis 撰写

version: '2.1'
services:

redis:
    image: redis
    container_name: redis_node
    environment:
    - ALLOW_EMPTY_PASSWORD=yes
    ports:
    - 6000:6000
    volumes:
    - ./redis_startup.sh:/usr/local/bin/redis_startup.sh
    - ./redis_server_stop.sh:/usr/local/bin/redis_server_stop.sh
    command: ["redis_startup.sh", "-port", "6000"]
Run Code Online (Sandbox Code Playgroud)

redis_startup.sh

redis-server --port ${port:-6000}
Run Code Online (Sandbox Code Playgroud)

哨兵撰写

version: '2.1'
services:

sentinel:
    image: redis
    container_name: …
Run Code Online (Sandbox Code Playgroud)

redis redis-sentinel docker docker-compose

11
推荐指数
2
解决办法
9709
查看次数

如何在Redis 3.2.6 Sentinel中禁用保护模式?

我尝试了以下错误消息推荐的所有内容:

(错误)DENIED Redis正在受保护模式下运行,因为启用了保护模式,未指定绑定地址,也未向客户端请求身份验证密码.在此模式下,仅从环回接口接受连接.如果要从外部计算机连接到Redis,可以采用以下解决方案之一:1)通过从服务器的同一主机连接到Redis,只需禁用保护模式从环回接口发送命令'CONFIG SET protected-mode no'正在运行,但如果您这样做,则无法通过互联网公开访问.使用CONFIG REWRITE使此更改成为永久更改.2)或者,您可以通过编辑Redis配置文件并将protected mode选项设置为"no"来禁用保护模式,然后重新启动服务器.3)如果您手动启动服务器进行测试,请使用"--protected-mode no"选项重新启动它.4)设置绑定地址或验证密码.注意:您只需要执行上述操作之一,服务器就可以开始接受来自外部的连接.

我的/etc/redis/sentinel.conf:

daemonize yes
sentinel myid XXX
sentinel monitor master XXX 6379 2
sentinel down-after-milliseconds master 60000
sentinel config-epoch master 0
protected-mode no
bind 0.0.0.0
port 26379

编辑:我的/etc/redis/redis.conf:

port 6379
bind 0.0.0.0
protected-mode no

我也尝试过添加sentinel auth-pass master XXX.

我的整个后端都在私有子网上.我已经进入防火墙后面的数据中心,来自同一个专用网络,我仍然可以只在本地连接而不会收到令人沮丧的错误消息.

服务器环境: Debian 8,Redis 3.2.6
客户端环境: Ubuntu 16.10,redis-cli 3.2.1
Redis实例: 3个
Sentinel实例: 3

我不只是一个,而是建议的3/4(没有设置命令行标志).有没有人有任何指导或想法?我显然遗漏了一些我无法从错误消息,文档,Stackoverflow,Google和试错中找到的东西.在想深入了解源代码之前,我想先在这里发一个问题.

任何帮助表示赞赏.谢谢!

...而且,是的,我在配置更改后重新启动了守护进程.:)

redis sentinel redis-sentinel

10
推荐指数
1
解决办法
9710
查看次数

使用jedis如何写入redis集群中的特定槽/节点

我正在尝试提高将数据写入redis集群的性能。我们计划从 redi-sentinel 迁移到集群模式以实现可扩展性。

但是,与redis-sentinel相比,写操作的性能要差很多。我们在redis-sentinel中利用了管道,但集群模式不支持管道。

因此,我正在考虑将前往同一节点的所有密钥分组,并使用管道将批次发送到该特定节点。

所以,我想知道如何知道/计算(在写入集群之前)特定密钥将写入哪个节点/插槽?

redis jedis redis-sentinel redis-cluster

9
推荐指数
1
解决办法
4985
查看次数

在docker swarm中的Redis sentinel故障转移配置

描述


我正在尝试在docker swarm中创建一个Redis集群.我正在使用bitnami-redis-docker图像来创建我的容器.通过bitnami文档,他们总是建议使用1个主节点,而不是阅读Redis文档,该文档声明应该至少有3个主节点,这就是为什么我对哪一个是正确的感到困惑.鉴于所有bitnami slave默认为只读,如果我在其中一个swarm leader节点中只设置了一个master,如果它失败了,我相信sentinel将尝试将不同的slave redis实例作为master提升,但鉴于它只读是所有写操作都会失败.如果我改变它以使主redis实例global意味着它将在swarm中可用的所有节点中创建,在这种情况下我是否需要sentinel?此外,如果以下设置是好的,是否有理由引入负载均衡器?

建立


+------------------+ +------------------+ +------------------+ +------------------+
| Node-1           | | Node-2           | | Node-3           | | Node-4           |     
| Leader           | | Worker           | | Leader           | | Worker           |
+------------------+ +------------------+ +------------------+ +------------------+
|  M1              | | M2               | | M3               | | M4               |
|  R1              | | R2               | | R3               | | R4               |
|  S1              | | S2               | | S3               | | S4               |
| …
Run Code Online (Sandbox Code Playgroud)

redis redis-sentinel docker docker-swarm

9
推荐指数
1
解决办法
971
查看次数

Redis哨兵码头图像/ Dockerfile

我想在coreOS集群上部署高可用性Redis,我需要一个可以工作的Redis Sentinel docker镜像(即Dockerfile).我已经收集了足够的信息/专业知识来创建一个(我认为)...但是我对高级网络的有限知识/经验是阻止我构建和共享它的唯一因素.

这里的专家可以帮我开发一个Redis Sentinel Dockerfile(现在不存在)吗?Redis/Docker社区真的会从中受益.

这是更广泛的问题和背景:https: //github.com/antirez/redis/pull/1908

我认为解决方案就在这里:https: //github.com/antirez/redis/pull/1908#issuecomment-54380876

这是我一直在使用的Dockerfile ...但如果你阅读上面的帖子,你会看到我的评论(joshula)......它缺乏mattsta所说的网络修复.请注意,因为我在coreOS上使用它,所以sentinel.conf中的任何配置设置都是在运行时通过命令行设置的(因此为ENTRYPOINT).

# Pull base image.
FROM dockerfile/ubuntu:latest

# Install Redis.
RUN \
  cd /tmp && \
  wget http://download.redis.io/redis-stable.tar.gz && \
  tar xvzf redis-stable.tar.gz && \
  cd redis-stable && \
  make && \
  make install && \
  cp -f src/redis-sentinel /usr/local/bin && \
  mkdir -p /etc/redis && \
  cp -f *.conf /etc/redis && \
  rm -rf /tmp/redis-stable* && \
  sed -i 's/^\(bind .*\)$/# \1/' /etc/redis/redis.conf && …
Run Code Online (Sandbox Code Playgroud)

redis redis-sentinel docker coreos

8
推荐指数
1
解决办法
8399
查看次数

有没有办法使用 JedisCluster 实现 redis 节点的自动故障转移和自动发现?

我将 Jedis Java 客户端用于 Redis,它非常棒。我分别使用了集群 (JedisCluster) 和高可用性 (JedisSentinelPool) 的功能。

这两种实现单独工作就像一个魅力,但它似乎不是一种同时使用两者的方法。

我希望在故障转移时自动提升高可用性,并在主站失败时自动发现其他主站(就像哨兵一样)。我知道 Redis-cluster 会自动进行故障转移,并且它还提供某种拓扑的自动发现。但是 Jedis-Cluster 似乎没有提供任何方法来处理自动故障转移并充分利用 Jedis 集群。

有没有办法用 JedisClient 实现自动故障转移?

JedisSentinel 和 JedisCluster 可以一起使用吗?

一些帖子表明这是不可能的:https : //groups.google.com/forum/#!topic/jedis_redis/HtDblX771bs

Jedis git 上关于此主题的文档有限。

high-availability redis jedis redis-sentinel

8
推荐指数
0
解决办法
553
查看次数

如何在不启动哨兵故障转移的情况下执行redis FLUSHALL?

我们有一个带有两个redis服务器的redis配置.我们还有3个哨兵来监控这两个实例并在需要时启动故障转移.

我们目前有一个流程,我们定期在redis服务器上进行FLUSHALL.这是一个阻塞操作,花费的时间比我们为哨兵分配的时间要长.换句话说,我们的哨兵配置包括:

sentinel down-after-milliseconds OurMasterName 5000

并且在服务器上执行redis-cli FLUSHALL需要> 5000毫秒,因此哨兵会启动故障转移.

我们承认做FLUSHALL并不是很好,而且我们也知道我们可以增加毫秒级的时间,但为了这个问题的目的,假设这些都不是选项.

问题是:如果由于FLUSHALL阻塞超过5000毫秒而我们的哨兵没有启动故障转移,我们怎么能进行FLUSHALL(或等效操作)?有没有人遇到并解决了这个问题?

redis sentinel redis-sentinel

8
推荐指数
1
解决办法
807
查看次数

开源Redis集群和Redis labs企业集群之间有什么区别?

我们计划将Redis用作集中式和高可用性缓存,因此我们使用Redis以及twemproxy和sentinel查看了Redis Labs企业集群和本地集群式设置.在研究RELC时,我们偶然发现了这个链接:

https://redislabs.com/redis-enterprise-documentation/rlec-compatibility/compatibility-with-open-source-redis-cluster

其中说 - RLEC适用于任何标准Redis客户端,包括独立的Redis客户端和Redis群集客户端.

究竟什么是开源Redis集群,我该如何使用它?这与独立的Redis不同吗?为什么在开源版本可用时才使用RELC,仅用于支持?我没有找到任何详细说明差异的来源,所以如果有人使用过这些解决方案之一,请解释为什么选择一个而不是另一个.

redis redis-sentinel twemproxy

8
推荐指数
1
解决办法
9464
查看次数

Redis哨兵未连接到主站:错误:只读您无法针对只读从站进行写入?

redis replicationsentinel建筑师有这个:

5个服务器:.1.2.3.4.5

  • .1:nodejs应用程序、redis主控、redis哨兵
  • .2:nodejs应用程序,redis从属
  • .3:nodejs应用程序,redis从属
  • .4:redis哨兵
  • .5:redis哨兵

Sentinel 按预期处理故障转移。 redis-cli -h x.y.z.5 -p 26379 sentinel get-master-addr-by-name mymaster总是返回.1服务器。

我连接到此复制的代码(我使用ioredis):

let sentinels = [
  { host: process.env.REDIS_SENTINEL_1, port: process.env.REDIS_PORT },
  { host: process.env.REDIS_SENTINEL_2, port: process.env.REDIS_PORT },
  { host: process.env.REDIS_SENTINEL_3, port: process.env.REDIS_PORT }
]
store = new Redis({
  name: 'mymaster',
  sentinels: sentinels
})
store.on('ready', () => {
  store.set('foo', new Date()) …
Run Code Online (Sandbox Code Playgroud)

node.js redis-sentinel ioredis

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