首页 > 其他分享 >gitlab13-drbd-install

gitlab13-drbd-install

时间:2024-07-25 13:19:20浏览次数:12  
标签:drbdadm drbd gitlab gitlab1 install gitlab13 data 节点

gitlab主从搭建

环境

名称 规格 系统盘 数据盘 系统 ip 服务 vip
gitlab1 8c16G 100G 50G centos7.8 192.168.150.69 drbd90, gitlab-13 192.168.150.70
gitlab2 8c16G 100G 50G centos7.8 192.168.150.42 drbd90, gitlab-13 192.168.150.70

准备工作(所有节点)

# 修改主机名
192.168.150.69 gitlab1
192.168.150.42 gitlab2

# 关闭防火墙和SELINUX
systemctl stop firewalld.service #关闭防火墙
systemctl disable firewalld.service #禁止开机启动

vi /etc/selinux/config
SELINUX=disabled

# 重启节点
reboot

安装drbd(所有节点)

# 安装elrepo源
rpm -Uvh http://elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm

# 安装drbd
yum -y install drbd90-utils kmod-drbd90

# 加载模块到内核
modprobe drbd
lsmod |grep drbd

# 设置开机启动
systemctl enable drbd
echo "modprobe drbd" >> /etc/rc.local
tail -1 /etc/rc.local
chmod +x /etc/rc.local


# 创建分区,不需要挂载
fdisk /dev/vdb
lsblk
vdb       253:16   0   50G  0 disk 
└─vdb1    253:17   0   50G  0 part

# 主配置文件
cat /etc/drbd.conf
# You can find an example in  /usr/share/doc/drbd.../drbd.conf.example
include "drbd.d/global_common.conf";
include "drbd.d/*.res";

# 通用配置文件
cat /etc/drbd.d/global_common.conf

global {
  usage-count no;         #是否参加DRBD使用者统计,默认是参加
  udev-always-use-vnr;
}

common {
  protocol C;      #指定复制协议,复制协议共有三种,为协议A,B,C,默认协议为协议C
  handlers {       #该配置段用来定义一系列处理器,用来回应特定事件。
  }

  startup {    ##DRBD同步时使用的验证方式和密码。该配置段用来更加精细地调节DRBD属性,它作用于配置节点在启动或重启时。常用选项有:
    wfc-timeout 15;  #该选项设定一个时间值,单位是秒。在启用DRBD块时,初始化脚本DRBD会阻塞启动进程的运行,直到对等节点的出现。该选项就是用来限制这个等待时间的,默认为0,即不限制,永远等待。
    degr-wfc-timeout 15;  #该选项也设定一个时间值,单位为秒。也是用于限制等待时间,只是作用的情形不同:它作用于一个降级集群(即那些只剩下一个节点的集群)在重启时的等待时间。
    outdated-wfc-timeout 15;  #同上,也是用来设定等待时间,单位为秒。它用于设定等待过期节点的时间
  }

  options {
  }

  disk {
    on-io-error detach; #发生I/O错误的节点将放弃底层设备,以diskless mode继续工作。在diskless mode下,只要还有网络连接,DRBD将从secondary node读写数据,而不需要failover(故障转移)。该策略会导致一定的损失,但好处也很明显,DRBD服务不会中断。官方推荐和默认策略。
  }

  net {
  }
}


# 资源配置文件
cat /etc/drbd.d/gitlab.res 
resource gitlab {
    meta-disk internal;
    device /dev/drbd0;      # device指定的參数最后必须有一个数字,用于global的minor-count,否则会报错。device指定drbd应用层设备。
    on gitlab1 {            # 注意:drbd配置文件里。机器名大写和小写敏感。
        address 192.168.150.69:7779;
        disk /dev/vdb1;     # 新建的分区磁盘
    }

    on gitlab2 {
        address 192.168.150.42:7779;
        disk /dev/vdb1;
    }
}


#  初始化DRBD元数据
drbdadm create-md gitlab

