Gerrit主从分布式部署


Gerrit分布式部署,是利用了gerrit的replication插件,实现了主从系统的搭建。其中主服务器可以用于正常的系统服务,而从服务器只能提供代码拉取服务,不可推送代码。从服务器只同步了git库的内容,没有同步index、data、db、etc等重要目录的内容,因此不适合做完整的数据备份。

主服务器地址:192.168.241.113
从服务器地址:192.168.241.114

数据库配置

Gerrit主从系统没有强制要求另起一个数据库,Gerrit3.x后都是使用了noteDB这种文件数据库。针对数据库的操作可以不处理,毕竟从服务器不用于推送代码。

从系统配置

1、在运行gerrit用户的 ~/.ssh/authorized_keys 文件中写入主系统服务器的ssh公钥(主服务器的 ~/.ssh/id_rsa.pub 内容,若没有可以用 ssh-keygen -t rsa 生成),添加用户信任,使得主节点可以直接ssh访问从节点,以便主节点可以push代码至从节点。

2、$site_path/etc/gerrit.config 中加一行 slave = true 。
在这里插入图片描述

主系统配置

1、确认安装了【Replication】插件,gerrit -> BROWSE -> Plugins 是否显示 replication,3.x版本会默认安装。

2、编写配置文件 ~/.ssh/config

Host *
    IdentityFile ~/.ssh/id_rsa
    PreferredAuthentications publickey

3、编写配置文件 $site_path/etc/replication.config:

#主从服务器gerrit启动用户不同时,url里建议指定用户
[remote "test"]
    url = ssh://gerrit@192.168.241.114/home/gerrit/review_site/git/${name}.git
    replicateProjectDeletions = true
    mirror = true
    replicationDelay = 1

其他参数可参考文档:
https://gerrit-documentation.storage.googleapis.com/Documentation/3.1.3/config-gerrit.html#accountPatchReviewDb.url

4、重启系统加载插件生效或者重新加载插件:

# 重启系统
sh $site_path/bin/gerrit.sh restart
# 重新加载插件
ssh -p 29418 admin@192.168.241.113 gerrit plugin reload replication
# 启动同步任务
ssh -p 29418 admin@localhost replication start --all
#同步aa仓
ssh -p 29418 admin@localhost replication start aa

5、主服务器会自动同步数据到从服务器
详细信息可查看插件日志:$site_path/logs/replication_log
若没有插件日志,可查看 $site_path/logs/error_log 中插件是否启动失败

用户配置

用户通过配置 ~/.gitconfig 文件来实现代码上传和下载分流
即:git clone 114时,从114下载,上传到113,可下载后用 git remote -v 查看

[url "ssh://<username>@192.168.241.113:29418"]
        pushInsteadOf = "ssh://<username>@192.168.241.114:29418"

踩过的坑

1.报错:invalid privatekey: [B@5577dcb3

在这里插入图片描述
解决方法:
1.使用了高版本的openssh来生成公私钥,导致jsch解析密钥时出错
使用 ssh-keygen -m PEM -t rsa 重新生成旧格式的key
2.一部分仓能同步,一部分不能,同步失败的仓可能是空仓,只是创建了,没有新增任何代码,手动拷贝即可

2.报错:status REJECTED_NONFASTFORWARD

在这里插入图片描述
解决方法:
为了测试,我在从服务器建了不同的账号,导致有冲突,不得已把从服务器的All-Users.git删了重新同步,但Gerrit页面上没有Plugins的选项,不确定是否是删仓导致的
在这里插入图片描述

3.主服务器用户新加了key,插件日志显示修改已推送到从服务器,但没有生效

解决方法:
登陆主从服务器gerrit.basePath,查看修改仓a.git/refs/meta/config文件中的值是否一致,不一致则刷新下从服务器的缓存

ssh -p 29418 admin@192.168.241.114 gerrit flush-caches --all

疑问

1.所有修改,如新增用户、新增仓等,同步后,从服务器页面并不显示!

2.有的博客说需要在从服务器 $site_path/etc/gerrit.config 文件中设置 container.slave=true ,以节点模式运行系统,没有加似乎也没有问题!
答: 发现不加,从服务器可以进行页面访问,可以添加修改提交等操作,这样信息就不同步了。添加后则不可访问不可提交,可以下载,非常安全。

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值