linux下DRBD安装、配置

DRBD安装准备

1、下载:(drbd官网 http://oss.linbit.com/drbd/)

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

2、为主机、备机添加准备一样大小的分区:

  • 查看硬盘信息:

    fdisk -l

  • 添加一块新的硬盘(/dev/sdb),然后使用下面命令分区(我这里是将新加的硬盘划分成了一个扩展分区,在其上又做了一次逻辑分区)

    fdisk /dev/sdb

1
2
3
4
5
6
7
8
9
10
11
[root@centOS2 cdrom]# fdisk -l
Disk /dev/sdb: 4294 MB, 4294967296 bytes
255 heads, 63 sectors/track, 522 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xb5f2a6aa

Device Boot Start End Blocks Id System
/dev/sdb1 1 522 4192933+ 5 Extended
/dev/sdb5 1 522 4192902 83 Linux

3、安装支持软件:

1)挂载安装光盘、配置yum源:

  • 在virtualbox上添加安装ios文件,然后设置硬盘启用,重启系统;
  • lsblk 查看光驱信息;
  • 把关盘挂载到/mnt/cdrom目录下;mount /dev/cdrom /mnt/cdrom
  • 配置yum源,修改/etc/yum.repos.d/CentOS-Media.repo

2)安装如下如见:

1
2
3
4
5
6
7
yum install gcc 
yum install kernel-devel
yum install kernel-headers
yum install flex 
yum install libxslt-devel
yum install libxslt
yum install perl

DRBD安装

解压、编译、安装。在/usr/local下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@centOS2 local]# tar -vxzf drbd-8.4.3.tar.gz
[root@centOS2 local]# cd drbd-8.4.3
[root@centOS1 drbd-8.4.3]# ./configure --prefix=/usr/local/drbd --with-km
[root@centOS1 drbd-8.4.3]# make KDIR=/usr/src/kernels/2.6.32-504.el6.x86_64/
[root@centOS1 drbd-8.4.3]# make install
[root@centOS1 drbd-8.4.3]# mkdir -p /usr/local/drbd/var/run/drbd
[root@centOS1 drbd-8.4.3]# cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/rc.d/init.d/
[root@centOS1 drbd-8.4.3]# chkconfig --add drbd
[root@centOS1 drbd-8.4.3]# chkconfig drbd on
[root@centOS1 drbd-8.4.3]# cd drbd
[root@centOS1 drbd]# cp drbd.ko /lib/modules/`uname -r`/kernel/lib/
[root@centOS1 drbd]# depmod ## 更新内核包关联文件modules.dep
[root@centOS1 drbd]# modprobe drbd ##安装内核模块
[root@centOS1 drbd]# lsmod | grep drbd ##查看模块是否加载成功
drbd 365675 0
libcrc32c 1246 1 drbd

DRBD配置

1、DRBD简介:
DRBD的全称为:DistributedReplicatedBlockDevice(DRBD)分布式块设备复制,DRBD是由内核模块和相关脚本而构成,用以构建高可用性的集群。其实现方式是通过网络来镜像整个设备。它允许用户在远程机器上建立一个本地块设备的实时镜像。与心跳连接结合使用,也可以把它看作是一种网络RAID。

2、DRBD工作机制:
Drbd负责接收数据,把数据写到本地磁盘,然后发送给另一个主机。另一个主机再将数据存到自己的磁盘中。目前,drbd每次只允许对一个节点进行读写访问,这对于通常的故障切换高可用性集群来讲已经足够用了。以后的版本将支持两个节点进行读写存取。

3、DRBD协议说明:

  • 数据一旦写入磁盘并发送到网络中就认为完成了写入操作
  • 收到接收确认就认为完成了写入操作
  • 收到写入确认就认为完成了写入操作

4、配置:(官方文档介绍:http://www.drbd.org/users-guide-8.4/)
1)drbd的配置文件在 /usr/local/drbd/etc/drbd.conf,内容如下:

