geo-replication

  • 启动gsync
    glusterd_start_gsync

    • 检测gsync运行状态:gsync_status
    • 添加命令参数:runner_add_args
    • 调用shell脚本来运行python代码进行异地备份:runner_start:execvp (runner->argv[0], runner->argv);
  • 资源启动

    • 检查链接:local.can_connect_to(remote)
    • 创建链接: connect---->inhibit
    • 创建临时目录: margv = self.make_mount_argv(*a)
    • 启动agent---->创建线程:repce.service_loop()
    • 启动monitor
  • 核心函数crawl,进行数据同步

    • 唤醒机制:changlog或者synchronizes stime(现在使用的方式是changlog)
    • 同步核心逻辑在Xcrawl中

    dem = self.master.server.entries(path) //获取volume根目录的entries,也就是所有的文件
    通过比较该文件的xtime与slave的xtime,判断是否进行同步
    如果是dir文件:递归调用

  • 异地同步机制

    • 主要是三个函数在不停的循环:crawlwrap crawl process
    • crawlwrap 会循环查询,现在truns 与 上次truns的差值

    如果是0,continue;
    否则,就会唤醒crawl进行数据同步
    - crawl 上面已经讲过
    - process会循环查看changlog,看是否有文件操作,如果有就对truns进行 ++操作(还有一些其他操作,不影响主流程)

你可能感兴趣的:(geo-replication)