Gitlab+DRBD 高可用方案【转】
Gitlab+DRBD 高可用方案
- 启动两个gitlab服务,数据通过分布式存储保持一致。
- 更改主服务中的仓库和pg数据库的目录位置。
- 手动切换

Gitlab配置
主机规划
采用两台虚拟机完成。
192.168.1.104 gitlab-service-01 primary
192.168.1.105 gitlab-service-02 secondary
安装Gitlab
直接在清华大学镜像站下载:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/
rpm -ivh gitlab-ce*.rpm
vim /etc/gitlab/gitlab.rb # extend_url
gitlab-cli reconfigure

DRBD配置
简介
DRBD(Distributed ReplicatedBlock Device)是一种基于软件的,无共享,分布式块设备复制的存储解决方案,在服务器之间的对块设备(硬盘,分区,逻辑卷等)进行镜像。
DRBD是由内核模块和相关脚本而构成,用以构建高可用性的集群,其实现方式是通过网络来镜像整个设备。它允许用户在远程机器上建立一个本地块设备的实时镜像,与心跳连接结合使用,可以把它看作是一种网络RAID,它允许用户在远程机器上建立一个本地块设备的实时镜像。
安装
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
yum -y install drbd84
yum -y install kmod-drbd84
setenforce 0
modprobe drbd
准备磁盘(相同大小)
分区格式化,不需要挂载。
[root@dockerserver ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x5f6a10b0 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):
将使用默认值 41943039
分区 1 已设置为 Linux 类型,大小设为 20 GiB
命令(输入 m 获取帮助):wq
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
#加载分区表
partprobe /dev/sdb
lsblk
配置文件
- drbd全局配置文件
global {
usage-count no;
}
common {
protocol C;
startup {
wfc-timeout 15;
degr-wfc-timeout 15;
outdated-wfc-timeout 15;
}
disk {
on-io-error detach;
fencing resource-only;
}
net {
cram-hmac-alg sha1;
shared-secret "123456";
}
syncer {
rate 100M;
}
}
- 资源文件
resource gitlab {
meta-disk internal;
device /dev/drbd1; #device指定的參数最后必须有一个数字,用于global的minor-count,
#否则会报错。device指定drbd应用层设备。
on gitlab-service-01 { #注意:drbd配置文件里。机器名大写和小写敏感。
address 192.168.1.104:7779;
disk /dev/sdb1; #新建的分区磁盘
}
on gitlab-service-02 {
address 192.168.1.105:7779;
disk /dev/sdb1;
}
}
创建资源
[root@gitlab-service-01 drbd.d]# drbdadm create-md gitlab
You want me to create a v08 style flexible-size internal meta data block.
There appears to be a v09 flexible-size internal meta data block
already in place on /dev/sdb1 at byte offset 21473783808
Valid v09 meta-data found, convert to v08?
[need to type 'yes' to confirm] yes
md_offset 21473783808
al_offset 21473751040
bm_offset 21473095680
Found xfs filesystem
20969820 kB data area apparently used
20969820 kB left usable by current configuration
Even though it looks like this would place the new meta data into
unused space, you still need to confirm, as this is only a guess.
Do you want to proceed?
[need to type 'yes' to confirm] yes
Writing meta data...
New drbd meta data block successfully created.
[root@dockerserver ~]# drbdadm create-md gitlab
You want me to create a v08 style flexible-size internal meta data block.
There appears to be a v09 flexible-size internal meta data block
already in place on /dev/sdb1 at byte offset 21473783808
Valid v09 meta-data found, convert to v08?
[need to type 'yes' to confirm] yes
Writing meta data...
New drbd meta data block successfully created.
success
启动DRBD服务
systemctl start drbd
systemctl status drbd
systemctl enable drbd
[root@gitlab-service-01 drbd.d]# cat /proc/drbd
version: 8.4.11-1 (api:1/proto:86-101)
GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-11-03 01:26:55
1: cs:StandAlone ro:Secondary/Unknown ds:Inconsistent/DUnknown r----s
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:20969820
[root@gitlab-service-02 ~]# cat /proc/drbd
version: 8.4.11-1 (api:1/proto:86-101)
GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-11-03 01:26:55
1: cs:Connected ro:Secondary/Primary ds:Diskless/UpToDate C r-----
ns:2071 nr:3216 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
验证主备
gitlab-service-01 主节点创建测试数据
drbdadm primary gitlab
mkfs.xfs /dev/drbd1 -f
mkdir /data
mount /dev/drbd1 /data
echo "123" > /data/123.txt
主节点切换:先将01设置为备节点,再将02设置为主节点。
01节点
umount /data
drbdadm secondary gitlab
02节点
drbdadm primary gitlab
mkdir /data
mount /dev/drbd1 /data
cat /data/123.txt
Gitlab高可用配置
准备工作
- 创建项目数据: 2个
- 创建用户数据: 2个
- 创建apitoken: 1个
更改gitlab的默认仓库目录(指向drbd)
git_data_dirs({
"default" => {
"path" => "/data/git-data"
}
})
更改gitlab默认pg数据库数据目录(指向drbd)
postgresql['data_dir'] = "/data/postgresql/data"
postgresql['dir'] = "/data/postgresql"
postgresql['home'] = "/data/postgresql"
将drbd挂载到gitlab数据目录
gitlab默认的数据目录在 /var/opt/gitlab
#停止gitlab服务
gitlab-ctl stop
#挂载drbd1
mount /dev/drbd1 /data
#同步历史数据
rsync -av /var/opt/gitlab/git-data /data/git-data
rsync -av /var/opt/gitlab/postgresql /data/postgresql
#删除原文件
rm -fr /var/opt/gitlab/*
#启动gitlab
gitlab-ctl start
主备切换
按照上面配置同样修改gitlab备服务的配置(repos、pg)
#将01节点切换为从服务器
umount /data
drbdadm secondary gitlab
#将02节点切换为主服务器
mkdir /data
mount /dev/drbd1 /data
gitlab-ctl start
参考文档
https://docs.gitlab.com/ce/administration/highavailability/README.html
https://blog.csdn.net/byg184244735/article/details/88078409
https://segmentfault.com/a/1190000019445040
https://q.cnblogs.com/q/70462/
https://blog.csdn.net/qq37595946/article/details/86534961
https://blog.csdn.net/liuli905306022/article/details/89512896
转自
Gitlab+Drbd高可用方案(主备模式) - 云+社区 - 腾讯云
https://cloud.tencent.com/developer/article/1523198
参考
GItlab的高可用方案 - 跑得比蜗牛还快 - 博客园
https://www.cnblogs.com/tangqiwen/p/8342918.html
版本管理工具Git(三)Gitlab高可用 - 昀溪 - 博客园
https://www.cnblogs.com/rexcheny/p/9464292.html
gitlab高可用架构部署文档-11202791-51CTO博客
https://blog.51cto.com/11212791/2467235
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?