咱们运营一年的Riak集群,也由于业务变动而被停运了,可是在这运营的期间内总结了一些经验,记录在这。node
首先先介绍下咱们的业务场景,咱们将Riak做为日志存储服务器来使用。bucket以日志的来源加日期来表示,每一个key以来源特征字段加毫秒数来表示。每一个kv的大小不超过2KB,峰值写入不超过10000TPS。服务器
咱们的目标是保存一年的日志,咱们一天产生的日志约1G左右,一年约370G。咱们选择的NRW参数分别为5,3,3,也就表明着咱们将数据存5份,写入3份就认为成功,每次至少读出3个节点才算读取成功,这样R + W > N保持了数据一致性。也就是说每份数据在5台服务器上占用存储空间,这个5台服务器准许2台服务器当机。网络
好了,那让咱们算一算咱们须要多少网络传输能力。整个集群要承担最大10000TPS的写入,在N等于5的时候,W等于3的时候,极端状况下整个集群中有3台机器的瞬间写入是10000TPS。当数据为2KB的时候,表明瞬间须要产生了2KB * 10000 * 2 = 40MB/s的同步数据,2KB * 10000 = 20MB/s的写入数据,因此网络至少要60MB/s * 8 = 480mbps的传输能力。异步
咱们使用的硬件,每台服务器配备了2块系统盘,4块600G的SAS数据盘组成Raid10,64G内存,1Gpbs的双网卡和24Core的CPU。硬件上咱们已经能够保证了网络传输,和存储的空间。若是咱们选择5个节点,彻底能够知足咱们的需求。若是咱们选择5个节点以上会有什么好处,增长了咱们允许当机的服务器数量,减小同步写入在单台服务器上产生高TPS的几率。根据实际测量,咱们的Riak节点单是能承受10000TPS,并且咱们的日志并不是重要业务,因此咱们选择了5节点。在vnode上的选择咱们选择的是128,每一个物理服务器承载25个vnode,至关于370GB/25 = 15GB,每一个vnode承载15GB的数据存储,减小部分文件写入过热的状况。同时选择128节点的vnode也是便于咱们迁移到更多节点上作准备。那么咱们为何不选择更高的vnode数,例如说256,若是咱们选择256至关于每台有51个vnode,每一个vnode承载370G/51 = 7GB,这样虽然减少了部分文件写入过热的状况,可是咱们的CPU只有24Core同时又是IO操做,咱们但愿每一个IO操做都有一个异步线程可用,所以咱们选择了128。spa