【背景】 

drbd是内核级别 文件--drbd--磁盘。

优点:速度快,基于block快进行同步

缺点:闲置一块从节点的磁盘。


【实践环境】

准备环境

drbd学习_第1张图片

操作系统和内核:

[root@master ~]# cat /etc/issue |head -1

entOS release 6.4 (Final)

[root@master ~]# uname -r

2.6.32-358.el6.x86_64



master网卡配置:

[root@master ~]# ifconfig  |grep -A1 "eth"

eth0      Link encap:Ethernet  HWaddr 00:0C:29:65:14:0F  

          inet addr:192.168.100.10  Bcast:192.168.100.255  Mask:255.255.255.0

--

eth1      Link encap:Ethernet  HWaddr 00:0C:29:65:14:19  

          inet addr:10.0.0.7  Bcast:10.0.0.255  Mask:255.255.255.0



slave网卡配置

[root@slave ~]# ifconfig  |grep -A1 "eth"

eth0      Link encap:Ethernet  HWaddr 00:0C:29:B7:34:9B  

          inet addr:192.168.100.13  Bcast:192.168.100.255  Mask:255.255.255.0

--

eth1      Link encap:Ethernet  HWaddr 00:0C:29:B7:34:A5  

          inet addr:10.0.0.8  Bcast:10.0.0.255  Mask:255.255.255.0




解析配置:/etc/hosts

10.0.0.7  master

10.0.0.8  slave


hostname配置:

[root@master etc]# hostname

master

[root@slave etc]# hostname

slave


防火墙配置:

[root@slave etc]# /etc/init.d/iptables status

iptables: Firewall is not running.

[root@slave etc]# getenforce 

Disabled


master磁盘配置(虚拟机添加一块磁盘并一个分区):

[root@master ~]# cat fdisk.txt 

n

p

1

1

+500M

w

[root@master ~]# fdisk /dev/sdb < fdisk.txt 

[root@master ~]# partprobe 

[root@master ~]# fdisk  -l |grep "/sdb1"

/dev/sdb1               1          65      522081   83  Linux


注意: (物理磁盘一定不能进行格式化挂载  因为需要存的是drbd meta文件格式)

slave磁盘配置同上:

......





【drbd的准备环境】

wget http://oss.linbit.com/drbd/8.4/drbd-8.4.3.tar.gz


【drbd的安装过程】

master 和slave同步操作

tar xvf drbd-8.4.3.tar.gz 
cd drbd-8.4.3
./configure --prefix=/usr/local/drbd --with-km
make KDIR=/usr/src/kernels/`uname -r`/
make install

注意:drbd是基于内核的,所以要编译进内核。内核的路径 /usr/src/kernels/`uname -r`/。

如果出问题,是否你的内核有过升级。



【加载drbd内核模块】

master和slave同步进行

[root@master ~]# modprobe drbd

[root@master ~]# lsmod |grep drbd

drbd                  325754  0 

libcrc32c               1246  1 drbd




【配置drbd-配置文件】

cd /usr/local/drbd/etc/

> drbd.conf

master和slave配置一样如下:

global {

       usage-count no;

       # minor-count dialog-refreshdisable-ip-verification

}


common {

       protocol C;

       syncer {

               rate  100M;

               verify-alg sha1;

       }


}


resource  data {


       disk {

            on-io-error detach;

       }

#节点1

       on master {

              device  /dev/drbd0;   #drbd的裸设备

              disk   /dev/sdb1;     #数据在此分区

              address 10.0.0.7:7788;

              meta-disk  internal     ;

              }


#节点2

       on slave {

              device  /dev/drbd0;

              disk   /dev/sdb1;

              address 10.0.0.8:7788;

              meta-disk  internal  ;

              }

}



【启动drbd-】

master和slave上创建drbd meta元数据

[root@master etc]# drbdadm create-md data 

Writing meta data...

initializing activity log

NOT initializing bitmap

New drbd meta data block successfully created.


解释:对data这个资源初始化drbd



master和slave上启动data资源

drbdadm up data

[root@master etc]# drbdadm up data

Device '0' is configured!

Command 'drbdmeta 0 v08 /dev/sdb1 internal apply-al' terminated with exit code 20


注意:以上信息是正常的。

