我有一个RF=3的NoSQL集群。这意味着,当2或3个节点同时关闭时,某些数据(其所有副本都属于故障节点(将变得不可用。
虽然集群大小约为10个节点,但2个节点同时宕机的可能性是可接受的低。但有了1000个节点,这是不可能的。我们拥有的节点越多,任何恒定数量(等于RF(的节点下降的可能性就越大。
问题是:在集群中实例数量不断增加的情况下,丢失任何数据的几率始终较低的一般方法是什么?
附言:当然不存在绝对同时发生的事件;同时";我的意思是";在短时间内不能将该数据流式传输到新节点";。
大多数NoSQL系统都是基于以下概念开发的:
- 布隆过滤器
- 文件系统
- 备份策略
- 复制因子
由于您担心同时丢失节点,因此始终存在从快照/文件系统或Bloom Filters等定义的数据重建策略
上述概念适用于Cassandra/MongoDB/elasticSearch等
启动的领导和监控工具将处理角落场景。您可能无法重建丢失的完整数据。但是,它可以在节点关闭前5分钟捕获任何数据[默认AWS快照到S3捕获每5分钟运行一次]