# 启动drbd服务
systemctl status drbd   && systemctl status drbd

# 查看资源组状态
drbdadm status gitlab
drbdadm role gitlab
#  注意: 两个节点状态都变成UpToDate才算正常

#  其他命令
drbdadm create-md/wipe-md gitlab   #  创建/删除元数据
drbdadm verify gitlab              #  基于块文件校验和检测一致性
cat /proc/drbd                     #  查看过程
drbdadm primary gitlab --force     #  强制切换为主



drbd验证

# gitlab1 创建测试
[root@gitlab1 ~]# drbdadm  primary gitlab
[root@gitlab1 ~]# drbdadm status
gitlab role:Primary
  disk:UpToDate
  gitlab2 role:Secondary
    peer-disk:UpToDate
 
[root@gitlab1 ~]# mkfs.xfs /dev/drbd0 -f
[root@gitlab1 ~]# mkdir /data
[root@gitlab1 ~]# mount /dev/drbd0 /data
[root@gitlab1 ~]# echo "test" > /data/test.txt  # 添加数据

#  主节点切换,先将01设置为备节点,再将02设置为主节点
[root@gitlab1 ~]#  umount /data
[root@gitlab1 ~]#  drbdadm  secondary gitlab


# gitlab2 创建测试
[root@gitlab2 ~]# drbdadm  primary gitlab
[root@gitlab2 ~]# mkdir /data
[root@gitlab2 ~]# mount /dev/drbd0 /data
[root@gitlab2 ~]# cat /data/test.txt              # 查看数据成功显示
test
[root@gitlab2 ~]# echo "test2" >> /data/test.txt   # 添加新数据


#  再次切换到gitlab1为主节点,gitlab2为备节点
[root@gitlab2 ~]#  umount /data
[root@gitlab2 ~]#  drbdadm  secondary gitlab


[root@gitlab1 ~]# drbdadm status
gitlab role:Primary
  disk:UpToDate
  gitlab2 role:Secondary
    peer-disk:UpToDate
[root@gitlab1 ~]# drbdadm  primary gitlab
[root@gitlab1 ~]# mount /dev/drbd0 /data
[root@gitlab1 ~]# cat /data/test.txt
test
test2

gitlab安装

1、gitlab1节点

#  软件包地址: https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/

#  安装依赖
yum -y install policycoreutils-python

#  安装gitlab
rpm -ivh gitlab-ce-13.9.4-ce.0.el7.x86_64.rpm

# 修改配置
vim /etc/gitlab/gitlab.rb 

external_url 'http://192.168.150.70'  # vip地址 
gitlab_rails['gitlab_email_from'] = '发送邮件的邮箱地址'
git_data_dirs({
   "default" => {
   "path" => "/data/git-data"
   }
})
postgresql['data_dir'] = "/data/postgresql/data"
postgresql['dir'] = "/data/postgresql"
postgresql['home'] = "/data/postgresql"

# 刷新配置
gitlab-ctl stop
gitlab-ctl reconfigure # 刷新配置
gitlab-ctl stop


#  卸载drbd盘,切换为secondary状态
umount /data
drbdadm  secondary gitlab

2、gitlab2节点

#  软件包地址: https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/

#  drbd设置为primary状态
   drbdadm  primary gitlab
   mount /dev/drbd0 /data

#  安装依赖
yum -y install policycoreutils-python

#  安装gitlab
rpm -ivh gitlab-ce-13.9.4-ce.0.el7.x86_64.rpm

# 修改配置
vim /etc/gitlab/gitlab.rb 

external_url 'http://192.168.150.70'  # vip地址 
gitlab_rails['gitlab_email_from'] = '发送邮件的邮箱地址'
git_data_dirs({
   "default" => {
   "path" => "/data/git-data"
   }
})
postgresql['data_dir'] = "/data/postgresql/data"
postgresql['dir'] = "/data/postgresql"
postgresql['home'] = "/data/postgresql"

