-
节点之间,通过事务日志进行副本间的数据同步。
-
事务日志文件存在于节点数据目录下的 replicalog 目录。例如,节点的数据目录为 /opt/sequoiadb/database/data/11830:
-
$ ls -l /opt/sequoiadb/database/data/11830/replicalog -rwx------ 1 sdbadmin sdbadmin_group 67174400 3月 11 12:50 sequoiadbLog.0 -rwx------ 1 sdbadmin sdbadmin_group 67174400 3月 11 12:49 sequoiadbLog.1 -rwx------ 1 sdbadmin sdbadmin_group 67174400 3月 11 12:49 sequoiadbLog.2 -rwx------ 1 sdbadmin sdbadmin_group 67174400 3月 11 12:49 sequoiadbLog.3 -rwx------ 1 sdbadmin sdbadmin_group 67174400 3月 11 12:49 sequoiadbLog.4 -rwx------ 1 sdbadmin sdbadmin_group 67174400 3月 11 12:49 sequoiadbLog.5 -rwx------ 1 sdbadmin sdbadmin_group 67174400 3月 11 12:49 sequoiadbLog.6 -rwx------ 1 sdbadmin sdbadmin_group 69632 3月 11 12:49 sequoiadbLog.meta
-
当节点首次被启动时,节点进程会生成以上的 replicalog 文件。文件的大小和个数可以通过 logfilesz 和 logfilenum 参数分别进行设置。默认日志文件大小为 64MB(不包括头大小),日志个数是 20 个。
-
用户可以通过 sdbdpsdump 工具查看到写入的事务日志。例如,插入一条记录,用工具查看事务日志:
> db.sample.employee.insert( { a: 1 } )
./bin/sdbdpsdump -s ./database/data/11830/replicalog
...
Version: 0x00000001(1)
LSN : 0x00000000000000ec(236)
PreLSN : 0x000000000000009c(156)
Length : 80
Type : INSERT(1)
FullName : sample.employee
Insert : { "_id": { "$oid": "5c88afe31a3f5822754040d0" } , "a": 1 }
-
LSN 是指该条日志在日志文件中的偏移,每条事务日志都对应唯一的 LSN 号。
-
日志是循环写入文件的。当最后一个日志文件写满时,下一条事务日志会从第一个日志文件开始写,第一个文件之前的日志会被覆盖掉。
相关阅读