只有1/3节点失败后,Riak-CS集群才会崩溃!您提供的AWS访问密钥ID不存在于我们的记录

时间:2015-10-21 11:08:48

标签: riak riak-cs

我已经在沙箱中创建了3节点Riak-CS集群,创建了存储桶,上传了一些文件,并且它们在节点之间进行了复制(我希望智能算法将文件主要放在物理上不同的节点上的分区中)。 v_node = 2,默认情况下为其他副本配置。

现在我尝试三个节点中的一个失败时的情况。我刚刚在一个节点上停止了riak和riak-cs服务,并从其余节点获取了这些服务:

s3cmd la s3://
ERROR: S3 error: 403 (InvalidAccessKeyId): The AWS Access Key Id you provided does not exist in our records.

假设一个节点发生故障,群集仍可运行,不是吗? 此外,我尝试将失败的节点标记为Down,以确保群集状态收敛,但这并没有帮助。

1 个答案:

答案 0 :(得分:2)

如果您已将n_val设置为2,则每个键只有2个副本。当您关闭一个节点时,其中一小部分(大约50%)密钥的副本将变为不可用。

查看get_user_with_pbc function的来源,首先尝试使用strong_get_user_with_pbc function 获取用户记录的强大选项是{pr,all}, {r,all}, {notfound_ok,false}。 PR = all表示get请求将提前失败,除非两个主要vnode都可用。如果您的某个副本不可用,则会因预期pr_val_unsatisfied而失败。

如果强选项失败,则使用弱选项{r, quorum}, {pr, one}, {notfound_ok,false}重试weak_get_user_with_pbc function。仲裁意味着(n_val/2 + 1),在这种情况下为2.
因此,这仍然需要一个主要的vnode可用,但我们还必须从法定数量的vnode获得响应,在这种情况下,主要和回退。如果该节点刚刚失败,则第一个请求将发现回退为空,因此get请求从回退vnode接收到未发现的消息,并从主要用户接收用户记录。由于选项包括notfound_ok=false,因此当法定数为2时,这是1个有效响应,因此请求失败。

后续查询可能会成功完成,因为在第一次请求后,回读将由读取修复填充。

我认为你会在Riak和Riak CS中发现很多东西,如果你将n_val减少到3以下,它似乎不能正常工作。例如,如果你把n_val保持在3,那么法定人数是多少3个vnode是2,如果其中一个主要版本处于脱机状态并且还没有填充回退,你仍然可以对弱选项做出有效响应。