使用 drbd 来实现两台服务器同时写入,实现 gitlab 的自动备份(主要是备份git仓库和gitlab数据库)。当主服务器挂掉后,如果不能及时修复主机,则启用从机,把从机转为主机。当之前的主机修复好后,再切换回来,数据依然会自动同步到最新的状态。

192.168.0.123 主机gitlab1192.168.0.124 从机gitlab2

drbd 配置要求

drbd 需要使用单独的磁盘设备来实现同步,因此两台服务器都需要单独一个的磁盘(或用分区代替);

操作步骤

  1. 由于两台电脑均 ubuntun-server 16.04 系统,所有的磁盘空间全部给了根目录,根目录无法缩减出一个新的分区,因此需要重装系统,在装系统时单独创建一个新的分区 drbd0 作为 gialab 备份用;
  2. 目前 ubuntu-server 内核已集成 drbd(8.4.5) 功能,只需要安装管理工具 drbd8-utils 来操作 drbd,参考官网;
  3. drbd 用到的分区有特殊保护机制,两台电脑要分别取消 drbd0 分区的挂载,否则开机时会进入急救模式,电脑无法正常开机。编辑/etc/fstab文件,注释掉 drbd0 的挂载;
  4. 修改两台电脑的 host ,方便后面两台电脑互通。在两台机器的 hosts 文件里加入例如以下的内容:
192.168.0.123 gitlab1
192.168.0.124 gitlab2
  1. 在主机上生成ssh-key,并使用 ssh-copy-id 复制密钥到从机上,实现两台服务器 SSH 无密码登录;
  2. 两台服务器均配置 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;
    }
}
  1. 分别启动 drbd。(/etc/init.d/drbd start);
  2. 设置 gitlab1 为主,gitlab2 为从。只有主机才能挂载 drbd0 分区,这里我们挂载到/var/gitlab-data目录下;
  3. 测试下在 gitlab1 中 /var/gialab-data 目录下写入一个文件是否会同步到 gitlab2 下,先取消主机的挂载,并设置为从,然后切换到从机,设置为主,挂载目录到/var/gitlab-data目录下,正常情况下会看到文件已同步过来,之后再把主从切回去。
  4. 分别安装 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 其他命令

  1. 重启服务:/etc/init.d/drbd restart
  2. 查看运行详细信息: cat /proc/drbd
  3. 查看主从更新状态: drbdadm dstate r0

gitlab 的备份恢复操作参考 gitlab_backup_restore 文档