gpt4 book ai didi

redis - 将 ServiceStack Redis 与 Twemproxy 结合使用

转载 作者:IT王子 更新时间:2023-10-29 06:05:42 26 4
gpt4 key购买 nike

我一直在成功使用 ServiceStack PooledRedisClientManager。我现在正在将 Twemproxy 添加到组合中,并在单个 Ubuntu 服务器上运行 4 个以 Twemproxy 为前端的 Redis 实例。

这导致轻负载测试(100 个用户)通过 ServiceStack 连接到 Redis 时出现问题。我已经尝试了原始的 PooledRedisClientManager 和 BasicRedisClientManager,两者都给出了错误No connection could be because the target machine actively refused it

我需要做些什么才能让这两个人一起玩得开心吗?这是 Twemproxy 配置

alpha:
listen: 0.0.0.0:12112
hash: fnv1a_64
distribution: ketama
auto_eject_hosts: true
redis: true
timeout: 400
server_retry_timeout: 30000
server_failure_limit: 3
server_connections: 1000
servers:
- 0.0.0.0:6379:1
- 0.0.0.0:6380:1
- 0.0.0.0:6381:1
- 0.0.0.0:6382:1

我可以单独连接到每个 Redis 服务器实例,只是无法通过 Twemproxy。

最佳答案

我之前没有使用过 twemproxy,但我会说你的服务器列表是错误的。我不认为你在使用 0.0.0.0正确。

您的服务器需要(用于本地测试):

servers:
- 127.0.0.1:6379:1
- 127.0.0.1:6380:1
- 127.0.0.1:6381:1
- 127.0.0.1:6382:1

您使用 0.0.0.0listen 上命令告诉 twemproxy 监听服务器上所有可用的网络接口(interface)。这意味着 twemproxy 将尝试监听:

  • 环回地址 127.0.0.1 (localhost),
  • 在您的私有(private) IP 上(即 192.168.0.1)和
  • 在您的公共(public) IP 上(即 134.xxx.50.34)

当您指定服务器时,服务器配置需要知道它应该连接的实际地址。 0.0.0.0没有意义。它需要一个真正的值(value)。所以当你来使用不同的Redis机器时你会想要使用,每台机器的私有(private)IP是这样的:

servers:
- 192.168.0.10:6379:1
- 192.168.0.13:6379:1
- 192.168.0.14:6379:1
- 192.168.0.27:6379:1

显然您的 IP 地址会有所不同。您可以使用 ifconfig确定每台机器上的IP。如果您的 IP 不是静态分配的,则可能值得使用主机名。


更新:

正如您所说,您仍然遇到问题,我会提出以下建议:

  1. 删除 auto_eject_hosts: true .如果你获得了一些连接,那么一段时间后你最终没有连接,这是因为某些东西导致 twemproxy 认为 Redis 主机有问题并拒绝它们。

    因此,最终当您的 ServiceStack 客户端连接到 twemproxy 时,将没有主机可以将请求传递到,您会收到错误 No connection could be made because the target machine actively refused it .

  2. 您是否真的有足够的 RAM 来以这种方式对您的本地计算机进行压力测试?您正在运行至少 4 个 Redis 实例,它们需要实际内存来存储值,twemproxy 消耗大量内存来缓冲它传递给 Redis 的请求,这个内存池永远不会被释放,see here for more information .您的 ServiceStack 应用程序将消耗内存 - 在 Debug模式下更是如此。您可能会打开 Visual Studio 或其他 IDE、压力测试应用程序和您的操作系统。最重要的是,您可能还没有关闭后台进程和其他应用程序。

    A good practice is to try to run tests on isolated hardware as far as possible. If it is not possible, then the system must be monitored to check the benchmark is not impacted by some external activity.

    您应该阅读 Redis article here关于基准测试。

  3. 因为您在 localhost 中使用它情况使用 BasicRedisClientManager不是 PooledRedisClientManager .

关于redis - 将 ServiceStack Redis 与 Twemproxy 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21345874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com