Gerrit安裝與做冷備份實戰
1、關於gerrit
Gerrit,是利用網頁瀏覽器,同一個團隊的軟件程序員,可以相互審閱彼此修改後的程序代碼,決定是否能夠提交,退回或者繼續修改。Gerrit實際上底層是一個Git服務器,它為在其服務器上托管的Git倉庫提供一系列權限控制,以及一個用來做Code Review是Web前臺頁面。當然,其主要功能就是用來做Code Review。架構如圖(圖來自網絡):
另外gerrit是java開發,因此部署時需要有jdk環境。
2、本次實戰
本次實戰的背景,主要是因為公司日常通過gerrit進行代碼管理與審計;由於業務邏輯多,代碼庫也比較多,依賴gerrit系統,gerrit基於公司域環境(lday)統一認證用戶權限;目前只有一套在使用,考慮到如果這臺gerrit代碼管理系統巖機不可用時,就無法對代碼進行有效管理,影響業務的開發與上線進度,因此需要提高gerrit可用性,又由於gerrit使用頻繁,團隊都在使用,不能中斷,因此做主從,改動較大,最終決定做一個冷備,方案如下:
當現有的gerrit不可用時,啟用冷備gerrit.因此我們需要先部署一套新的gerrit ,線上gerrit使用2.13.1,因此冷備份的gerrit 版本用2.13.11 保障大版本一致即可。
3、實戰環境
CentOS6.10 X64
jdk version "1.8.0_171"
gerrit 2.13.11
ip 172.16.0.185
二、gerrit安裝部署
1、下載安裝
官方下載
2、安裝jdk
由於gerrit是基於java開發的,因此我們需要安裝java這裏安裝版本如下:
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 = [email protected]
smtpServerPort = 25
smtpPass = PASSWORD,
sslVerify = false
from=CodeReview<[email protected]>
[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/logs/* ./logs
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/*
.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 = "[email protected]:/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-39835fba6b40
canonicalWebUrl = http://gerrit.pkey.cn:8080/
DNS解析 gerrit.pkey.cn 指向 172.16.0.185
/home/git/gerrit_site/etc/gerrit.config中修改成 gerrit.pkey.cn(這是主gerrit對外訪問域名)
此時就可以啟動冷備gerrit服務啦~
補充:
查看gerrit數據庫:
停止gerrit 數據庫管理
./bin/gerrit.sh stop
java -jar bin/gerrit.war gsql
以上主要是日常工作中的備忘,歡迎各位留言指正與交流,如果對你有用,記得點個贊~
Gerrit安裝與做冷備份實戰