前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Gitlab+Drbd高可用方案(主备模式)

Gitlab+Drbd高可用方案(主备模式)

作者头像
DevOps云学堂
发布2019-10-18 17:08:30
7.5K0
发布2019-10-18 17:08:30
举报
文章被收录于专栏:DevOps持续集成DevOps持续集成

Gitlab+DRBD 高可用方案

  • 启动两个gitlab服务,数据通过分布式存储保持一致。
  • 更改主服务中的仓库和pg数据库的目录位置。
  • 手动切换

Gitlab配置

主机规划

采用两台虚拟机完成。

代码语言:javascript
复制
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/

代码语言:javascript
复制
rpm -ivh gitlab-ce*.rpm
vim /etc/gitlab/gitlab.rb  # extend_url
gitlab-cli reconfigure

DRBD配置

简介

DRBD(Distributed ReplicatedBlock Device)是一种基于软件的,无共享,分布式块设备复制的存储解决方案,在服务器之间的对块设备(硬盘,分区,逻辑卷等)进行镜像。

DRBD是由内核模块和相关脚本而构成,用以构建高可用性的集群,其实现方式是通过网络来镜像整个设备。它允许用户在远程机器上建立一个本地块设备的实时镜像,与心跳连接结合使用,可以把它看作是一种网络RAID,它允许用户在远程机器上建立一个本地块设备的实时镜像。

安装

代码语言:javascript
复制
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

准备磁盘(相同大小)

分区格式化,不需要挂载。

代码语言:javascript
复制
[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全局配置文件
代码语言:javascript
复制
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;
    }
}
  • 资源文件
代码语言:javascript
复制
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;
    }
}

创建资源

代码语言:javascript
复制
[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服务

代码语言:javascript
复制
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 主节点创建测试数据

代码语言:javascript
复制
drbdadm  primary gitlab
mkfs.xfs /dev/drbd1 -f
mkdir /data
mount /dev/drbd1 /data
echo "123" > /data/123.txt

主节点切换:先将01设置为备节点,再将02设置为主节点。

01节点

代码语言:javascript
复制
umount /data
drbdadm  secondary gitlab

02节点

代码语言:javascript
复制
drbdadm  primary gitlab
mkdir /data
mount /dev/drbd1 /data
cat /data/123.txt

Gitlab高可用配置

准备工作

  • 创建项目数据: 2个
  • 创建用户数据: 2个
  • 创建apitoken: 1个

更改gitlab的默认仓库目录(指向drbd)

代码语言:javascript
复制
git_data_dirs({
   "default" => {
     "path" => "/data/git-data"
    }
})

更改gitlab默认pg数据库数据目录(指向drbd)

代码语言:javascript
复制
postgresql['data_dir'] = "/data/postgresql/data"
postgresql['dir'] = "/data/postgresql"
postgresql['home'] = "/data/postgresql"

将drbd挂载到gitlab数据目录

gitlab默认的数据目录在 /var/opt/gitlab

代码语言:javascript
复制
#停止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)

代码语言:javascript
复制
#将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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevOps持续集成 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Gitlab+DRBD 高可用方案
  • Gitlab配置
    • 主机规划
      • 安装Gitlab
      • DRBD配置
        • 简介
          • 安装
            • 准备磁盘(相同大小)
              • 配置文件
                • 创建资源
                  • 启动DRBD服务
                    • 验证主备
                      • 主节点切换:先将01设置为备节点,再将02设置为主节点。
                  • Gitlab高可用配置
                    • 准备工作
                      • 将drbd挂载到gitlab数据目录
                        • 主备切换
                          • 参考文档
                          相关产品与服务
                          对象存储
                          对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档