我在三节点Disque集群上遇到复制问题,看起来很奇怪,因为用例非常典型,所以我完全有可能做错了。
这是如何在本地重现它:
# relevant disque info
disque_version:1.0-rc1
disque_git_sha1:0192ba7e
disque_git_dirty:0
disque_build_id:b02910aa5c47590a
在端口9001,9002和9003中启动3个disque节点,然后让端口9002和9003上的服务器与9001相遇。
127.0.0.1:9002> CLUSTER MEET 127.0.0.1 9001 #=> OK
127.0.0.1:9003> CLUSTER MEET 127.0.0.1 9001 #=> OK
HELLO
报告所有三个节点的相同数据,如预期的那样。
127.0.0.1:9003> hello
1) (integer) 1
2) "e93cbbd17ad12369dd2066a55f9d4c51be9c93dd"
3) 1) "b61c63e8fd0c67544f895f5d045aa832ccb47e08"
2) "127.0.0.1"
3) "9001"
4) "1"
4) 1) "b32eb6501e272a06d4c20a1459260ceba658b5cd"
2) "127.0.0.1"
3) "9002"
4) "1"
5) 1) "e93cbbd17ad12369dd2066a55f9d4c51be9c93dd"
2) "127.0.0.1"
3) "9003"
4) "1"
将作业排队成功,但作业未显示在其他节点中的QLEN
或QPEEK
上。
127.0.0.1:9001> addjob myqueue body 1 #=> D-b61c63e8-IFA29ufvL37FRVjVVWisbO/x-05a1
127.0.0.1:9001> qlen myqueue #=> 1
127.0.0.1:9002> qlen myqueue #=> 0
127.0.0.1:9002> qpeek myqueue 1 #=> (empty list or set)
127.0.0.1:9003> qlen myqueue #=> 0
127.0.0.1:9003> qpeek myqueue 1 #=> (empty list or set)
当显式设置复制值高于节点数量时,disque会失败,并且正如预期的那样NOREPL
,显式复制级别为2成功,但是在节点9002中仍然无法看到作业无论我在哪个节点添加作业,都会发生相同的行为。
我的理解是复制在调用ADDJOB
时同步发生(除非明确使用ASYNC
),但它似乎没有正常工作,测试套件正在传递{{1}分支所以我在这里碰壁,必须深入挖掘源代码,非常感谢任何帮助!
答案 0 :(得分:0)
作业被复制,但它只在一个节点中排队。尝试终止第一个节点以查看排队的作业。