问题标签 [redis-cluster]

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 投票
2 回答
943 浏览

go - 错误未知类型 Go

我对 Go 真的很陌生,请在这里忍受我。我正在尝试使用以下代码编写将mysql数据加载到redis集群的代码:redis-go-clusterload2redis

这是代码。它有点长,请在这里忍受我。

当我执行它时,我得到以下异常:

有人可以向我解释我在这里做错了什么吗?我将不胜感激。

0 投票
1 回答
35 浏览

database - Cassandra DB 或 Mongo DB 可以用于配置多个 DB 吗?

旧版本的REdis支持多DB,但由于最新版本不支持多DB,请问Cassandra或者Mongo可以用吗?

我需要多个数据库,因为我使用相同的 Redis 实例来支持不同的应用程序数据库

0 投票
2 回答
760 浏览

redis - Redis集群重新分片后,分配给节点的大量非连续槽

我创建了一个具有三个节点的 redis 集群:

然后我添加了第四个节点并重新分片以使插槽分配均匀:

然后,如果您缩小规模,将插槽从 :7003 节点重新分片到其余三个节点,您最终会得到如下结果:

:7001 节点有 4 组不同的哈希槽分配给它。在随后的重新分片之后,这种散列槽的“碎片化”似乎增加了。

哈希槽的碎片越来越多是否会成为一个问题(性能或其他方面)?

0 投票
2 回答
2519 浏览

docker - 如何在 docker 集群上运行 redis 集群?

语境

我正在尝试设置一个 redis 集群,以便它在 docker 集群上运行,以实现最大的自动修复。

更准确地说,我有一个 docker compose 文件,它定义了一个具有 3 个副本的服务。每个服务副本都有一个正在运行的 redis-server。然后我在每个副本中都有一个程序,它监听 docker 集群上的变化,并在满足条件时启动集群(每 3 个 redis 服务器相互认识)。

设置redis集群工作正常,集群形成,所有redis-servers通信良好,但redis-servers之间的通信是在docker集群内部。

问题

当我尝试从 docker 集群外部进行通信时,由于入口模式,我能够与 redis-server 通信,但是当我尝试添加信息(例如:set foo bar)并且客户端被移动到另一个 redis-服务器通信挂起并最终超时。

代码

这是 docker-compose 文件。

显示问题的命令流。

客户

Redis 服务器

客户

Redis 服务器

客户

有任何想法吗?我也尝试过制作我的一个代理/负载平衡器,但没有奏效。

谢谢!祝你今天过得愉快。

0 投票
0 回答
2002 浏览

redis - Redis 集群重新分片期间集群重定向过多

Redis 版本:3.2.10

ioredis 版本:3.1.4

最近我测试了在redis集群上运行resharding操作,同时集群处于相当高的负载下,客户端使用ioredis node.js库,偶尔在客户端上我们在reshard操作期间看到以下错误。

我目前对 ioredis 的以下选项使用默认值: maxRedirections 16 retryDelayOnFailover 100ms

这是否意味着在重新分片期间,插槽数据的传输时间超过 1600 毫秒?

我大致知道迁移插槽的过程如下:

  1. 使用 CLUSTER SETSLOT IMPORTING 将目标节点槽设置为导入状态。
  2. 使用 CLUSTER SETSLOT MIGRATING 将源节点槽设置为迁移状态。
  3. 使用 CLUSTER GETKEYSINSLOT 命令从源节点获取密钥,并使用 MIGRATE 命令将它们移动到目标节点。
  4. 在源或目标中使用 CLUSTER SETSLOT NODE。

但是在上述哪些步骤中,客户端将无法获取或设置关键数据?

对于上下文,在此测试期间,每个节点的操作速度高达 100k 操作/秒。

0 投票
1 回答
684 浏览

redis - 如果初始连接中的集群节点死亡,ioredis 客户端可以继续工作吗?

