Gerrit-Replication工作原理

简介

Gerrit 是一款code review 开源软件,在集群化的大趋势下,master 与 slave 之间的同步工作,就是根据 Gerrit 的插件 replication.jar 完成的。
​ /gerrit-site/etc/replication.config 是一个 Git 风格的配置文件,它控制着 replication 插件运行的方式。

​ 文件内容由一个或多个 remote 部分组成,每个remote 又包含一个或多个目标URL的常规配置。

​ 在进行 replication 操作是,每个 remote 使用各自独立的线程池,这样设计的获益良多,灵活度高。例如用户可以根据不同的网络连接类型,将URL集合归类,LAN 和 Public Internet 可以分开放在不同的remote里。

配置参数举例

列举几个配置项

gerrit.sshCommandTimeout: 执行命令的超时设置。默认值为0,没有超时限制。

gerrit.sshConnectionTimeout :ssh 连接的超时时间,默认值为 2 分钟。设置 0 则没有超时限制。

remote.NAME.receivepack : 默认值 ‘git-reveive-pack’

remote.NAME.uploadpack : 默认值 ‘git-upload-pack’

remote.NAME.push:表示要同步的,设置为 +refs/heads/:refs/heads/ * 将会同步active的分支代码,而不是refs/changes/下的 change 或 refs/tags/下的 tag

remote.NAME.timeout:远端无响应后最大等待时长;默认为0,无限期等待

remote.NAME.replicationDelay :gerrit 特有设置,等待多长时间后开始进行远端push,0表示立即开始,默认是15秒

启动前准备

开启前确保~/.ssh/known_host中有remote机器的key,

如果仅运行一次replication,则最快捷的添加 host key的方法:

sudo su -c 'ssh mirror1.us.some.org echo' gerrit2

注意:本地的用户 ssh key设置生成的格式是PEM,方法:

ssh-keygen -m PEM -t rsa -C "your_email@example.com"
replication 配置格式
  [remote "host-one"]
    url = gerrit2@host-one.example.com:/some/path/${name}.git

  [remote "pubmirror"]
    url = mirror1.us.some.org:/pub/git/${name}.git
    url = mirror2.us.some.org:/pub/git/${name}.git
    url = mirror3.us.some.org:/pub/git/${name}.git
    push = +refs/heads/*:refs/heads/*
    push = +refs/tags/*:refs/tags/*
    threads = 3
    authGroup = Public Mirror Group
    authGroup = Second Public Mirror Group
replication 配置热加载
ssh -p 29418 gerrit@localhost gerrit plugin reload replication
replication 手动触发方式
ssh -p @SSH_PORT@ @SSH_HOST@ @PLUGIN@ start
  [--now]
  [--wait]
  {--url <PATTERN> | [--url <PATTERN>] --all | [--url <PATTERN>] <PROJECT PATTERN> ...}

–now : Start replicating right away without waiting the per remote replication delay.

–wait : Wait for replication to finish before exiting.

–all : Schedule replication for all projects.

–url : 包含 PATTEN 的 URL 节点. 适用于给某个特定的节点进行备份,例如新增的节点。

  • #同步所有 project
    $ ssh -p @SSH_PORT@ @SSH_HOST@ @PLUGIN@ start --all
    
    # 只同步到 srv02
    $ ssh -p @SSH_PORT@ @SSH_HOST@ @PLUGIN@ start --url srv2 --all
    
    # 同步到 slave1 上名称包含 vendor 的文件夹
    $ ssh -p @SSH_PORT@ @SSH_HOST@ @PLUGIN@ start --url slave1 ^(|.*/)vendor(|/.*)
    
    # 同步到一个指定的目标 URL
    $ ssh -p @SSH_PORT@ @SSH_HOST@ @PLUGIN@ start --url https://example.com/tools/gerrit.git
    
  • ​ 线上实际操作举例

    $ ssh -p 29418 gerrit@localhost replication start --url upgrade --all 
    # 查看备份log,确认 remote 为 upgrade 的 5 台机器是否开始全量同步
    
replication.config 示例
[remote "slave01"]
  adminUrl = ssh://create-idc04/home/work/hdd1/git/code/miui/${name}.git
  adminUrl = ssh://create-idc07/home/work/gerrit/repositories/miui/${name}.git
  adminUrl = ssh://create-idc08/home/work/repositories/miui/${name}.git
  url = git://10.172.xx.xx/miui/${name}.git
  url = git://10.142.xx.xx/miui/${name}.git
  url = git://10.142.xx.xx/miui/${name}.git
  push = +refs/*:refs/*
  threads = 12
  mirror = true
  timeout = 50
  replicationDelay = 2
[remote "slave02"]
  adminUrl = ssh://create-nanjing103/home/work/git/code/miui/${name}.git
  adminUrl = ssh://create-nanjing113/home/work/git/code/miui/${name}.git
  url = git://10.234.xx.xx/miui/${name}.git
  url = git://10.234.xx.xx/miui/${name}.git
  push = +refs/*:refs/*
  timeout = 50
  threads = 8
  mirror = true
  replicationDelay = 2
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值