#  刷新配置
gitlab-ctl stop
gitlab-ctl reconfigure # 刷新配置

#  使用主机ip地址登录,修改管理账户root密码
http://192.168.150.42

#  关闭gitlab服务
   gitlab-ctl stop
   
#  卸载drbd盘,切换为secondary状态
umount /data
drbdadm  secondary gitlab


gitlab2验证

#  验证gitlab2修改密码是否更改有效
   drbdadm  primary gitlab
   mount /dev/drbd0 /data
 #  使用gitlab1IP地址登录
 http://192.168.150.69      #  使用更改的密码登录
 

keepalived安装

#  yum安装,所有节点
yum install keepalived.x86_64 -y

#  开机启动,备节点上配置
systemctl start keepalived && systemctl enable keepalived

# 配置文件,所有节点
cat /etc/keepalived/keepalived.conf

# 主节点全局配置,备节点自行修改
global_defs {
   # 邮件通知信息
   notification_email {
     # 定义收件人
     [email protected]
   }

   # 定义发件人
   notification_email_from [email protected]

   # SMTP服务器地址
   smtp_server 127.0.0.1
   smtp_connect_timeout 30

   # 路由器标识,一般不用改,也可以写成每个主机自己的主机名---备份节点需修改
   router_id gitlab1
}

# 定义用于实例执行的脚本内容,比如可以在线降低优先级,用于强制切换,只在主节点配置
vrrp_script check_gitlab {
  
  # 脚本路径
  script "/etc/keepalived/check_gitlab.sh"

  # 执行时间间隔为每2秒执行一次
  interval 2

  # 超时时长为2秒
  timeout 2

  # 如果脚本执行失败(退出码非0)就把对应节点的优先级降低20,降低后的优先级要小于备份节点优先级
  weight -20

  # 脚本执行连续3次检测都为成功状态(脚本退出码都为0),则keepalived就标记该实例为OK状态,并会一直检测下去
  rise 3

  # 如果连续3次检查都为失败状态(退出码非0),则标记对应实例为KO状态;
  # 一旦标记对应实例为失败状态就会触发当前节点的优先级降低;
  # 从而在通告心跳时,会通告降低后的优先级,从而实现备份节点接管VIP来完成vip转移;
  fall 3
}



# 一个vrrp_instance就是定义一个虚拟路由器的,实例名称
vrrp_instance VI_1 {
    # 定义初始状态,可以是MASTER或者BACKUP---备份节点需修改为BACKUP
    state MASTER

    # 工作接口,通告选举使用哪个接口进行
    interface eth0

    # 虚拟路由ID,如果是一组虚拟路由就定义一个ID,如果是多组就要定义多个,而且这个虚拟
    # ID还是虚拟MAC最后一段地址的信息,取值范围0-255
    virtual_router_id 51

    # 如果你上面定义了MASTER,这里的优先级就需要定义的比其他的高---备份节点需修改为90
    priority 100

    # 通告频率,单位为秒
    advert_int 1

    # 通信认证机制,这里是明文认证还有一种是加密认证

    authentication {
      auth_type PASS
      auth_pass 1111
    }

    # 设置虚拟VIP地址,一般就设置一个

    virtual_ipaddress {
      192.168.150.70/32

    }

    # 工作模式,nopreempt表示工作在非抢占模式,默认是抢占模式 preempt
    # 如果是抢占默认则可以设置等多久再抢占,默认5分钟,设置1分钟
    preempt delay 300

    # 追踪脚本,通常用于去执行上面的vrrp_script定义的脚本内容,只在主节点配置
    track_script {
      check_gitlab
    }

    # 三个指令,如果主机状态变成Master|Backup|Fault之后会去执行的通知脚本,脚本要自己写
    notify_master "/etc/keepalived/change_drbd.sh master"
    notify_backup "/etc/keepalived/change_drbd.sh backup"
    notify_fault ""

}


#  检查gitlab状态的脚本,所有节点
cat /etc/keepalived/check_gitlab.sh

