gitlab高可用模式
高可用模式
企业版

社区版

我们这里说一下成本比较低的主备模式,它主要依赖的是DRBD方式进行数据同步,需要2台ALL IN ONE的GitLab服务器,也就是通过上面安装方式把所有组件都安装在一起的2台机器。
什么是DRBD
它是分布式复制块设备,软件实现的无需共享可以在服务器之间镜像块设备的存储复制解决方案。

左侧为A节点,右侧为B节点
DRBD运行在内核里,它是一个内核模块。Linux2.6.33开始已经整合进内核。上图A为活动节点,B为被动节点。A收到数据发往内核的数据通路,DRBD在数据通路中注册钩子检查数据,当发现接收到的数据是发往自己管理的存储位置时,就复制一份,一份存储到本地的DRBD存储设备上,一份就发给TCP/IP协议栈,通过网卡传输到B节点的TCP/IP协议栈,B节点运行的DRBD模块同样在数据通路上坚持,发现有数据过来就存储到DRBD对应的位置上。如果A节点宕机,B节点上线,B节点接收到数据存储到本地,当A节点恢复以后在把变动数据同步到A节点上。
流程如下:
- SERVICE将数据写入 FIEL SYSEM->BUFFER CACHE->DRDB
- DRDB兵分两路一路通过磁盘DISK DRIVER写入磁盘
- 另外一路通过TCP/IP将数据通过网卡发送到对端DRBD节点
工作模式:
- 同步模式:当写入A服务器和B服务器成功后才返回。这是DRBD协议的C模式。生产环境中该模式最常用。
- 异步模式:写入A服务器后返回,还有可能是写入本地服务器和远端服务器的缓存成功后返回,这属于DRBD的A、B级别。
DRBD建立在底层设备之上,对于用户来说一个DRBD设备就像一块物理磁盘。它支持磁盘、软RAID、LVM等其他块设备。
部署
# 添加源
# CentOS 6
rpm -ivh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
# CentOS 7
rpm -ivh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm # 安装
yum -y install drbd84-utils kmod-drbd84 # 安装后重启
reboot

修改配置文件
下面是主配置文件

/etc/drbd.conf是主配置文件,但是它里面引用了2个,所以真正需要配置的是在它包含的配置文件中进行配置。

/etc/drbd.d/global_common.conf包含global和common这两部分DRBD配置信息。而*.res文件而资源文件。
/etc/drbd.d/global_common.conf配置文件说明
/usr/share/doc/drbd84-utils-9.3.1/drbd.conf.example这是一个模板文件。

默认这个配置文件里面没有配置什么具体内容

我这里就配置了几项,主要就是协议。其他其实都不用配置都是默认值。

*.res资源文件说明
默认没有这个文件,手动建立一个,以.res结尾

资源是一个复制的数据集,它包括Resource name也就是资源名称、
Volumes也就是卷在一个资源集合里面可以有多个卷复制的使用共用一个复制流;另外还会包含DRBD device,这是一个虚拟块设备,在系统上表现是的/dev/XXX,这里可不是真实的设备,真是的设备都是/dev/sda|b之类的。如果是多个资源再会用到Volumes

我的资源文件

注意:网络连接方面建议使用背靠背的直连方式这条链路主要用于复制数据,我这里实验环境就共用一条链路。
如果你使用LVM如何找到块设备?

如果你使用普通分区那就是/dev/sda|b[NUMBER]这种形式。
建立磁盘元数据和启用资源
保障你使用的块设备是空的否则会初始化失败。两个节点都要这样做初始化。

启用资源,反之就是 drbdadm down 资源名称

它这里知道自己是Secondary但是不知道对方,是因为防火墙导致,把两边防火墙关闭就好了,当然你也可以添加测录。

两台都是这个状态表示正常

启动服务


这时候我们之前没有的那个/dev/drbd0就出现了

设置主节点并创建文件系统
这一步只能在你确定是主节点的节点上执行,不需要两个节点都执行。设置完成后再次查看状态。

文件系统只能挂载到主节点上,也只能在设置了主节点后才能对这个/dev/drbd0这个设备格式化和挂载。

再次查看同步已经完成

大家肯定觉得我之前安装gitlab的时候设置仓库路径就是/data,没错,我做HA之前把gitlab服务停止掉,然后通过cp –rp命令吧git-data目录都拷贝到其他地方,然后才做的其他操作,当HA完成后使用相同的命令拷贝回来就行。
主从切换

监控工具
drbd-overview 检查角色以及同步状态

drbdadm status RESOURCE_NAME

drbdsetup status gitdatadrbd --verbose –statistics 详细信息

部署遇到的错误
1. not defined in your config (for this host).


这是因为配置文件里定义的和主机实际的名称不符。修改/etc/hostname文件。
2. open(/dev/mapper/gitdata-lv_gitdata) failed: Device or resource busy

这里是因为我的那个LVM卷挂载了,需要先卸载
3. ‘drbdmeta 0 v08 terminated with exit code 40

说明该设备数据不为0

