技术分享
Gerrit安装与做冷备份实战
2020-08-19
一、描述
1、关于gerrit
Gerrit,是利用网页浏览器,同一个团队的软件程序员,可以相互审阅彼此修改后的程序代码,决定是否能够提交,退回或者继续修改。Gerrit实际上底层是一个Git服务器,它为在其服务器上托管的Git仓库提供一系列权限控制,以及一个用来做Code Review是Web前台页面。当然,其主要功能就是用来做Code Review。架构如图(图来自网络):
另外gerrit是java开发,因此部署时需要有jdk环境。
2、本次实战
本次实战的背景,主要是因为公司日常通过gerrit进行代码管理与审计;由于业务逻辑多,代码库也比较多,依赖gerrit系统,gerrit基于公司域环境(lday)统一认证用户权限;目前只有一套在使用,考虑到如果这台gerrit代码管理系统岩机不可用时,就无法对代码进行有效管理,影响业务的开发与上线进度,因此需要提高gerrit可用性,又由于gerrit使用频繁,团队都在使用,不能中断,因此做主从,改动较大,最终决定做一个冷备,方案如下:
gerrit的配置(除gerrit本身安装后生成的文件,及etc外)通过lsyncd(rsync)实时增量同步到做冷备的新部署的gerrit上,
当现有的gerrit不可用时,启用冷备gerrit.因此我们需要先部署一套新的gerrit ,线上gerrit使用2.13.1,因此冷备份的gerrit 版本用2.13.11 保障大版本一致即可。
3、实战环境
CentOS6.x X64 / CentOS7.x
jdk version "1.8.0_171"
gerrit 2.13.11
ip 172.16.0.185
二、gerrit安装部署
1、下载安装
2、安装jdk
由于gerrit是基于java开发的,因此我们需要安装java这里安装版本如下:
[git@gerrit_backup_185 gerrit_site]$ java -version
java version "1.8.0_171"
请到官方下载jdk这里使用jdk-8u171-linux-x64.rpm;据说openjdk也可以,我没有试!
3、添加git系统账号
# useradd git # yum install epel-release -y # yum install ca-certificates -y # rpm -ivh https://dl.iuscommunity.org/pub/ius/stable/CentOS/6/x86_64/ius-release-1.0-15.ius.centos6.noarch.rpm #yum install git2u -y #安装最新的git
4、本地host配置
# /etc/hosts配置 172.16.0186 git1.pkey.cn gerrit.pkey.cn #主gerrit上保持一致 172.16.0.185 git2.pkey.cn gerrit2.pkey.cn #新部署冷备的gerrit 172.16.0.26 pkey.local # ldap主机 127.0.0.1 gerrit_backup_185 # 冷备的本地解析
5、安装gerrit
将下载好的gerrit.2.13.11.war 重命名为gerrit.war
安装过程如下:
# cp gerrrit.2.13.11.war gerrit.war # su git [git@gerrit-slave ~]$ mkdir gerrit_site [git@gerrit-slave ~]$ cp gerrit.2.13.11.war /home/git [git@gerrit-slave ~]$ java -jar gerrit.war init -d gerrit_site Using secure store: com.google.gerrit.server.securestore.DefaultSecureStore [2018-11-21 20:04:21,211] [main] INFO com.google.gerrit.server.config.GerritServerConfigProvider : No /home/git/gerrit_site/etc/gerrit.config; assuming defaults *** Gerrit Code Review 2.13.11 *** *** Git Repositories *** Location of Git repositories [git]: *** SQL Database *** Database server type [h2]: *** User Authentication *** Authentication method [OPENID/?]: **?** Supported options are: openid openid_sso http http_ldap client_ssl_cert_ldap ldap ldap_bind custom_extension development_become_any_account oauth Authentication method [OPENID/?]: **ldap** LDAP server [ldap://localhost]: **ldap://pkey.local** LDAP username : **postmaster** Change postmaster's password [y/N]?** y** postmaster's password : confirm password : Account BaseDN [DC=local]: **dc=pkey,dc=local** Group BaseDN [dc=pkey,dc=local]: Enable signed push support [y/N]? **y** Gerrit Code Review is not shipped with Bouncy Castle Crypto Provider v152 ** This library is required for your configuration. ** Download and install it now [Y/n]? **y** Downloading https://repo1.maven.org/maven2/org/bouncycastle/bcprov-jdk15on/1.52/bcprov-jdk15on-1.52.jar ... OK Checksum bcprov-jdk15on-1.52.jar OK Gerrit Code Review is not shipped with Bouncy Castle Crypto OpenPGP v152 ** This library is required for your configuration. ** Download and install it now [Y/n]? ...... 以下省略 ... 省略部分可以y也N, 因为最终所有的重要配置信息会在安装的目录配置文件中如: /home/git/gerrit_site/etc/gerrit.config
至此gerrit基于ldap认证,自带H2数据库就安装好啦,so easy? 关键是要配置才能用不是?
6、gerrit配置
[git@gerrit_backup_185 gerrit_site]$ cat etc/gerrit.config [gerrit] basePath = git serverId = ad163546-8d99-4006-931b-39835fba6b40 canonicalWebUrl = http://gerrit2.pkey.cn:8080/ ########这里是访问这台gerrit的域名做冷备请和主gerrit区分 [database] type = h2 database = /home/git/gerrit_site/db/ReviewDB # 默认自带的H2数据(我们用ldap认证后存入H2) [auth] type = LDAP [ldap] server = ldap://pkey.local username = gerritmaster accountBase = dc=pkey,dc=local groupBase = dc=pkey,dc=local [receive] enableSignedPush = false [sendemail] smtpServer = smtp.pkey.cn smtpUser = gerritmaster@pkey.cn smtpServerPort = 25 smtpPass = PASSWORD, sslVerify = false from=CodeReview<gerritmaster@pkey.cn> [container] user = git javaHome = /usr/java/jdk1.8.0_171-amd64/jre [sshd] listenAddress = 172.16.0.185:29418 [httpd] listenUrl = http://*:8080/ [cache] directory = cache [plugins] allowRemoteAdmin = true
7、启动gerrit服务
[root@gerrit_backup_185 bin]# ./gerrit.sh start Starting Gerrit Code Review: OK [root@gerrit_backup_185 bin]# netstat -tnpl tcp 0 0 ::ffff:172.16.0.185:29418 :::* LISTEN 17632/GerritCodeRev tcp 0 0 :::8080 :::* LISTEN 17632/GerritCodeRev 默认gerrit web 开放在8080端口;git 代码提交管理侦听在29418上;
部署gerrit不是本文章的目的,现在已经把gerrit部署安装好和现有gerrit都是采用ldap + H2数据认证,现在就可以把gerrit上的数据同步到这台冷备上启动,完成gerrit灾备;
二、同步gerrit数据做冷备
1、gerrit访问
本地访问时加入hosts解析
172.16.0.185 gerrit2.pkey.cn
如图:
2、手工同步数据到冷备gerrit
我们前文已经说过,需要把现有的gerrit上的数据同步到新部署的gerrit做冷备,有两种方式,手工同步,和rsync实时同步(增量方式 ):
先看下手工同步需要同步那些:
新gerrit服务需要先停 #cd /home/git/gerrit_site/bin # ./gerrit.sh stop 由于主gerrit上的文件备份在NFS上,因此我们冷备gerrit上也挂载NFS到/home/git_bak; 以下复制基于此 其中 :etc bin lib plugins目录不用, tmp(临时,不需要) static data两目录为空也不需要 cd /home/git/gerrit_site cp -rf /home/git_bak/gerrit_site/git/bbs ./git/ cp -rf /home/git_bak/gerrit_site/git/pkey.com ./git/ cp -rf /home/git_bak/gerrit_site/tech-tools ./git/ cp -rf /home/git_bak/gerrit_site/git/tech-tools ./git/ cp -rf /home/git_bak/gerrit_site/git/www ./git/ cp -rf /home/git_bak/gerrit_site/index/* ./index/ cp -rf /home/git_bak/gerrit_site/cache/* ./cache/ cp -rf /home/git_bak/gerrit_site/db/* ./db/ chown git.git ./* -R 复制完启动gerrit 再次访问如图: 所有权限已经有了,因此直接用原有的gerritmaster登录看看,最终冷备数据同步完,登录如图:
手工同步只是做测试,为自动同步做准备,手动同步效率太低,太烦琐,因此接下来才是做冷备的正解。自动同步基于lsyncd服务,即rsync.
3、自动同步gerrit数据
1)、主gerrit安装lsyncd # yum install epel-release -y # yum install lsyncd -y 2)、配置lsyncd之添加不同步的排除文件 同上面手动同步时排除的文件一致 # touch /etc/rsyncd.d/rsync_exclude.lst # cat /etc/rsyncd.d/rsync_exclude.lst etc/* lib/* bin/* plugins/* tmp/* logs/* .tmp 3)、lsyncd主配置 # cat /etc/lsyncd.conf settings { logfile ="/var/log/lsyncd/lsyncd.log", statusFile ="/var/log/lsyncd/lsyncd.status", inotifyMode = "CloseWrite", maxProcesses = 4, -- nodaemon =true, } sync { default.rsync, source = "/home/git/gerrit_site/", target = "root@172.16.0.185:/home/git/gerrit_site", excludeFrom = "/etc/rsyncd.d/rsync_exclude.lst", maxDelays = 10, delay = 35, rsync = { binary = "/usr/bin/rsync", archive = true, compress = true, -- bwlimit = 800, rsh = "/usr/bin/ssh -p 60022 -o StrictHostKeyChecking=no", verbose = true, -- _extra = {"--bwlimit=2000"}, } } 4)、添加开机自启lsyncd # chkconfig lsyncd on #设置 开机启动 5)、配置root无密码私钥登录备份gerrit 这一步不详述,可自行看之前的文档; 大致步骤是生成私钥,把对应的公钥放到冷备的/root/.ssh/authorized_keys中 即可 6)、启动lsyncd服务启动数据同步 # service lsyncd start 如果启动失败记得查看日志,根据日志排错~ **如下表明同步正常,同步开启时,需要先关闭冷备gerrit服务** 查看传输日志: #tail -f /var/log/lsyncd/lsyncd.log /index/changes_0032/open/_3620_2.liv /index/changes_0032/open/ /index/changes_0032/ /index/ / /index/changes_0032/open/pending_segments_nvm sent 1413 bytes received 34 bytes 964.67 bytes/sec total size is 342138 speedup is 236.45 Fri Nov 23 11:10:56 2018 Normal: Finished a list after exitcode: 0 注意第一次是全同步的!需要一点时间,慢慢等,如果手功同步过,则比较快~
三、冷备gerrit切换步骤
当主gerrit服务不可用,网络可用,请先关闭lsyncd服务,防止错误的数据同步过来
如果网络直接不可用时,直接到冷备的gerrit上启动服务;并修改如下访问域名为gerrit.ickey.cn(hosts也要修改)
[gerrit]
basePath = git
serverId = ad163546-8d99-4006-931b-39835fba
/home/git/gerrit_site/etc/gerrit.config中修改成 gerrit.pkey.cn(这是主gerrit对外访问域名)
此时就可以启动冷备gerrit服务啦~
补充:
查看gerrit数据库:
停止gerrit 数据库管理
./bin/gerrit.sh stop
java -jar bin/gerrit.war gsql
以上主要是日常工作中的备忘,欢迎各位留言指正与交流,如果对你有用,记得点个赞~

- 标签:
-
容灾备份