#!/bin/bash
eth0_ip=192.168.150.69 #主节点IP
return_num=$(curl -I "http://$eth0_ip/users/sign_in" 2>&1 | grep  "200\ OK" |wc -l)
if [ $return_num -eq 1 ];then
  exit 0                     # 备节点退出状态更换为1
else
  exit 1                     # 备节点退出状态更换为0
fi


# keepalived状态切换时执行的脚本,所有节点
cat /etc/keepalived/change_drbd.sh

#!/bin/bash
status=$1
if [ "$status" = "master" ];then
  current_status=$(/usr/sbin/drbdadm role gitlab)
  [[ "$current_status" = "Primary" ]] && exit 0 

  while [ "$current_status" = "Secondary" ];do
    /usr/sbin/drbdadm  primary gitlab
    current_status=$(/usr/sbin/drbdadm role gitlab)
    sleep 1
  done

  mount /dev/drbd0 /data
  /usr/bin/gitlab-ctl start
fi

if [ "$status" = "backup" ];then
  current_status=$(/usr/sbin/drbdadm role gitlab)
  [[ "$current_status" = "Secondary" ]] && exit 0
  /usr/bin/gitlab-ctl stop
  umount /data
  /usr/sbin/drbdadm secondary gitlab
fi


#  脚本添加执行权限
chmod +x /etc/keepalived/change_drbd.sh
chmod +x /etc/keepalived/check_gitlab.sh


# 启动查看状态
systemctl start keepalived
systemctl status keepalived

# 查看日志
tailf /var/log/messages

# 查看IP地址是否生效
ip a

#  因为前面我们将gitlab1的gitlab服务和drbd启动好了,所以这时候gitlab1是主节点,vip也在此节点


测试

测试一:关闭主节点,看备用节点是否接管;启动主节点后会自动切换回主节点
# gitlab1上操作
gitlab-ctl stop

# gitlab2查看vip地址,访问测试


测试二:修改检查脚本,让检查失败,看备用节点是否接管。
测试二切回主节点的方法:
在gitlab1上先把检查脚本还原,再安装以下步骤操作:
drbdadm  primary gitlab
mount /dev/drbd0 /data
gitlab-ctl start


测试三:
1、使用vip登录---------->创建项目
2、使用测试机clone项目,并添加文件push
3、关闭gitlab1节点git服务
4、检查gitlab2节点是否接管服务
5、登录网页查看数据是否存在。


升级

主节点升级,所有节点stop keepalived服务
13.9.4--->13.12.9--->14.0.9--->14.10.5--->15.0.0--->15.11.9---->16.0.0--->16.3.4--->16.7.5--->16.11.3

1、根据以上顺序进行升级,同时查看官方文档有无重大更改,
2、每次升级查看服务是否正常,访问502需要等1-5分钟


主节点升级完成后,卸载drbd,修改状态为secondary
从节点修改为premary,挂载drbd,直接yum安装主节点升级的最新版本。
备节点升级时遇到的问题:有历史数据残留
解决方案,先升级到主节点的次版本,再升级到与主节点一致的版本,更新配置

遇到的问题

问题一:

安装完drbd 状态不同步

解决方案: 强制将其中一个节点设置为主,等其他节点数据同步完成

问题二:

vip漂移成功后,ping不通

解决方案: 关掉vrrp_strict模式,/etc/keepalived/keepalived.conf

参考文档:

https://blog.51cto.com/sparkgo/6127764

https://blog.51cto.com/u_16213690/9737135

标签:drbdadm,drbd,gitlab,gitlab1,install,gitlab13,data,节点
From: https://www.cnblogs.com/kkit/p/18322793