# You can find an example in /usr/share/doc/drbd…/drbd.conf.example
include “drbd.d/global_common.conf”;
include “drbd.d/*.res”;

由此可见:主配置文件里面已经包含了全局配置文件和drbd目录下以.res结尾的文件。可以在global_common.conf中配置一些全局的设置(如protocol C;),也可以在.res文件中配置。

global_common.conf内容如下:

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
global {
usage-count yes; #是否参加drbd的使用者统计,默认此选项为yes
\# minor-count dialog-refresh disable-ip-verification
}
common {
protocol C; #使用drbd的同步协议
handlers {
\# These are EXAMPLE handlers only.
\# They may have severe implications,
\# like hard resetting the node under certain circumstances.
\# Be careful when chosing your poison.
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 degr-wfc-timeout outdated-wfc-timeout wait-after-sb
}
options {
\# cpu-mask on-no-data-accessible
}
disk {
on-io-error detach; #配置I/O错误处理策略为分离
\# size max-bio-bvecs on-io-error fencing disk-barrier disk-flushes
\# disk-drain md-flushes resync-rate resync-after al-extents
\# c-plan-ahead c-delay-target c-fill-target c-max-rate
\# c-min-rate disk-timeout
}
net {
\# protocol timeout max-epoch-size max-buffers unplug-watermark
\# connect-int ping-int sndbuf-size rcvbuf-size ko-count
\# allow-two-primaries cram-hmac-alg shared-secret after-sb-0pri
\# after-sb-1pri after-sb-2pri always-asbp rr-conflict
\# ping-timeout data-integrity-alg tcp-cork on-congestion
\# congestion-fill congestion-extents csums-alg verify-alg
\# use-rle
}
syncer {
rate 1024M; #设置主备节点同步时的网络速率
}
}

2)drbd.d目录下新建资源文件(drbd.res)
在node1、node2 上分别建立drbd.res:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@node1 ~]# vim /usr/local/drbd/etc/drbd.d/drbd.res
resource  r1 {   #这个r1是定义资源的名字
protocol C;
on  centOS {            #on开头,后面是主机名称
device    /dev/drbd0;  #drbd设备名称
disk      /dev/sdb5;   #drbd0使用的磁盘分区为sdb1
address   10.0.0.105:7789; #设置drbd监听地址与端口
meta-disk  internal;
}
on  centOS2 {            #on开头,后面是主机名称
device    /dev/drbd0;  #drbd设备名称
disk      /dev/sdb5;   #drbd0使用的磁盘分区为sdb1
address   10.0.0.106:7789; #设置drbd监听地址与端口
meta-disk  internal;
}
}

3)在node1、node2 上初始化资源、启动drbd:
1
2
3
4
5
6
7
8
9
10
11
12
13
[root@centOS1 drbd.d]# drbdadm create-md r1
DRBD module version: 8.4.6
userland version: 8.4.3
you should upgrade your drbd tools!
Writing meta data...
initializing activity log
NOT initializing bitmap
New drbd meta data block successfully created.
success
启动
[root@centOS1 drbd.d]# service drbd start
查看状态
[root@centOS1 drbd.d]# netstat -anput|grep 7789

4)操作drbd:

  • 查看节点角色状态:

    [root@centOS1 drbd.d]# drbdadm role r1
    注:第一次启动drbd时,两个drbd节点默认都处于Secondary状态

  • 由于默认没有主次节点之分,因而需要设置两个主机的主次节点,选择需要设置为主节点的主机,然后执行如下命令:

    [root@node1 /]# drbdadm – –overwrite-data-of-peer primary all

第一次执行完此命令后,在后面如果需要设置哪个是主节点时,就可以使用另外一个命令:drbdadm primary r1 (这个r1是定义资源的角色)或者drbdadm primary all

这时,再查看节点状态,就为 Primary/Secondary

  • 查看同步状态

    [root@node1 /]# cat /proc/drbd
    会把主机上的数据传到备机,开始会显示同步进度,过一会显示状态都是”实时”,表示数据同步完成了。接下来就可以使用DRBD了。

DRBD使用(测试)

你现在可以把主机上的DRBD设备挂载到一个目录上进行使用,备机的DRBD设备无法被挂载,因为它是用来接收主机数据的,由DRBD负责操作.

1)格式化文件系统(文件格式根据自己的系统环境选择)

[root@node1 ~]# mkfs.ext4 /dev/drbd0

2)挂载此文件系统

[root@node1 ~]# mkdir /data
[root@node1 ~]# mount /dev/drbd0 /data/

在挂载data目录中创建一个测试文件,然后卸载挂载目录,然后切换主备节点,在备用节点上查看刚刚建立的测试文件还是否存在

Node1:

[root@node1 ~]# mkdir /data/test
将node1变为备用节点
[root@node1 ~]# umount /data/
[root@node1 ~]# drbdadm secondary r1
[root@node1 ~]# drbdadm role r1
Secondary/Secondary

Node2上:

将node2变为主节点
[root@node2 ~]# drbdadm primary r1
[root@node2 ~]# drbdadm role r1
Primary/Secondary
挂载设备,然后看文件是否存在
[root@node2 ~]# mount /dev/drbd0 /mnt/
[root@node2 ~]# cd /mnt/
[root@node2 mnt]# ls
test
OK! 到这里已经算是完成了!

同样,在Node2上建立文件,然后

  • 卸载/mnt/:umount /mnt/
  • 将Node2降级成备用节点:drbdadm secondary r1
  • 在Node1上升级为主机节点:drbdadm primary r1
  • 在Node1上挂载:mount /dev/drbd0 /data

会发现Node2上的文件也同步到了Node1上。

3)umount时,如果提示device is busy,使用下面方法解决:
fuser -m /data
显示:/data: 25023c
然后kill -9 25023 即可