同步日志

    数据组内所有备节点会定期将其他数据节点日志打包下载到本地进行日志回放。同步源并不限于主节点。因为我们期望所有节点的数据版本差距在一个很小的窗口内。当处于这个窗口内时,所有备节点向主节点同步数据。但是当某些节点的数据版本与主节点相差过大时,则选择其他备节点进行同步。当发生版本冲突时,以当前主节点数据版本为准。如果冲突不能解决则进入全量同步。当组内不存在主节点时,同步无法进行。

    • 宕机重启。
    • 节点数据版本与其他节点相差过大。
    • 数据不一致并且无法修复。

    发生全量同步的节点会清空本地所有数据及日志,同时将组内另一个节点(不限于主节点)的数据全部复制到本地。期间同步源发生的数据改变同样会被复制到本地。全量同步期间本节点对外不提供服务。当组内不存在主节点时,全量同步无法进行。全量同步会极大地影响整个组的性能,甚至导致其他备节点同步性能降低。建议通过增加分区及日志容量来避免全量同步。

    • 进入该节点目录,删除replicalog 目录。
    1. $ cd /opt/sequoiadb/database/data/11820
    2. $ rm -rf replicalog/
    • 进入该节点的配置文件所在位置,重新配置参数。将logfilesz 设为70, logfilenum设为30。如果没有 logfilesz 和 logfilenum ,请添加logfilesz =70, logfilenum =30这两行。
    1. ...
    2. logfilesz=70
    3. logfilenum=30
    • 重新启动节点。
    • 连接协调节点11810,使用快照查看节点11820的配置参数。
    1. > var db=new Sdb("localhost",11810)
    2. > db.snapshot(SDB_SNAP_CONFIGS,{"svcname":"11820"},{"logfilesz":"","logfilenum":""})
    3. {
    4. "logfilesz": 70,
    5. "logfilenum": 30