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

 

posted @ 2021-03-02 16:14  paul_hch  阅读(660)  评论(0编辑  收藏  举报