• 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

  • 相关阅读:
    CVE-2019-0708
    windows powershell的常用命令
    sqli-lab(8)
    DVWA--CSP Bypass
    认清自己
    sqli-libs(7)
    DVWA--upload
    sqli-labs(6)
    python学习之路(22)
    BZOJ2434:[NOI2011]阿狸的打字机——题解
  • 原文地址:https://www.cnblogs.com/paul8339/p/14469530.html
Copyright © 2020-2023  润新知