使用 ioredis ( https://github.com/luin/ioredis ) 连接到 redis 集群时,您只需要指定一个节点,例如使用三节点集群

127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002

您可以使用简单的连接:

如果 :7000 节点死亡并且您将其替换为不同的节点,则执行以下操作:

ioredis 是否能够继续工作(接受来自 :7000 的数据丢失),是否需要再次联系 127.0.0.1:7000 还是仅用于初始连接?

从我的实验看来,这种情况确实有效,我的问题的答案是肯定的,但我想检查这是预期的和受支持的情况。

0 投票
1 回答
3278 浏览

redis - Redis 集群 - 从站不进行故障转移

我已经创建了一个 Redis 集群,如下所示。

我经历过,当我同时停止 2 个作为集群主控的 Redis 实例作为(xxx.xxx.xxx.196 的 2 个实例)时,集群无法恢复,

但同时,如果我停止 .195 服务器的 2 个实例 where9100 -Master9200 - Slave. 集群恢复并正常工作

集群配置文件:

Redis 登录专用从服务器:

0 投票
1 回答
1492 浏览

php - phpredis Redis 集群连接对象跨请求重用

我们使用 phpredis 库从我们的服务机器连接到我们的 64 节点 Redis 集群。尽管我们使用了持久连接,但由于 php 不会跨请求重用对象,每个请求都会先对 Redis 集群进行CLUSTER SLOTS调用,然后再进行数据获取。这被证明是非常昂贵的,因为这会增加 API 和 Redis 上的 CPU,并且还会增加元信息(CLUSTER SLOTS)的网络使用率,否则这些信息可能会被缓存。基本上,我们希望在同一个 php-fpm 进程中跨多个请求重用 Redis 集群连接对象。关于如何做到这一点的任何建议?

更新:我在 cluster_library.c 代码中尝试了以下差异,但这似乎导致了 php 中的随机运行时异常。

0 投票
1 回答
1154 浏览

.net - 如何使用 ConnectionMultiplexer 处理 Redis 集群中的故障转移?

正如你所料,我有一个 6 节点的 Redis 集群启动并运行,3 个从站和 3 个主站。
从 Redis 服务器的角度来看,一切似乎都很笨拙,我可以调用cluster failoverdebug segfault在服务器上,适当的从服务器成为主服务器。

从 .net 方面来看,我一直在关注StackExchange Redis文档,所以我有一个 static IConnectionMultiplexer,从中我得到一个IDatabase,然后我可以从那里存储和检索值。

我正在使用如下连接字符串:srv1:7001,srv2:7001,srv3:7001,srv1:7002,srv2:7002,srv3:7002

到目前为止,一切都很好。

但是,我试图弄清楚在使用连接多路复用器时如何处理集群中的主故障。目前,我能想到的最好的办法就是捕获一个异常,丢弃当前的连接多路复用器并创建一个全新的,感觉有点恶心。

鉴于我在连接时告诉多路复用器所有潜在的端点,我希望它能够密切关注这样的事情并开始自动与新的主节点对话。一些文档也提到了这一点:

同样,当配置更改时(尤其是主/从配置),连接的实例让自己了解新情况(通过 INFO、CONFIG 等 - 如果可用)非常重要。StackExchange.Redis 通过自动执行此操作...

如果我杀死srv1:7001并且什么都不做,那么连接永远不会恢复,并且每次设置新值的调用都会抛出一个RedisConnectionException.

我曾尝试附加到 events和订阅各种频道,希望在 master 宕机时看到广播ConfigurationChanged。如果我导致集群中的主服务器发生更改,这些似乎都不会触发。ConfigurationChangedBroadcastConnectionFailed

所以我想知道在这方面我是否缺少一些东西?

干杯,
克雷格。

0 投票
1 回答
1950 浏览

docker - 使用 Docker Swarm 模式的 Redis 集群

我是 Docker swarm 的新手。我试图用 compose 文件在 Docker swarm 上部署 redis 集群。我希望 redis 集群使用端口 6380,所以我配置了端口并将 redis 配置文件挂载到 compose 文件中。

但是当我运行时docker stack deploy --compose-file docker-compose.yml node,我得到一个错误状态,“对不起,集群配置文件 redis-node.conf 已被不同的 Redis 集群节点使用。请确保不同的节点使用不同的集群配置文件。”

这是我的 docker-compose.yml

如何在 Docker swarm 模式下部署使用 redis.conf 挂载的 redis 集群?