若有大量其他的客户机与Git服务器不在同一个数据中心,这样在批量进行Git克隆等操作时,会出现专线带宽长时间占用、操作速度缓慢等现象,而长时间占用带宽会给业务带来不良影响。解决这种现象,我们可以在客户机所在的数据中心搭建一台Git镜像服务器(Git镜像服务器与Git服务器相同,客户机可以直接从这台服务器进行克隆等操作)。
下面来进行Git镜像服务器的构建:
三台CentOS6.5 系统服务器,一台做客户机,两台做服务机,配置如下:
客户机:
主机名:gclient.ylhb.com
IP:10.0.0.201
hosts绑定:
10.0.0.211 gserver1.ylhb.com 10.0.0.212 gserver2.ylhb.com
主服务机1:
主机名:gserver1.ylhb.com
IP:10.0.0.211
hosts绑定:
10.0.0.211 gserver1.ylhb.com 10.0.0.212 gserver2.ylhb.com
镜像服务机2:
主机名:gserver2.ylhb.com
IP:10.0.0.212
hosts绑定:
10.0.0.211 gserver1.ylhb.com 10.0.0.212 gserver2.ylhb.com
yum install zlib-devel perl-CPAN perl-devel curl-devel gettext expat-devel gettext-devel openssl-devel perl-Time-HiRes git -y
useradd -d /data/git git echo '111111' | passwd --stdin git
su - git mkdir bin git clone https://github.com/sitaramc/gitolite.git ./gitolite/install --to /data/git/bin/
ssh-keygen -t rsa #一直回车
主服务机1:
vim /data/git/.ssh/config host gserver2 user git hostname 10.0.0.212 identityfile /data/git/.ssh/id_rsa文件权限设置为644
chmod 644 /data/git/.ssh/config镜像服务机2:
vim /data/git/.ssh/config host gserver1 user git hostname 10.0.0.211 identityfile /data/git/.ssh/id_rsa文件权限设置为644
chmod 644 /data/git/.ssh/config
客户机:
安装git
yum install git -y
创建git用户(root用户下)
useradd git echo '111111' | passwd --stdin git生产git用户密钥对
ssh-keygen -t rsa #一直回车上传公钥到两台服务机,并改文件名为admin.pub
scp .ssh/id_rsa.pub [email protected]:/tmp/admin.pub scp .ssh/id_rsa.pub [email protected]:/tmp/admin.pub
下载服务机1上的git用户的SSH公钥,并该文件名为server-server1-pub
scp [email protected]:~/.ssh/id_rsa.pub /tmp/server-gserver1.pub
两台服务机:
切换到git用户,为gitolite配置管理员
su - git ./bin/gitolite setup -pk /tmp/admin.pub
切换到git用户,创建两个目录gserver1和gserver2,分别克隆主服务机和镜像服务机管理库
gserver1目录下:
git clone [email protected]:gitolite-admin.git cd gitolite-admin cp /tmp/server-gserver1.pub keydir/配置conf/gitolite.conf
vim conf/gitolite.conf repo gitolite-admin RW+ = admin server-server1 repo testing RW+ = @all提交到远程
git add . && git commit -m "1" && git push
gserver1目录下:
git clone [email protected]:gitolite-admin.git cd gitolite-admin cp /tmp/server-gserver1.pub keydir/配置conf/gitolite.conf
vim conf/gitolite.conf repo gitolite-admin RW+ = admin server-server1 repo testing RW+ = @all提交到远程
git add . && git commit -m "1" && git push
验证:
主服务机上,git用户下执行以下命令
ssh gserver2 info
出现hello server-gserver1, this is git@gserver2 running gitolite3 v3.6.5-4-g6ed0156 on git 1.7.1则配置成功
客户机上、git用户gserver1、gserver2目录下,分别配置gitolite.conf如下,并提交
repo gitolite-admin RW+ = admin server-gserver1 option mirror.master = gserver1 option mirror.slaves = gserver2 option mirror.redirectOK = all repo testing RW+ = @all option mirror.master = gserver1 option mirror.slaves = gserver2 option mirror.redirectOK = all提交更改到远程
git add . && git commit -m "2" && git push主服务机1上,git用户下修改".gitolite.rc"文件
vim .gitolite.rc HOSTNAME => "gserver1", 'mirror', 'Mirroring',镜像服务机上,git用户下修改".gitolite.rc"文件
vim .gitolite.rc HOSTNAME => "gserver2", 'mirror', 'Mirroring',
以上即完成镜像服务器配置。
客户机上,git用户gserver1目录下克隆主服务机1的测试库,在里面创建文件并提交,看是否能同步到镜像服务机2
git clone [email protected]:testing.git cd testing/ echo "ylhb" > ylhb git add . && git commit -m "3" && git push origin master客户机上,git用户gserver2目录下克隆镜像服务机2的测试库,查看testing里是否有文件ylhb。
git clone [email protected]:testing.git ls testing可以看到文件同步,则镜像服务器配置成功。