我对Riak的文档中的这个说明感到担忧:
N = 3仅表示每个数据的三个副本将存储在群集中。也就是说,三个不同的分区/ vnode将接收数据的副本。 无法保证三个副本将转到三个单独的物理节点;但是,内置函数用于确定副本尝试均匀分布数据的位置。
https://docs.basho.com/riak/kv/2.1.3/learn/concepts/replication/#so-what-does-n-3-really-mean
我有一个由6个物理服务器组成的集群,N = 3。我想100%确定一些节点(1或2)的总损失不会丢失任何数据。据我了解上述警告,Riak无法保证。似乎我的数据中有一些(可以说是低)部分可以将所有3个副本存储在同一物理服务器上。
在实践中,这意味着对于足够大的数据集,如果我在单个节点上发生灾难性故障(gremlins吃掉/消磁驱动器或其他东西),我保证完全丢失记录。
是否存在避免此问题的Riak配置?
不幸的混淆现实:我正在使用旧版本的Riak(1.4.12)。
答案 0 :(得分:1)
没有配置可以避免分区在一个物理节点上具有2个或更多副本的可能性极小(尽管群集中有5个以上的节点使得单个节点具有2个以上副本的单个节点的可能性极小划分)。对于您的6节点群集,您在一个物理节点上拥有3个分区副本的可能性极小。
riak-admin命令行工具可以帮助您浏览分区/ vnode。例如,在每个节点上运行riak-admin vnode-status
(http://docs.basho.com/riak/kv/2.1.4/using/admin/riak-admin/#vnode-status)将输出运行该命令的本地节点上运行的所有vnode的状态。如果您在群集中的每个节点上运行它,则确认您的数据是否以令人满意的方式分发。