首页 > 其他分享 >gitlab13-drbd-主从

gitlab13-drbd-主从

时间:2024-07-25 13:43:30浏览次数:12  
标签:drbdadm drbd gitlab 节点 gitlab1 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,gitlab13,data,主从
From: https://www.cnblogs.com/kkit/p/18322812

相关文章

  • SpringBoot + MyBatis 实现 MySQL 主从复制动态数据源切换
    概述在项目中的某些场景中,需要对数据库进行一些优化。常用的有如下的实现方法:读写分离、引入缓存技术、主从复制、分库分表等。今天来简单介绍一些如何在程序中实现动态切换数据源,可能某台服务器性能比较好,让流量多的方法执行切换到此数据源去操作等等。当然这种思想也可以扩展......
  • gitlab13-drbd-install
    gitlab主从搭建环境名称规格系统盘数据盘系统ip服务vipgitlab18c16G100G50Gcentos7.8192.168.150.69drbd90,gitlab-13192.168.150.70gitlab28c16G100G50Gcentos7.8192.168.150.42drbd90,gitlab-13192.168.150.70准备工作(所有节点)#修改......
  • redis主从复制实现
    redis持久化:RDB持久化: 可以在执行的时间间隔内生成数据集的时间点快照(point-in-timesnapshot),新快照会覆盖老快照。 优点: 速度快,适合于用于做备份,主从复制也是基于RDB持久化功能实现的。 缺点: 会有数据丢失。 #配置RDB持久化策略 save9001 save30010 save......
  • Mysql的主从同步时延问题
    主从同步延迟可以通过一些策略减少,从而减低对业务的影响避免大事务和长事务大事务和长事务会严重影响主从同步的效率,例如大规模的DELETE操作会生成大量的binlog,导致从库复制速度跟不上。解决:通过分批操作缓解,例如一次1000条,减少每次操作的时间,减少对主从同步的影响。启用从库......
  • # Redis 入门到精通(九)-- 主从复制
    Redis入门到精通(九)--主从复制(1)一、redis主从复制–主从复制简介1、互联网“三高”架构高并发高性能高可用2、你的“Redis”是否高可用?1)单机redis的风险与问题问题1.机器故障现象:硬盘故障、系统崩溃本质:数据丢失,很可能对业务造成灾难性打击结论:基本上会......
  • 【SQL】主从同步延迟怎么处理
    主从同步延迟是指在主从复制环境中,从库数据更新滞后于主库的现象。延迟可能会影响读取操作的数据一致性。处理主从同步延迟的方法包括优化配置、提升硬件性能、调整应用程序逻辑等。以下是一些具体方法和策略:优化配置调整复制参数:sync_binlog:在主库上设置sync_binlog=1......
  • Redis主从配置
    转载请注明出处:Redis主从配置的特点数据同步:主库(Master)负责处理写请求,并将数据更改同步到从库(Slave)。从库主要用于读请求和数据备份。读写分离:通过配置从库为只读,可以有效分散读请求,提升系统性能。高可用性和容错:即使主库出现故障,从库也能继续提供读服务,并在主库恢复后重新同......
  • 关于MySQL主从复制的详细流程
    目录一、准备工作二、配置主服务器(Master)三、配置从服务器(Slave)四、数据同步(可选)五、验证复制关于MySQL主从复制的详细流程,可以分为以下几个主要步骤:一、准备工作确保环境:准备至少两台服务器,一台作为主服务器(Master),另一台作为从服务器(Slave)。确保两台服务器间的......
  • mysql主从同步(一主一从)
    一.准备两台服务器二.在主服务器和从服务器安装mysql1.去mysql官网找到自己需要的mysql版本(我这里使用的是5.7.23)2.我这里使用的是解压tar.gz为例3.把mysql解压出来(我解压的路径是/home/mysql)4.cd/home/mysql进入mysql目录 使用mkdirmysqldb创建存放数据库的文件夹......
  • MySQL主从复制过程
    1、主库操作:修改数据库配置文件liunx的my.cnf文件;windows系统的my.ini文件[mysqld]#最大链接数max_connections=1000#主库----start---同一局域网内注意要唯一server-id=100#开启二进制日志功能,可以随便取(关键)log-bin=mysql-bin#记录的数据库(多数据库用逗号......