主服务器地址: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://@192.168.241.113:29418" ]
pushInsteadOf = "ssh://@192.168.241.114:29418"
解决方法:
1.使用了高版本的openssh来生成公私钥,导致jsch解析密钥时出错
使用 ssh-keygen -m PEM -t rsa 重新生成旧格式的key
2.一部分仓能同步,一部分不能,同步失败的仓可能是空仓,只是创建了,没有新增任何代码,手动拷贝即可
解决方法:
为了测试,我在从服务器建了不同的账号,导致有冲突,不得已把从服务器的All-Users.git删了重新同步,但Gerrit页面上没有Plugins的选项,不确定是否是删仓导致的
解决方法:
登陆主从服务器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 ,以节点模式运行系统,没有加似乎也没有问题!
答: 发现不加,从服务器可以进行页面访问,可以添加修改提交等操作,这样信息就不同步了。添加后则不可访问不可提交,可以下载,非常安全。