数据复制组进阶
【数据可靠性】
巨杉数据库集群,如果采用多副本的部署方式。则同一个复制组之间会进行数据同步。数据同步是一个后台任务,对用户透明。备节点会定时读取主节点的事务日志,进行数据同步。
但是天灾人祸总是不可避免的,比如机房断电,系统崩溃等情况。可能会导致主节点所在机器宕机,那么如果在这时候主节点中刚好有插入数据的动作,恰巧所有备节点都没有同步最新的数据。主节点宕机后,备节点重新选主。在主节点宕机期间,如果有新数据插入,新的主节点的LSN会更新。在原来主节点恢复正常之后,发现他的数据不是最新的,所以新的主节点会继续当主。这时候就出现一个问题,原来主节点宕机前新插入并且未同步的数据可能会丢失。
【实践】
对于上述可能存在的数据风险,可以在创建集合(表)时来避免。
我们建议在创建集合时,指定集合属性:ReplSize为2。写操作发生时,两个副本写入成功才会返回成功,即保证在任意时刻,数据库中有两份完整的数据副本。
这样就可以大大降低上述问题发生的可能性。
【参数详解】
ReplSize
上述的解决方式中,用到了ReplSize参数,这个参数具体是用来做什么的呢?
ReplSize: 写操作需要同步的副本数。
取值范围:-1~7
取值意义:
-1,表示写请求需同步到该复制组若干活跃的节点之后,数据库写操作才返回应答给客户端。
0,表示写请求需同步到该复制组的所有节点之后,数据库写操作才返回应答给客户端。
1~7,表示写请求需同步到该复制组指定个数的节点之后,数据库写操作才返回应答给客户端。
解释:
-1,数据的写请求需要在当前存活的所有副本写入成功后才会返回;
0,数据的写请求在一个副本写入成功后就会返回;
ReplSize越大,复制组中的数据一致性强度越高,但是会降低数据库性能,不建议设置太大。
在不考虑外界因素的情况下,ReplSize为0,-1或者设置为副本数可实现数据的强一致。
需要注意的是,如果ReplSize取其他值,虽然在某些时刻,数据组中节点的数据可能不一致,但最终是一致的。
欢迎大家下载使用巨杉数据库:
http://download.sequoiadb.com/cn/