为什么Riak只在一个节点上存储我的所有文档? n_val等于3

时间:2014-03-12 22:03:04

标签: erlang riak

我在EC2服务器上使用Riak 2.0pre11构建了一个5节点集群。安装了Riak,让它工作,然后使用bash脚本在另外4台服务器上重复相同的操作。那时我在节点2到5上使用了riak-admin cluster join riak@node1.example.com来形成一个集群。

使用Python Riak客户端,我编写了一个脚本,将10,000个文档发送给Riak。工作正常,我可以编写另一个脚本来检索一个工作正常的文档。除了指定使用protobufs之外,我还没有在存储密钥时指定任何其他选项。我通过与node1的连接存储了所有文档。

然而,Riak似乎将所有3个副本存储在同一节点上,换句话说,node1上使用的存储大约是原始HTML文档的3倍。

连接到节点1的脚本,即存储所有文档的位置。我更改了脚本以连接到节点2并再发送10,000个,这些也都在节点1中结束。我使用命令du -h /data/riak/bitcask来验证对象的聚合存储大小。在节点2到4上,只有几个K是空Bitcask数据存储的开销。

对于每个文档,我指定了与此类似的键

http://www.example.com/blogstore/007529.html4787somehash4787947:2014-03-12T19:14:32.887951Z

所有键的第一部分都是相同的(测试),只有.html名称和ISO 8601时间戳不同。有可能我以某种方式颠覆了完美的散列函数吗?

基本上我使用的是默认配置。可能有什么不对?由于Riak 2.0使用不同的配置格式,因此以旧格式生成riak-core配置的片段:

{riak_core,
 [{enable_consensus,false},
  {platform_log_dir,"/var/log/riak"},
  {platform_lib_dir,"/usr/lib/riak/lib"},
  {platform_etc_dir,"/etc/riak"},
  {platform_data_dir,"/var/lib/riak"},
  {platform_bin_dir,"/usr/sbin"},
  {dtrace_support,false},
  {handoff_port,8099},
  {ring_state_dir,"/datapool/riak/ring"},
  {handoff_concurrency,2},
  {ring_creation_size,64},
  {default_bucket_props,
      [{n_val,3},
       {last_write_wins,false},
       {allow_mult,true},
       {basic_quorum,false},
       {notfound_ok,true},
       {rw,quorum},
       {dw,quorum},
       {pw,0},
       {w,quorum},
       {r,quorum},
       {pr,0}]}]}

1 个答案:

答案 0 :(得分:2)

如果bitcask目录仅在单个节点上增长,则听起来节点可能没有进行通信。请运行riak-admin member-status以验证群集中的所有节点是否都处于活动状态。

在加入群集的所有节点上发布riak-admin cluster join <node>命令后,您还需要运行riak-admin cluster plan以验证计划是否正确,然后再使用riak-admin cluster commit提交。这些命令are described in greater detail here.