DRBD安装准备
1、下载:(drbd官网 http://oss.linbit.com/drbd/)
2、为主机、备机添加准备一样大小的分区:
查看硬盘信息:
fdisk -l
添加一块新的硬盘(/dev/sdb),然后使用下面命令分区(我这里是将新加的硬盘划分成了一个扩展分区,在其上又做了一次逻辑分区)
fdisk /dev/sdb
1 | [root@centOS2 cdrom]# fdisk -l |
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
7yum 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
46global {
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 即可