问题标签 [twemproxy]

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 投票
0 回答
273 浏览

php - 求phpredis redisArray一致哈希算法信息

我们正在使用 phpredis redisArray 在 2 个服务器上分发密钥。但是我们现在有一个新的需求,即使用除 php 之外的其他语言使用相同的数据集。

那么任何人都可以建议使用哪种哈希函数(crc32.crc32a,jenkins...等)与哪种密钥分配模式(ketama,modula等)相结合,以获得正确的结果来构建库以匹配redisArray分布。

请注意,我们无法重新散列,因为数据集非常庞大,例如 200M+ 。

我们也在考虑使用 twemproxy ( https://github.com/twitter/twemproxy ) 但散列和密钥分布与 phpredis redisArray 分布不匹配。

有人可以指导我们吗?

0 投票
1 回答
964 浏览

redis - twemproxy(胡桃夹子),错误:协议错误,得到“{”作为回复类型字节

我通过twemproxy操作redis ,可以连接redis实例,但是不能执行任何命令。无论我输入什么,它都会抛出错误

然后,它退出了

如何解决这个问题?

0 投票
1 回答
2051 浏览

redis - twemproxy(胡桃夹子)添加redis实例并保持一致性

我设置了 twemproxy(胡桃夹子),使用 2 个 redis 服务器作为后端,包括从属服务器、哨兵服务器和故障转移服务器。

一旦我添加了另一个 redis 服务器,一些密钥就无法读取,可能是由于 twemproxy 重定向到另一个 redis。

如何在不破坏一致性的情况下添加另一个 redis 实例?

我想将该设置用作一致且非常快速的数据库。

这是我的设置:

我想继续分片服务器的工作并能够添加实例。我需要使用其他设置吗?

0 投票
1 回答
1353 浏览

redis - 无法在 C# 中使用 StackExchange redis 连接 Twemproxy

我正在尝试使用 TWEMPROXY 服务器的 IP 地址使用 StackExchange redis 执行下面的 C# 代码,它在下面给出错误:

StackExchange.Redis.dll 中出现“StackExchange.Redis.RedisConnectionException”类型的未处理异常

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

但是,当我使用本地主机时,它可以正常工作并将数据存储在本地 Redis 缓存中

带有“localhost”的代码示例如下:

对于上面的相同代码,当我将 localhost 替换为 TWEMPROXY IP 地址时,它会出错。

0 投票
1 回答
559 浏览

redis - ServiceStack.Redis.RedisResponseException 使用 Redis 集群和 Twemproxy

我有一个 3 主 / 3 从 Redis 集群在单个 Ubuntu 14_04 机器上运行。创建集群时,我遵循了此处发布的指南。我也有胡桃夹子在同一台机器上运行。一切都启动并且似乎在集群中正常运行。我使用 ServiceStack.Redis v3 API 编写了一个小型 c# 应用程序,每当我尝试写入 Redis 集群时,它都会引发异常。这是回应:

ServiceStack.Redis.dll 中出现“ServiceStack.Redis.RedisResponseException”类型的未处理异常

附加信息:MOVED 5836 192.168.120.147:7001,sPort:54812,LastCommand:SET foo_1 "bar_1"

这是我正在使用的代码:

ServiceStack.Redis.RedisClient redisClient = new ServiceStack.Redis.RedisClient("192.168.120.147");

redisClient.Set("foo_1", "bar_1");

任何帮助将不胜感激。

谢谢!

0 投票
1 回答
302 浏览

redis - 不均匀的缓存命中

我已将 twemproxy 集成到 Web 层中,并且我有 6 个 Elasticache(1 个主副本,5 个只读副本)我遇到的问题是所有副本都具有相同的键,一切都相同,但是一个副本上的缓存命中率比其他副本多得多,我执行了几次加载仍然在每次测试中测试我得到相同的结果。我有一个单独的数据引擎,可以在这个集群的主节点上写入数据,剩下的 5 个副本与之同步。所以我使用 twemproxy 仅用于从 Elasticache 读取数据,而不是用于分片目的。所以我的简单问题是为什么我在 Elasticache 的单个只读副本上获得了 90% 的命中,它应该在所有只读副本之间平均分配命中?正确的?

先感谢您

0 投票
1 回答
294 浏览

redis - twemproxy(胡桃夹子)端口突然变得不可用

我有这个 twemproxy_sentinel 设置,它使用默认端口 22122 作为入口,并将请求转发到在端口 6380、6381 上运行的底层 redis 服务器。

时不时地,端口 22122 变得不可用。因此使用 redis 的客户端将无法连接。telnet 到它会立即关闭。我需要做的就是重新启动 /etc/init.d/nutcracker,一切都会恢复正常。一直以来,sentinel 和 redis 服务都在工作。只有 twemproxy 似乎被切断了。在重新启动之前,胡桃夹子服务仍在运行(ps 会显示它正在运行)。日志没有显示任何失败的迹象。

我不确定为什么会发生这种情况,并试图挖掘 redis 服务器、redis sentinel 和 twemproxy 日志的日志。我还尝试查看 /var/log/messages 并尝试确保 file-max 不会阻塞正在打开的端口数。

想知道我可以从哪里开始研究为什么事情会下降。

0 投票
2 回答
2695 浏览

php - 用 Twemproxy 安装了 Redis 集群,我真的很困惑为什么某些 SET 命令被 MOVED

我已经设置了一个 Redis-Cluster 3.0.5 版本的 Redis-Server (Ubuntu 14.04)

为简单起见,我们将忽略复制。我在 localhost 上运行了三个 redis 实例,端口为 7001、7002 和 7003。使用此命令,它们都成为集群的主人

我喜欢使用twemproxy的想法

twemproxy-config.yml

我初始化twemproxy,nutcracker -c twemproxy-config.yml -d然后我可以访问twemproxyredis-cli -h 127.0.0.1 -p 22121

请看一下这个输入和输出

我担心这可能无法正常工作。如果我绕过 twemproxy 并使用 连接redis-cli -c -h 127.0.0.1 -p 7001,我可以看到自动转发发生。像这样;

参考

Redis 集群规范

在 code.hoosuite.com 上有趣的阅读关于 twemproxy 的使用(大约在页面的一半)

终极目标

我的最终目标是使用 redis 集群在负载均衡器后面的多个 Web 服务器上存储 PHP 会话数据。在php.ini我将拥有session.save_handler = redissession.save_path = tcp://127.0.0.1:22121(twemproxy 实例将在每个 Web 服务器上运行)。PHP 会话配置位尚未设置。

我希望我说得通。我是否使用了正确的哈希码?我真的很想看到 twemproxy 回馈OK而不是MOVED

谢谢!

更新

感谢@the-real-bill 的回答,我在两个节点上设置了 redis,标准 redis 运行端口 6380 和哨兵运行端口 16380,一个是主节点,另一个是从节点。看着日志,一切看起来都很好。

我看过predisphpredis

这是我仍然有点不确定的一点,我相信如果有更多的时间我会解决的。查询只能写入主服务器,查询只能从从服务器读取。我们已经让 Sentinel 根据可用性提升其中一个或另一个 - 会话处理程序如何知道它可以写入哪个?当然我需要提供两个IP地址..

0 投票
2 回答
1171 浏览

php - Twitter - twemproxy - memcached - 重试未按预期工作

简单设置:

  • 1 个节点运行 twemproxy (vcache:22122)
  • 2 个运行 memcached (vcache-1, vcache-2) 的节点都在监听 11211

我有以下 twemproxy 配置:

twemproxy 节点可以解析所有主机名。作为测试的一部分,我删除了 vcache-2。理论上,每次尝试与 vcache:22122 交互时,twemproxy 都会联系池中的服务器以促进尝试。但是,如果其中一个缓存节点出现故障,则 twemproxy 应该从池中“自动弹出”它,因此后续请求不会失败。

由应用程序层决定使用 vcache:22122 的失败接口尝试是否是由于基础架构问题,如果是,请重试。但是我发现在重试时,正在使用相同的失败服务器,因此后续尝试不会传递给已知良好的缓存节点(在本例中为 vcache-1),它们仍被传递给弹出的缓存节点(vcache -2)。

这是尝试重试的 php 代码片段:

- 更新 -

链接到在 Github 上打开的问题以获取更多信息:问题 #427

0 投票
1 回答
15419 浏览

redis - 开源 Redis 集群和 Redis labs 企业集群有什么区别?

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

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

其中说 - RLEC 可与任何标准 Redis 客户端一起使用,包括独立的 Redis 客户端和 Redis 集群客户端。

究竟什么是开源 Redis 集群,我该如何使用它?这与独立的 Redis 有什么不同?为什么要在开源版本可用时使用 RELC,仅用于支持?我没有找到任何详细说明差异的来源,因此如果有人使用过其中一种解决方案,请解释为什么选择其中一种。