相关文章

  • 从 DOCKER 下的共享卷在 Linux 中执行 PyInstaller 生成的文件时出现 Python 子进程 F
    我已经使用PyInstaller生成了一个可执行文件,例如test(没有扩展名,因为它是Linux)并将其存储在一个目录中,例如data我有一个Python程序,如下所示:importsubprocessfrompathlibimportPath...defrun_exe():try:#getcurrentdirectory......
  • pyinstaller:matplotlib 字体缓存更改为生成的应用程序中的 /var/folders
    我正在运行pyinstaller3.3.dev0+gb78bfe5(在撰写本文时是最新的)并看到一些奇怪的东西:当我运行应用程序的单目录版本时,我收到一条警告,指出matplotlib正在重建字体缓存,但没有当我直接在python中运行应用程序时。通过打印mpl.get_cachedir(),我看到pyinstaller构建的版......
  • 使用 pyinstaller / auto py 执行时如何处理相对资源路径?
    我有python脚本,可将日志文件和另一个csv保存到相对资源路径。pyinstaller抛出文件未找到错误。代码的文件结构是。-ProjectFolder|-common||-commom.py|-src||-main.py||-anotherclass.py|-resources||-output.logs||-result.csv输出exe目......
  • 为什么我的exe在pyInstaller之后最小化时消失了
    当在控制台中测试代码时,它运行正常并且所有功能都正常工作,并且在pyInstaller之后问题出现了。当我按下最小化按钮时,图标不会出现在系统托盘中,而是消失,并且通常该程序不在窗口中,但它在后台运行?如果有人可以帮忙:)我只尝试更新pyInstaller和pystray,不知道该怎么做。#-*-m......
  • 尝试使用 pyinstaller 将 python 文件转换为可执行文件时出现 TypeError
    稍后的目的是通过命令行向GPT4all发送问题并将答案存储在文本文档中。我想将阻止代码转换为exe,但它产生了TypeError。这是到目前为止的代码:fromgpt4allimportGPT4Allmodel=GPT4All("Meta-Llama-3-8B-Instruct.Q4_0.gguf",device='cpu')#downloads/loads......
  • TypeError:预期的字符串或类似字节的对象,在使用导入运行 Pyinstaller 时得到“NoneType
    我正在尝试从Python创建可执行文件,但收到以下错误。我创建了一个干净的环境,并尝试仅通过导入和文件中的简单print('HelloWorld')来重现该问题,如下所示:importtkinterastkimportthreadingfromtkinterimportfiledialogfromtkcalendarimportDateEntryfro......
  • 无法在 python 中安装 pip install expliot - bluepy 的 Building Wheel (pyproject.t
    在此处输入图像描述当我尝试在Windows计算机中通过cmd安装pipinstallexpliot包时,我收到2个错误名称×Buildingwheelforbluepy(pyproject.toml)didnotrunsuccessfully.│exitcode:1**AND**opt=self.warn_dash_deprecation......
  • ansible-install-log
    [jing@CJVM01~]$cat/etc/redhat-releaseCentOSLinuxrelease8.0.1905(Core)[jing@CJVM01~]$rpm-qa|greppythonpython3-libxml2-2.9.7-5.el8.x86_64python3-dateutil-2.6.1-6.el8.noarchpython3-libcomps-0.1.8-13.el8.x86_64python3-pyyaml-3.12-12.el8.x86......
  • 在构建Docker时执行yum -y install gcc报错解决方案
    1、在构建docker时,执行yum-yinstallgcc报一下错误 2、解决方案:更换镜像执行以下指令:mv/etc/yum.repos.d/CentOS-Base.repo/etc/yum.repos.d/CentOS-Base.repo.backup  wget-O/etc/yum.repos.d/CentOS-Base.repohttp://mirrors.aliyun.com/repo/Centos-7.rep......
  • PostgreSQL安装异常:Problem running post-install step
    1.错误详情安装PostgreSQL时快要完成的时候抛出异常Problemrunningpost-installstep.Installationmaynotcompletecorrectlty.Thedatabaseclusterinitialisationfailed.2.解决方法以管理员权限打开PowerShell找到PostgreSQL安装目录,进入bin文件夹(例子中是D:\Post......