使用 drbd 来实现两台服务器同时写入,实现 gitlab 的自动备份(主要是备份git仓库和gitlab数据库)。当主服务器挂掉后,如果不能及时修复主机,则启用从机,把从机转为主机。当之前的主机修复好后,再切换回来,数据依然会自动同步到最新的状态。
192.168.0.123 主机gitlab1
192.168.0.124 从机gitlab2
drbd 配置要求
drbd 需要使用单独的磁盘设备来实现同步,因此两台服务器都需要单独一个的磁盘(或用分区代替);
操作步骤
- 由于两台电脑均 ubuntun-server 16.04 系统,所有的磁盘空间全部给了根目录,根目录无法缩减出一个新的分区,因此需要重装系统,在装系统时单独创建一个新的分区 drbd0 作为 gialab 备份用;
- 目前 ubuntu-server 内核已集成 drbd(8.4.5) 功能,只需要安装管理工具
drbd8-utils
来操作 drbd,参考官网; - drbd 用到的分区有特殊保护机制,两台电脑要分别取消 drbd0 分区的挂载,否则开机时会进入急救模式,电脑无法正常开机。编辑
/etc/fstab
文件,注释掉 drbd0 的挂载; - 修改两台电脑的 host ,方便后面两台电脑互通。在两台机器的 hosts 文件里加入例如以下的内容:
192.168.0.123 gitlab1
192.168.0.124 gitlab2
- 在主机上生成ssh-key,并使用 ssh-copy-id 复制密钥到从机上,实现两台服务器 SSH 无密码登录;
- 两台服务器均配置 drbd (/etc/drbd.conf),资源名取名为 r0,后面的操作都是针对 r0 的:
global {
usage-count yes;
}
common {
protocol C;
syncer { rate 10M; }
}
resource r0 {
net {
cram-hmac-alg sha1;
shared-secret "abc123456";
}
on gitlab1 {
device /dev/drbd0;
disk /dev/sda9;
address 192.168.0.123:7898;
meta-disk internal;
}
on gitlab2{
device /dev/drbd0;
disk /dev/sda9;
address 192.168.0.124:7898;
meta-disk internal;
}
}
- 分别启动 drbd。(/etc/init.d/drbd start);
- 设置 gitlab1 为主,gitlab2 为从。只有主机才能挂载 drbd0 分区,这里我们挂载到
/var/gitlab-data
目录下; - 测试下在 gitlab1 中 /var/gialab-data 目录下写入一个文件是否会同步到 gitlab2 下,先取消主机的挂载,并设置为从,然后切换到从机,设置为主,挂载目录到
/var/gitlab-data
目录下,正常情况下会看到文件已同步过来,之后再把主从切回去。 - 分别安装 bitnami-gitlab(8.7) ,安装完后先不要启动,先做下配置的修改,包括修改gitlab的仓库的存储位置、postgresql的数据存储位置、gitalb的端口号、postgresql的密码等操作。我们把数据存储都放到 /var/gitlab-data 目录下,这样主机所有的写操作都能同步到从机上。
以下是具体的操作
gitlab 的代码仓库位置配置在如下两个文件中,修改 repos_path 为 `/var/gitlab-data/repositories`:
gitlab/apps/gitlab/htdocs/config/gitlab.yml
gitlab/apps/gitlab/gitlab-shell/config.yml
postgresql的配置在如下文件中, 对应修改 data_directory 为`/var/gitlab-data/postgresql/data`,hba_file、ident_file也同步修改:
gitlab/postgresql/data/postgresql.conf
另外还需要做以下修改:
gitlab/postgresql/data/postgresql.conf 修改 ipaddress 为星号,允许监听所有地址
gitlab/postgresql/data/pg_hba.conf 修改是否允许外部访问数据库,用来外部修改数据库密码
gitlab/apps/gitlab/htdocs/config/database.yml 修改密码为abc123456(切记在登录数据库修改完密码后才能修改这里的配置为新密码)
主从切换
gitbal1:$ unmout /var/gitlab-data
gitbal1:$ drbdadm secondary r0
gitbal2:$ drbdadm primary r0
gitbal2:$ mount /dev/drbd0 /var/gitlab-data
如果要修改 gitlab 服务器的 ip ,需要修改 dbrd 配置和 gitlab 配置,然后重启网络服务、 drbd 和 gitlab。
dbrd 修改 ip 的位置:
/etc/drbd.conf
gitlab 修改 ip 的位置:
apps/gitlab/gitlab-shell/config.yml
apps/gitlab/htdocs/config/gitlab.yml
drbd 其他命令
- 重启服务:/etc/init.d/drbd restart
- 查看运行详细信息: cat /proc/drbd
- 查看主从更新状态: drbdadm dstate r0
gitlab 的备份恢复操作参考 gitlab_backup_restore
文档