Jusene's Blog

DRBD 分布式复制块设备

字数统计: 1.3k阅读时长: 6 min
2017/05/19 Share

DRBD

DRBD是一种块设备,属于DAS,可以被应用在高可用(HA)中,类似于raid 1的镜像功能,当写入数据时,数据会被工作在内核中DRBD模块通过网络发送到网络中的另一台主机。常工作于主备模式,数据实时同步,当主节点出现故障,备节点的可切换成主节点立马恢复工作。

DRBD工作模型

DRBD的工作特性:

  • 实时同步
  • 对用户透明
  • 可以实现同步和异步同步

数据同步存在三种模型:
protocol [A|B|C]:

  • A: Async 异步,相当于同步数据发送到主节点的tcp/ip协议栈就返回
  • B: Semi-Sync 半同步,相当于同步数据发送到备节点的tcp/ip协议栈返回
  • C: Sync 同步,将同步数据写入备节点磁盘才返回

工作类型:
主要工作在master/slave的模型,master工作的情况下,备节点不得挂载读写,否则文件系统奔溃。
dual master,双主模式,只有工作在集群文件系统的时候才可以使用,需要集群文件锁的信息层的支持。

安装DRBD

DRBD默认内核没有,我们需要第三方的加载内核模块支持:

1
centos 6
2
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
3
rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
4
yum install -y kmod-drbd84 drbd84-utils
5
6
centos 7
7
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
8
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
9
yum install -y kmod-drbd84 drbd84-utils

配置DRBD

配置文件:

1
/etc/drbd.conf
2
	/etc/drbd.d/global_common.conf: 提供全局配置,及多个drbd设备相同的配置
3
	/etc/drbd.d/*.res: 资源定义
4
5
	global: 全局属性,定义drbd自己的工作特性
6
	common: 通用特性,定义多组drbd设备的通用特性
7
	*。res: 资源特有特性

DRB配置实例

node1 10.211.55.48
node2 10.211.55.49

准备工作:

  1. 时间同步
  2. 主机名于hostname相同
  3. /etc/hosts解析主机名
  • node1

    1
    ~]#cat /etc/drbd.conf
    2
    include "drbd.d/global_common.conf";
    3
    include "drbd.d/*.res";
    4
    ~]# cat /etc/drbd.d/global_common.conf
    5
    global {
    6
            usage-count no;    
    7
    }
    8
    common {
    9
    	disk {  on-io-error detach;  #io出错的磁盘,摘掉
    10
    	}
    11
    	net {   cram-hmac-alg "sha1";   #加密算法
    12
                shared-secret "mydrbdlab";  #加密密钥
    13
                protocol C;    #工作模型
    14
        }
    15
        syncer {
    16
                rate 100M;     #同步速率
    17
    	}               
    18
    }
    19
    ~]# cat /etc/drbd.d/mystore.res
    20
    resource mystore {
    21
            device /dev/drbd0;
    22
            disk  /dev/sdb;
    23
            meta-disk internal;
    24
            on node1 {
    25
            address 10.211.55.48:7789;
    26
    }
    27
            on node2 {
    28
            address 10.211.55.49:7789;
    29
    }
    30
    31
    }
    32
    ~]# scp /etc/drbd.d/{mystore.res,global_common.conf} node2:/etc/drbd.d
    33
    初始化资源
    34
    ~]# drbdadm create-md mystore;ssh node2 'drbdadm create-md mystore'
    35
    启动服务
    36
    ~]# service drbd start;ssh node2 "service drbd start"
    37
    ~]# cat /proc/drbd
    38
    version: 8.4.9-1 (api:1/proto:86-101)
    39
    GIT-hash: 9976da086367a2476503ef7f6b13d4567327a280 build by mockbuild@Build64R6, 2016-12-13 18:38:15
    40
     0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
    41
        ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:10485404
    42
    ~]# drbd-overview
    43
     0:mystore  Connected Secondary/Secondary Inconsistent/Inconsistent C r---- 
    44
    两个都是备节点,切换下成主节点
    45
    在要设置为Primary的节点上可以执行如下命令的一个:
    46
    (1) ~]# drbdsetup /dev/drbd0 primary –o
    47
    (2) ~]# drbdadm -- --overwrite-data-of-peer primary mystore
    48
    (3) ~]# drbdadm primary --force mystore
    49
    50
    设有主备节点后,开始位对齐:
    51
    ~]# cat /proc/drbd
    52
    version: 8.4.9-1 (api:1/proto:86-101)
    53
    GIT-hash: 9976da086367a2476503ef7f6b13d4567327a280 build by mockbuild@Build64R6, 2016-12-13 18:38:15
    54
     0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
    55
        ns:1228800 nr:0 dw:0 dr:1229464 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:9256604
    56
            [=>..................] sync'ed: 11.8% (9036/10236)M
    57
            finish: 0:03:51 speed: 39,936 (39,636) K/sec
    58
    59
    等位对齐,我们就可以在主节点挂载使用块设备了:
    60
    ~]# cat /proc/drbd
    61
    version: 8.4.9-1 (api:1/proto:86-101)
    62
    GIT-hash: 9976da086367a2476503ef7f6b13d4567327a280 build by mockbuild@Build64R6, 2016-12-13 18:38:15
    63
     0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    64
        ns:24 nr:10619544 dw:21104972 dr:1045 al:2 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
    65
    66
    ~]# mkfs.ext4 /dev/drbd0
    67
    ~]# mount /dev/drbd0 /mnt
    68
    ~]# cd /mnt
    69
    ~]# echo 'hello drdb' > hello
    70
    ~]# cd ..
    71
    ~]# umount /mnt
    72
    ~]# drbdadm secondary mystore
  • node2

    1
    ~]# drbdadm primary mystore
    2
    ~]# cat /proc/drbd
    3
    version: 8.4.9-1 (api:1/proto:86-101)
    4
    GIT-hash: 9976da086367a2476503ef7f6b13d4567327a280 build by mockbuild@Build64R6, 2016-12-13 18:38:15
    5
     0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    6
        ns:24 nr:10619544 dw:21104972 dr:1045 al:2 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
    7
    8
    ~]# mount /dev/drbd0 /mnt
    9
    ~]# cd /mnt
    10
    ~]# ll
    11
    total 20
    12
    -rw-r--r--. 1 root root    11 May 19 03:53 hello
    13
    drwx------. 2 root root 16384 May 19 03:52 lost+found
    14
    ~]# cat hello
    15
    hello drdb

我们切换DRBD的主从模式挂载都是很麻烦,所以在这个时候我们可以考虑使用高可用集群的crm来管理DRBD资源。

CATALOG
  1. 1. DRBD
    1. 1.1. DRBD工作模型
    2. 1.2. 安装DRBD
  2. 2. 配置DRBD
    1. 2.1. DRB配置实例