我一直在成功地使用ServiceStack PooledRedisClientManager。我现在将Twemproxy添加到mix中,并在单个Ubuntu服务器上运行Twemproxy的4个Redis实例。
这给通过ServiceStack连接到Redis的轻负载测试(100个用户)带来了问题。我尝试了原始的PooledRedisClientManager和BasicRedisClientManager,它们都给了错误无法连接,因为目标机器主动拒绝了
我需要做些什么才能让这两个人和睦相处?这是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失败了。
发布于 2014-01-25 09:09:51
我以前没有使用过双代理,但我会说您的服务器列表是错误的。我不认为你使用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.0命令上使用listen命令告诉twemproxy 侦听服务器上所有可用的网络接口。这意味着双代理将尝试侦听:
当您指定服务器时,服务器配置需要知道它应该连接的实际地址。0.0.0.0没有道理。它需要一个真正的价值。因此,当您使用您想要使用的不同的Redis机器时,每台机器的私有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。不过,如果没有静态分配您的it,则使用主机名可能是值得的。
更新:
正如你刚才所说,你仍有问题,我会提出以下建议:
auto_eject_hosts: true。如果您获得了一些连接,那么当您最终没有连接时,这是因为某些原因导致双代理认为Redis主机有问题,并拒绝它们。
因此,最终当您的ServiceStack客户端连接到双代理时,将不会有任何主机将请求传递给您,您将得到错误的No connection could be made because the target machine actively refused it。您应该阅读关于基准测试的这里的红色文章。
localhost中使用这个时,使用的是BasicRedisClientManager而不是PooledRedisClientManager。https://stackoverflow.com/questions/21345874
复制相似问题