参考文档
https://docs.gitlab.com/omnibus/roles/README.html
https://docs.gitlab.com/ce/administration/high_availability/README.html
https://docs.linbit.com/docs/users-guide-8.4/#s-distro-packages
https://www.cnblogs.com/wsl222000/p/5777382.html
https://segmentfault.com/q/1010000010290689
https://blog.csdn.net/tjiyu/article/details/52723125
https://blog.csdn.net/yanggd1987/article/details/50504599
http://blog.51cto.com/freeloda/1275384
gitlab高可用模式的更多相关文章
- 版本管理工具Git(三)Gitlab高可用
高可用模式 企业版 社区版 我们这里说一下成本比较低的主备模式,它主要依赖的是DRBD方式进行数据同步,需要2台ALL IN ONE的GitLab服务器,也就是通过上面安装方式把所有组件都安装在一起的 ...
- 001/Nginx高可用模式下的负载均衡与动静分离(笔记)
Nginx高可用模式下的负载均衡与动静分离 Nginx(engine x)是一个高性能的HTTP和反向代理服务器,具有内存少,并发能力强特点. 1.处理静态文件.索引文件以及自动索引:打开文件描述符缓 ...
- hadoop和hbase高可用模式部署
记录apache版本的hadoop和hbase的安装,并启用高可用模式. 1. 主机环境 我这里使用的操作系统是centos 6.5,安装在vmware上,共三台. 主机名 IP 操作系统 用户名 安 ...
- CentOS6下OpenLDAP+PhpLdapAdmin基本安装及主从/主主高可用模式部署记录
下面测试的部署机ip地址为:192.168.10.2051)yum安装OpenLDAP [root@openldap-server ~]# yum install openldap openldap- ...
- 2020-05-29:redis怎么保证高可用,高可用模式有那些?对比下优缺点?
福哥答案2020-05-29: Redis 高可用架构如下:1.Redis Sentinel 集群 + 内网 DNS + 自定义脚本.2.Redis Sentinel 集群 + VIP + 自定义脚本 ...
- MongoDB高可用模式部署
首先准备机器,我这里是在公司云平台创建了三台DB server,ip分别是10.199.144.84,10.199.144.89,10.199.144.90. 分别安装mongodb最新稳定版本: w ...
- MongoDB三节点高可用模式安装
设备: 三个1G.20G.1核的虚拟机,系统是SentOS7 min 清除原始自数据目录: rm -fr /home/mongosingle/ 创建目录: mkdir -p /home/mongosi ...
- Spark -14:spark Hadoop 高可用模式下读写hdfs
第一种,通过配置文件 val sc = new SparkContext() sc.hadoopConfiguration.set("fs.defaultFS", "hd ...
- 大数据学习笔记——Hadoop高可用完全分布式模式完整部署教程(包含zookeeper)
高可用模式下的Hadoop集群搭建 本篇博客将会在之前写过的Linux的完整部署的基础上进行,暂时不会涉及到伪分布式或者完全分布式模式搭建,由于HA模式涉及到的配置文件较多,维护起来也较为复杂,相信学 ...
随机推荐
- 三种redis数据导出导入方式
推荐博客链接:https://www.cnblogs.com/hjfeng1988/p/7146009.html https://blog.csdn.net/qq_14945847/article/d ...
- vim编辑器中的替换(转)
转1:https://www.cnblogs.com/david-wei0810/p/6385988.html 转2:https://blog.csdn.net/doubleface999/artic ...
- css 清除浮动 & BFC
前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! 文档流的概念:html 中 block 块元素默认是单独占据一行的,从上到下排列,也就是我们说的文档流. ...
- BOM与DOM的区别与联系
一.BOM与DOM的区别 1.BOM(Browser Object Model) BOM 即浏览器对象模型,BOM没有相关标准,BOM的最核心对象是window对象.window对象既为javascr ...
- R语言做逻辑回归
前面写过一个多分类的逻辑回归,现在要做一个简单的二分类,用glm函数 导入csv格式如下: mydata<-read.csv("D://li.csv",header=T) c ...
- .NET CORE 下 MariaDB DBfirst 生成model层 并配置连接参数
1.首先新建一个类库,然后通过NuGet安装下面三个包 2.然后在程序包管理器控制台中运行以下代码(ps:记得默认项目选择刚才新建的项目,同时设置为启动项) server 是服务器地址 databas ...
- jQuery_jQuery的基本使用
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- kong命令(四)upstream
介绍 upstream 就是一个虚拟的服务.可用于配置多个target目标服务时实现负载均衡的效果. 注意:service的host指的就是upstream的name. 同时upstream提供了一个 ...
- VisualSVN 关于权限(第2篇)
最终的答案: 仓库本身不能给他增加访问权限,必须增加否则连不上,不增加的时候 他默认就是No Access: 仓库本身可以理解为:祖宗,他是访问权限的根基.子目录会继承他的权限. 那么既然必须给他增加 ...
- leetcode-21.合并有序链表 · List
题面 合并两个排序链表. 算法 创建结果链表头*res,*p指向头,当两个链表节点都不为空时,比较节点值,值小的挂在p后面,二者(p和小者)顺次后移.知道某条链表空,跳出while循环.接着,直接将不 ...