版本管理工具Git(三)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
rpm -ivh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
# CentOS
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
版本管理工具Git(三)Gitlab高可用的更多相关文章
- 版本管理工具Git三种工作流
Git是分布式版本管理控制的工具.学习Git一般都是先去学习Git的命令. 但是学习完Git的基本命令之后还是不知道怎样使用Git.首先,我们要清楚的 一点是Git的使用方法其实有很多种,也就是说Gi ...
- 版本管理工具Git(一)简要介绍
版本管理工具不但可以备份而且还能记录版本,也就是同一个东西不同时期的状态同时可以跟踪追溯.版本管理工具由CVS.SVN.Git.GitHub. 最早的版本管理工具CVS,因为多人开发项目导致工作很难协 ...
- linux系统下使用流行的版本管理工具 Git
前几天被版本管理困扰了好久,主要是因为 没法回到之前的版本,新版本又出了问题真的很尴尬. 终于决定使用目前网上很火的版本管理工具-------Git 历史啥的就不说了,说些有用的. 我用的是oschi ...
- 版本管理工具Git(1)带你认识git
简介 本篇将带领大家认识,git.github,让大家对git有基本的认识:下面将持续更新几篇文章来介绍git,见git导航: 下一篇中将讲解git的安装及使用: Git系列导航 版本管理工具Git( ...
- 版本管理工具Git(2)git的安装及使用
下载安装git 官方下载地址:https://git-scm.com/download/win 这里以windows为例,选择正确的版本: 验证是否安装成功,右键菜单中会出现如下菜单: Git工作流程 ...
- 版本管理工具Git(2)git的使用
上一篇带大家认识了Git,在本篇中将讲解Git的安装及使用: Git系列导航 版本管理工具Git(1)带你认识git 版本管理工具Git(2)git的安装及使用 版本管理工具Git(3)VS下如何使用 ...
- 版本管理工具Git(3)VS2013下如何使用git
Git系列导航 版本管理工具Git(1)带你认识git 版本管理工具Git(2)git的安装及使用 版本管理工具Git(3)VS下如何使用git VS下创建项目 vs中新建项目MyGitTest201 ...
- 版本管理工具git与svn简介
版本管理工具 版本管理工具简介 常见版本管理工具 cvs(Concurrent Versions System) vss(Visual SourceSafe) svn 常用的版本管理工具 git 流行 ...
- 谈谈分布式版本管理工具Git
一.主流的版本管理工具 目前在企业中比较主流的版本管理工具有:GIT.SVN.CVS等等. 二.什么是Git? Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.是 L ...
随机推荐
- 期末Java Web大作业----简易的学生管理系统
学生信息管理系统(大作业) 2018-12-21:此文章已在我的网站更新,添加视图介绍等信息,源码请移步下载https://www.jeson.xin/javaweb-sims.html PS:首先不 ...
- java自动化-数据驱动junit演示,下篇
本文旨在帮助读者介绍,如何使用excle实现数据驱动 本文是上文https://www.cnblogs.com/xuezhezlr/p/9096063.html的继续,如果没看上文建议自己看一下,对理 ...
- 畅通工程续 -- HDU 1874 floyd
题目大意: 现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离. 思路: floyd算法模板题,这是一个牺牲空间换取时间的算法,本质是动态规划. AC代码: #include < ...
- [Linux] 使用Yum在CentOS上安装MySQL
跟随官网上的安装教程:https://dev.mysql.com/doc/refman/8.0/en/linux-installation-yum-repo.html官网上还有一个QuickGuide ...
- dotnetcore Http服务器研究(一)
自从dotnet core 诞生以来,发展非常强势.我们总有些需要写一个独立的http服务器的需求,我想是时候忘记httplistener 了. dotnet framework 时代建一个小的htt ...
- vs2012,打开早期版本窗体错误
<runtime> <NetFx40_LegacySecurityPolicy enabled="true"/></runtime>
- js运算符浅析
什么是运算符? 连接两个或多个操作数(某个值,表达式)之间的符号. 运算符的分类: 1. 赋值运算符(=) 将右边的值赋给左边. var x = 10; var y = x; console.log( ...
- MariaDB dos 下连接
本地 DOS 连接 将文件目录切换到 bin 文件夹下 cd C:\xampp\mysql\bin 输入连接命令 输入 status,查看数据库版本 远程DOS 连接
- 什么是 ajax?----异步 javascript 和 xml
GET 用于请求服务器数据 POST 用于上传数据到服务器,或者修改服务器数据 ajax 异步通信,实现页面的局部刷新,按需获取数据,节约带宽,带来更好的用户体验 客户端与服务器在不必刷新浏览器的情况 ...
- 二分- Count on Canton
题目: 代码: 是一个蛇形数列,把题目上的那组数倒过来看成一个正三角形. 第一行有1个数,1-2行有三个数,1-4行有6个数,1-4行有10个数,1-5行有15个数..... 现在要求第n个数是多少, ...