我们运营一年的Riak集群,也因为业务变更而被停运了,但是在这运营的期间内总结了一些经验,记录在这。

首先先介绍下我们的业务场景,我们将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。


05-18 02:58