DRBD原理知识
一、DRBD的工作模式
1、主从模型master/slave(primary/secondary)
2、双主模型 dula primary(primary/primary)
二、DRBD的复制模型
复制协议:
三、drbd的配置(主从模式)
实验环境:
1、准备工作
1 2 | # drbd 2个节点之间通信是基于主机名的 # 设置主机名和主机名解析文件 |
1 | # 准备好大小相同的磁盘,这里使用大小相同的分区代替。只需划好分区就好,不需要格式化。 |
2、安装软件包
1 2 3 4 5 6 7 8 9 10 | drbd共有两部分组成:内核模块和用户空间的管理工具。 其中drbd内核模块代码已经整合进Linux内核2.6.33以后的版本中,因此,如果内核版本高于 此版本的话,只需要安装管理工具即可;否则,您需要同时安装内核模块和管理工具两个软件包, 并且此两者的版本号一定要保持对应。 # 对应的内核模块的名字分别为 drbd-kmod 注意: drbd和drbd-kmdl的版本要对应;另一个是drbd-kmdl的版本要与当前系统的内核版本( uname -r)相 对应。 下载地址: 直接安装即可。 |
3、配置drbd
配置文件说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | drbd的主配置文件为 /etc/drbd .conf;为了管理的便捷性,目前通常会将些配置文件分成多个部分, 且都保存至 /etc/drbd .d/目录中, 主配置文件中仅使用 "include" 指令将这些配置文件片断整合起来。通常, /etc/drbd .d目录中的配置 文件为global_common.conf和所有以.res结尾的文件。 其中global_common.conf中主要定义global段和common段,而每一个.res的文件用于定义一个资源。 在配置文件中,global段仅能出现一次,且如果所有的配置信息都保存至同一个配置文件中而不分开 为多个文件的话,global段必须位于配置文件的最开始处。 目前global段中可以定义的参数仅有minor-count, dialog-refresh, disable-ip-verification 和usage-count。 common段则用于定义被每一个资源默认继承的参数,可以在资源定义中使用的参数都可以在common段 中定义。 实际应用中,common段并非必须,但建议将多个资源共享的参数定义为common段中的参数以降低配置 文件的复杂度。 resource段则用于定义drbd资源,每个资源通常定义在一个单独的位于 /etc/drbd .d目录中的以.res结 尾的文件中。 资源在定义时必须为其命名,名字可以由非空白的ASCII字符组成。 每一个资源段的定义中至少要包含两个host子段,以定义此资源关联至的节点,其它参数均可以从 common段或drbd的默认中进行继承而无须定义。配置过程: ###############下面的操作在director1.example.com上完成。 # 1 配置/etc/drbd.d/global-common.conf global { usage-count no; # 是否为drbd官方收集数据 # minor-count dialog-refresh disable-ip-verification } # common是各个资源共用的选项 common { protocol C; # 复制协议 handlers { pri-on-incon-degr " /usr/lib/drbd/notify-pri-on-incon-degr .sh; /usr/lib/drbd/notify-emergency-reboot .sh; echo b > /proc/sysrq-trigger ; reboot -f"; pri-lost-after-sb " /usr/lib/drbd/notify-pri-lost-after-sb .sh; /usr/lib/drbd/notify-emergency-reboot .sh; echo b > /proc/sysrq-trigger ; reboot -f"; local -io-error " /usr/lib/drbd/notify-io-error .sh; /usr/lib/drbd/notify-emergency-shutdown .sh; echo o > /proc/sysrq-trigger ; halt -f"; # fence-peer "/usr/lib/drbd/crm-fence-peer.sh"; # split-brain "/usr/lib/drbd/notify-split-brain.sh root"; # out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root"; # before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k"; # after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh; } startup { #wfc-timeout 120; #degr-wfc-timeout 120; } disk { on-io-error detach; # 发生i/o错误的处理方法,detach将镜像磁盘直接拔除 #fencing resource-only; } net { cram-hmac-alg "sha1" ; shared-secret "mydrbdlab" ; } syncer { rate 1000M; } } 2、定义一个资源 /etc/drbd .d /test .res,内容如下: resource test { on director1.example.com { device /dev/drbd0 ; disk /dev/sda3 ; address 172.16.10.50:7789; meta-disk internal; } on director2.example.com { device /dev/drbd0 ; disk /dev/sda3 ; address 172.16.10.51:7789; meta-disk internal; } } |
1 | scp /etc/drbd .d/* director2.example.com: /etc/drbd .d |
在两个节点上初始化已定义的资源并启动服务
1 2 3 4 5 | 1)初始化资源,在 director1 和 director2上分别执行: drbdadm create-md test 2)启动服务,在 director1 和 director2 上分别执行: /etc/init .d /drbd start |
完成以上操作后,继续下面操作。同步metadata(元数据)
1 2 | # 将director1.example.com 节点设置为Primary。在要设置为Primary的节点上执行如下命令: drbdadm primary --force test |
接下来创建文件系统,挂载使用
1 2 | mke2fs -t ext4 -L DRBD /dev/drbd0 mount /dev/drbd0 /mnt/ |