GitLab多机备份与恢复操作

一、作用说明

备份:假设我们当前的gitlab挂掉了,整个服务器都起不来了,但是我们有对gitlab的归档备份,这时候还可以恢复出数据来。

迁移:假设此时使用的gitlab服务器出现故障运行不了,但是我们对gitlab在远端机有归档备份,这时候我们就可以在远端机把数据恢复重新搭建gitlab。

注意的是:备份和迁移的恢复操作是全量的,操作前要确认是否要进行备份或者恢复操作。

二、前提条件

在新的主机安装与之前机器相同版本的gitlab rpm包。也就是说要保证两台或者多台机器安装的gitlab版本要一致。可以通过以下命令查看相关git版本以及安装目录。

cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

或者可以通过管理区域查看相关的GitLab版本信息:

三、备份恢复流程

备份机:需要gitlab备份所在的机子

迁移机:gitlab需要迁移的机子,即新服务器所在机子

备份恢复流程图:

配置文件说明:

/etc/gitlab/gitlab.rb 配置文件须备份

/var/opt/gitlab/nginx/conf nginx配置文件

/etc/postfix/main.cfpostfix 邮件配置备份

3.1 备份机备份文件

备份时需要保持gitlab处于正常运行状态,在备份机直接执行以下命令:

gitlab-rake gitlab:backup:create

备份机会默认在/var/opt/gitlab/backups目录下创建一个名称类似为1573460229_2019_11_11_9.3.0_gitlab_backup.tar的压缩包, 这个压缩包就是Gitlab整个的完整部分, 其中开头的1573460229_2019_11_1是备份创建的日期。文件如图所示:

也提供了以下几种方式进行相关备份工作的配置:

3.1.1自动备份时间配置

在crontab文件里面,每一行代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,每个字段之间用空格分割,没用的段用*代替,格式如下:

m h dom mon dow user command

其中:

m:表示分钟,可以是从0到59之间的任何整数。

h:表示小时,可以是从0到23之间的任何整数。

dom:表示日期,可以是从1到31之间的任何整数。

mon:表示月份,可以是从1到12之间的任何整数。

dow:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。

user : 表示执行的用户。

command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件(如shell文件)。

实现每天凌晨2点进行一次自动备份:通过crontab使用备份命令实现,需重启cron服务

方法1:在命令行输入: crontab -e 然后添加相应的任务,wq存盘退出。

#输入命令crontab -e
sudo crontab -e
#输入相应的任务
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1  

方法2:直接编辑/etc/crontab 文件,即vi /etc/crontab,添加相应的任务

#编辑 /etc/crontab
vi /etc/crontab
然后再编辑框内输入相应的任务
# edited by ouyang 2017-8-11 添加定时任务,每天凌晨两点,执行gitlab备份
0  2    * * *   root    /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1  

方法3:通过编写sh脚本执行

或者直接定时执行一个脚本 auto_backup.sh ,脚本内容为

/opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1

然后再 /etc/crontab中,添加相关任务定时执行 auto_backup.sh 脚本文件  

sudo chmod +x auto_backup.sh
sudo vim auto_backup.sh

/etc/crontab 中添加执行脚本的定时任务,代码如下:

#也可以按照如下所示的方法,定时执行 auto_backup.sh脚本,脚本内容就填写: /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1

0 2    * * *   root    /data/gitlabData/backups/auto_backup.sh -D 1 

编写完 /etc/crontab 文件之后,需要重新启动cron服务

#重新加载cron配置文件
sudo /usr/sbin/service cron reload
#重启cron服务
sudo /usr/sbin/service cron restart

3.1.2修改默认备份路径

打开备份机gitlab的/etc/gitlab/目录下的gitlab.rb文件,找到以下配置信息,即可修改文件备份路径:

gitlab_rails[‘backup_path‘] = "/var/opt/gitlab/backups" 

修改完之后,执行以下命令,重新配置下gitlab

gitlab-ctl reconfigure 或者 gitlab-ctl  restart

