我在我的服务器上运行3个redis-server实例,实例有不同的配置文件和db文件.例如:redis1将db位置设置为/ var/lib/redis_1,redis2将db位置设置为/ var/lib/redis_2.我有twemproxy配置:
alpha: listen: 0.0.0.0:9999 redis: true hash: fnv1a_64 distribution: ketama auto_eject_hosts: true server_retry_timeout: 2000 server_failure_limit: 2 servers: - 127.0.0.1:6381:1 - 127.0.0.1:6382:1 - 127.0.0.1:6383:1
我启动了3个redis实例,并将数据"name"分别设置为redis-cli的不同值.例如:我将名称设置为"6381"到第一个服务器,将"6382"设置为第二个服务器.我打开db文件dump.rdb,看到3个数据值,然后启动twemproxy.
当我用redis-cli连接twemproxy并读取"name"键时,它总是返回"6382".如果我使用不同的客户端连接到它,值仍然是相同的.如果我直接在Redis instabces中更改值,或者对twemproxy实例执行任何其他操作,我发现更改只更新到第二个db文件/var/lib/redis_2/dump.rdb.
为什么twemproxy不能与3个redis-server实例一起使用?我的配置有什么问题吗?
我认为你对twemproxy如何工作有误解.我将解释您的测试中发生了什么,以及如何验证twemproxy是否正在连接到每个实例.
Twemproxy将使用散列来对密钥空间进行分区,并将其划分为您为其配置的三个实例.这意味着'name'的键将映射到一个且只有一个服务器.Twoemproxy不使用条带化将数据放在所有节点上,只有一个.
在你的情况下,'name'映射到在端口6382上运行的实例.Twemproxy计算签名并使用ketama分发机制(根据你的配置)来确定哪个实例应该拥有'name,然后在你为get做时查询该实例' name',直接返回存储在其中的值.
要验证twemproxy是否连接到每个实例,您可以设置一系列键,然后直接查询每个Redis实例.但是,如果直接查询,可以使用info命令查看连接和操作统计信息.
我现在不记得twemproxy在启动时是否连接到Redis实例.我认为确实如此.如果是,您可以在步骤2之后检查连接统计数据.我会先尝试这个.
总结:这不是你的配置,而是你对应该发生的事情的理解.如果上述解释没有为您解释,请告诉我,我会澄清/扩大答案.
干杯
归档时间: |
|
查看次数: |
2480 次 |
最近记录: |