[root@master etc]# cat /proc/drbd 

version: 8.4.3 (api:1/proto:86-101)

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@master, 2016-08-28 11:49:02

 0: cs:WFConnection ro:Secondary/Unknown ds:Inconsistent/DUnknown C r----s

    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:522028




过一会后master和slave都需要出现以下信息:

[root@master etc]# cat /proc/drbd 

version: 8.4.3 (api:1/proto:86-101)

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@master, 2016-08-28 11:49:02

 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----

    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:522028





【设置主节点】

[root@master etc]# drbdadm primary --force data 

[root@master etc]# cat /proc/drbd 

version: 8.4.3 (api:1/proto:86-101)

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@master, 2016-08-28 11:49:02

 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r---n-

    ns:43140 nr:0 dw:0 dr:50848 al:0 bm:2 lo:1 pe:2 ua:8 ap:0 ep:1 wo:f oos:480044

        [>...................] sync'ed:  8.6% (480044/522028)K

        finish: 0:00:57 speed: 8,396 (8,396) K/sec



注意:看到此时数据正在同步。

最后

maste端的状态

cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----

slave端的状态

0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----



【格式化磁盘存取数据】

mkfs.ext4 /dev/drbd0 

注意:

1 是对裸设备进行格式化,而不是物理磁盘。

2 只需要对maser端的裸设备进行格式化,因为格式化信息也会被同步到slave端的。

完成后master端和slave的ns:数据  值是一一样的



挂载

mount /dev/drbd0 /mnt/


【数据测试】

cd /mnt

[root@master mnt]# touch {a..f}


其实看到

cat /proc/drbd的状态正常就可以了




【非必要的测试手段1 ---验证slave端有数据了】
drbdadm down data

mount /dev/sdb1 /mnt/

[root@slave drbd-8.4.3]# cd /mnt/

[root@slave mnt]# ll

total 12

-rw-r--r-- 1 root root     0 Aug 28 13:34 a

-rw-r--r-- 1 root root     0 Aug 28 13:34 b

-rw-r--r-- 1 root root     0 Aug 28 13:34 c

-rw-r--r-- 1 root root     0 Aug 28 13:34 d

-rw-r--r-- 1 root root     0 Aug 28 13:34 e

-rw-r--r-- 1 root root     0 Aug 28 13:34 f

drwx------ 2 root root 12288 Aug 28 13:29 lost+found



此时表示:数据完全同步过来了。


恢复slave作为secondary 角色


[root@slave /]# umount /mnt/

[root@slave /]# drbdadm up data


[root@slave /]# cat /proc/drbd 

version: 8.4.3 (api:1/proto:86-101)

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@slave, 2016-08-28 11:53:45

 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----

    ns:0 nr:24 dw:24 dr:0 al:0 bm:2 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0




【测试手段2--主备切换】


暂时省略....








【drbd的常用命令】

查看drbd的状态

cat /proc/drbd

命令查看drbd的配置文件

drbdadm dump all

查看角色

drbdadm role all






注意:

1 即使在secondary被down的情况下,primary端有有新的数据。在seconary恢复后,新的数据还会继续同步到secondary的








1 (如果之前做个磁盘实验)

需要清掉drbd meta数据

dd if=/dev/zero of=/dev/sdb1 count=1 bs=100M

注意:


2 启动报错

[root@master etc]# drbdadm up data

/usr/local/drbd/var/run/drbd: No such file or directory

/usr/local/drbd/var/run/drbd: No such file or directory


解决

mkdir -p /usr/local/drbd/var/run/drbd






4 创建磁盘

fdisk 分隔一块/dev/sdb1


(一定不能进行格式化挂载  因为存的是drbd meta文件格式)

5 创建drbd meta

drbdadm create-md data

起资源

启动服务

启动所有资源

drbdadm up all

或者 

drbdadm up data


6 如何使用

#把master节点作为主节点

Drbdadm primary --force data

#只能在一个节点上进行

mkfs.ext4 /dev/drbd0

#挂载drbd的裸设备进行使用

mount /dev/drbd0 /mnt/



7 常用查看

modprobe drbd
lsmod |grep drbd

drbdadm dump all

cat /proc/drbd

drbdadm role data



#变成secondary 

drbdadm secondary data