比如:修改了备份路径:

重新执行备份语句gitlab-rake gitlab:backup:create,生成文件如下:

可以到/var/opt/gitlab/backups找到备份包,解压查看,会发现备份的还是比较全面的,数据库、repositories、build、upload等分类还是比较清晰的。

3.1.3修改备份保留时间

每天执行备份,肯定有目录被爆满的风险,gitlab-ctl自身集成的有自动删除配置。同样打开/etc/gitlab/gitlab.rb配置文件,可以找到如下配置:

gitlab_rails[‘backup_keep_time‘] = 604800 

这里是设置备份保留7天(7*3600*24=604800),秒为单位,如果想增大或减小,可以直接在该处配置,并通过gitlab-ctl reconfigure 或者 gitlab-ctl  restart 重启服务生效。

3.2 发送或者拷贝备份文件至迁移机

3.2.1发送备份文件

在备份机上打开/var/opt/gitlab/backups,通过以下命令将备份文件发送到迁移机具体备份路径或者通过ftp上传到具体路径:

rsync -avz 1573517815_2019_11_12_9.3.0_gitlab_backup.tar  192.111.25.32:/var/opt/gitlab/backups/ 

要输入迁移机的密码,等待执行完毕。

3.2.2本地拷贝备份文件

在迁移机上打开/var/opt/gitlab/backups,通过以下命令将备份文件拷贝到迁移机具体备份路径上:

scp [email protected]192.111.35.142:/var/opt/gitlab/backups/1573517815_2019_11_12_9.3.0_gitlab_backup.tar /var/opt/gitlab/backups/

要输入备份机的密码,等待执行完毕。

3.3 迁移机恢复备份

3.3.1将备份文件权限修改为777

第一步,将备份文件权限修改为777,不然可能恢复的时候会出现权限不够,不能解压的问题

chmod 777 1502357536_2017_08_10_9.4.3_gitlab_backup.tar 

3.3.2执行命令停止相关数据连接服务

执行命令停止相关数据连接服务,防止恢复备份的同时还有数据操作,导致数据不一致:

# 停止相关数据连接服务
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq 

3.3.3执行命令从备份文件中恢复Gitlab

进入到迁移机/var/opt/gitlab/backups目录执行下面的命令进行恢复:

gitlab-rake gitlab:backup:restore BACKUP=1573440757_2019_11_11_9.3.0
或者
gitlab-rake gitlab:backup:restore BACKUP=1573440757_2019_11_11_9.3.0_gitlab_backup.tar

后面再输入两次yes就完成恢复了。

3.3.4启动Gitlab

第四步,启动Gitlab

sudo gitlab-ctl start

迁移前-备份机目录:

迁移前-迁移机目录:

迁移后-迁移机目录:

除了访问地址不一样,其他目录结构都一样。其他操作就和原来仓库操作一样。

原文地址:https://www.cnblogs.com/shawWey/p/12205115.html

时间: 2024-10-11 21:19:48

GitLab多机备份与恢复操作的相关文章

Oracle 10g数据库备份与恢复操作手册

Oracle 10g数据库备份与恢复操作手册 前言 文档目的 备份与恢复是数据库管理中最重要的方面之一.如果数据库崩溃却没有办法恢复它,那么对企业造成的毁灭性结果可能会是数据丢失.收入减少.客户不满等.不管公司是使用单个数据库还是多个数据库来存储数百  GB或    TB的数据,它们都有一个共同点,即需要制订一个备份与恢复方案来备份重要数据并使自身免于灾难.要制定一个适合自己公司情况的合理的备份与恢复方案,就必须熟悉备份与恢复的方法和操作. 为了给 Oracle DBA和相关技术人员提供一个参考

Android 使用VCard数据类型 异步进行联系人备份与恢复操作

