1.什么是全量同步?
SequoiaDB 通过使用远程复制功能,维护了数据的多个副本,即副本集。一个副本集是有助于防止数据库停机的、完全自我修复的分片。副本故障转移是完全自动,不需要管理员手动干预。一般来说,一个包含多个节点的分片构成一个副本集。
在主副本上修改数据的操作会通过一个日志复制到从副本上,这个日志也叫做事务日志。这些事务日志包含了主副本中全部的数据操作,将会在从副本上重做。事务日志的大小是可配置的。如果一个从副本停机时间比事务日志保存的时间还要长,那么从副本必须要使用全量同步过程从主副本恢复。在全量同步过程中,所有的数据库和集合以及事务日志都会从主副本或者其他副本复制到这个从副本上,还会生成索引。在向副本集中加入一个新副本时,也需要执行全量同步过程。
2.如何判断是否在做全量同步?
以SDB 2.8版本为例,如果要看某个数据节点是否在做全量同步,可以直连到此数据节点,然后查看 SDB_SNAP_DATABASE 的内容。举例如下:
var data = new Sdb("sdbserver2", 12810)
data.snapshot(SDB_SNAP_DATABASE)
{
"NodeName": "sdbserver2:12810",
"HostName": "sdbserver2",
"ServiceName": "12810",
"GroupName": "datagroup1",
"IsPrimary": false,
"ServiceStatus": false,
"Status": "FullSync",
......
上面代码显示
"ServiceStatus": false,
"Status": "FullSync",
明确表示此节点当前正在做全量同步,不能对外提供服务。