Gerrit主从分布式部署

目录

    • 数据库配置
    • 从系统配置
    • 主系统配置
    • 用户配置
    • 踩过的坑
      • 1.报错:invalid privatekey: [B@5577dcb3
      • 2.报错:status REJECTED_NONFASTFORWARD
      • 3.主服务器用户新加了key,插件日志显示修改已推送到从服务器,但没有生效
    • 疑问

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 。
Gerrit主从分布式部署_第1张图片

主系统配置

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://@192.168.241.113:29418"]
        pushInsteadOf = "ssh://@192.168.241.114:29418"

踩过的坑

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

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

2.报错:status REJECTED_NONFASTFORWARD

Gerrit主从分布式部署_第3张图片
解决方法:
为了测试,我在从服务器建了不同的账号,导致有冲突,不得已把从服务器的All-Users.git删了重新同步,但Gerrit页面上没有Plugins的选项,不确定是否是删仓导致的
Gerrit主从分布式部署_第4张图片

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 ,以节点模式运行系统,没有加似乎也没有问题!
答: 发现不加,从服务器可以进行页面访问,可以添加修改提交等操作,这样信息就不同步了。添加后则不可访问不可提交,可以下载,非常安全。

你可能感兴趣的:(运维)