生活中常有人因为更换手机而丢失联系人,所以联系人备份与恢复操作就显得有一些必要与价值. 所以学习了相关内容,并进行了适当整合,在这里整理出来. 本篇博客两个重点 使用VCard库进行联系人备份与恢复 异步进行备份与恢复操作 为什么要用VCard VCard是用于联系人数据存储的标准数据格式,且有一套已经成熟的库可以使用,通用于手机,也通用于邮件等,所以使用VCard进行联系人的数据存储与备份格式是非常好的选择.当然是用XML格式去存储也是可以的. 下载android-vcard.jar请猛戳这里

python 学习第十一课 上下文管理 paramiko 堡垒机 mysql操作

Rlock 与 Lock 这两种琐的主要区别是:RLock允许在同一线程中被多次acquire.而Lock却不允许这种情况.注意:如果使用RLock,那么acquire和release必须成对出现,即调用了n次acquire,必须调用n次的release才能真正释放所占用的琐 >>> help(threading.RLock) RLock(*args, **kwargs) Factory function that returns a new reentrant lock. A reen

跟着大神学Mongo,Mongodb主从复制本机简单操作总结

原文链接:http://www.cnblogs.com/huangxincheng/archive/2012/03/04/2379755.html 本机安装MongoDB不在介绍,本文Mongo小菜鸟学习本机实践.闲言少叙,书归正传. 模拟多机器运行环境.(只在本机,并不代表多机器一定成功) 启动各个MongoDB服务,并配置主从服务器 主服务器插入数据 查询从服务器数据 第一步:模拟多机器运行环境,其中ServerMain为主数据库,Other 1,2,3为从数据库.直接上图 第二步:启动各个

Gitlab备份和恢复操作记录

前面已经介绍了Gitlab环境部署记录,这里简单说下Gitlab的备份和恢复操作记录: 1)Gitlab的备份目录路径设置 [[email protected] ~]# vim /etc/gitlab/gitlab.rb gitlab_rails['backup_path'] = "/data/gitlab/backups" [[email protected] ~]# mkdir -p /data/gitlab/backups [[email protected] ~]# chown

springboot上传代码到gitlab并发布上线操作

windows上传代码到gitlab操作 1.可以借助git bash工具,生成秘钥. 2.拷贝公钥密码到码云仓库 3.设置码云仓库, 添加公钥证书, 4.获得gitee项目地址,将项目pull到本地 5.创建项目,并将项目文件拷贝到本级目录(或者直接将项目拷贝到该目录下), 如下,启动项目,可以正常访问. 6.如上,项目正常运行,提交代码. 上传成功,gitee仓库查看, 自此,完成了java代码上传到码云仓库. 7.下面介绍服务器部署项目方式. Maven clean Maven packa

宿主机访问操作docker方式

一.ssh访问 启动的时候需要把22端口隐射出来 docker run -t -i -d -p 8091:8080 -p 9527:22 --name tomcat4 tomcat-bases /bin/bash 二.nsenter 用来访问另一个进程的名字空间.nsenter要正常工作需要有root权限 为了连接到容器,你还需要找到容器的第一个进程的PID. docker inspect --format "{{ .State.Pid }}" <container-id>

华为机试题--操作系统任务调度问题

[问题] 操作系统任务调度问题.操作系统任务分为系统任务和用户任务两种.其中,系统任务的优先级 < 50,用户任务的优先级 >= 50且 <= 255.优先级大于255的为非法任务,应予以剔除.现有一任务队列task[],长度为n,task中的元素值表示任务的优先级,数值越小,优先级越高.函数scheduler实现如下功能,将task[]中的任务按照系统任务.用户任务依次存放到 system_task[]数组和 user_task[]数组中(数组中元素的值是任务在task[]数组中的下标

eNSP同网段PC机互联操作

system-viewvlan 10 / vlan 20quit (可打可不打)interface  Ethernet 0/0/1(0/0/2........)port link-type access  port default vlan 10 system-viewinterface GigabitEthernet 0/0/2port link-type trunkport trunk allow-pass vlan10  20 效果:同网段的PC机可以互ping,不同网段无法互ping.