我在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}]}]}
答案 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.。