Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1021741
  • 博文数量: 361
  • 博客积分: 25
  • 博客等级: 民兵
  • 技术积分: 1759
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-22 23:18
个人简介

学海无涯 个人blog lnmps.com 新站

文章分类

全部博文(361)

文章存档

2017年(1)

2015年(2)

2014年(55)

2013年(303)

分类: LINUX

2013-11-29 18:15:05

一、DRBD简介及复制架构

drbd(DistributedReplicatedBlockDevice) 是一种基于软件的,无共享的,复制的存储解决方案,在服务器之间的对块设备(硬盘,分区,逻辑卷等)进行镜像备份,drbd工作在内核之中,drbd工作 的位置在文件系统的buffer-cache和磁盘调度器之间,通过tcp/ip发给另一个主机,再由对方的主机通过tcp/ip传递给drbd再存储在 本地磁盘上,类似于RAID-1功能。

drbd的框架图如下:

二、DRBD的模式

1.主/从

 primary可读,可写,可挂载

 secondary不可挂载

2.双主(需要结合集群文件系统)

三、DRBD之protocol

A:Async,异步,本地磁盘写入完成即表示完成同步

B:semisync,半同步,本地写入+对方tcp/ip收到即表示同步

C:sync,同步,本地写入+对方完全写入磁盘即表示同步

四、实验DRBD主从配置:

1.软件包:

 1.用户空间配置包brbd-83-8.3.15-2.el5.ceonts.i386.rpm

 2.内核程序包kmod-drbd83-8.3.13-1.el5.centos.i686.rpm

(从2.6.33开始将drbd整合进内核中)

2.主配置文件:

 1./etc/drbd.conf##主配置文件,通过include来包含了global_common.conf和*.res

 2./etc/drbd.d/global_common.conf

 3./etc/drbd.d/*.res

3.以下是配置文件的详细内容:

①/etc/drbd.conf

1
2
3
# You can find an example in  /usr/share/doc/drbd.../drbd.conf.example
include "drbd.d/global_common.conf";
include "drbd.d/*.res";

②/etc/drbd.d/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
global {
usage-count no;   ##用于开发者统计装机量统计
# minor-count dialog-refresh disable-ip-verification
}
common {
protocol C;  ##使用protocol模式
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 degr-wfc-timeout outdated-wfc-timeout wait-after-sb
}
disk {   ##磁盘出现问题,如何处理
on-io-error detach;
# fencing use-bmbv no-disk-barrier no-disk-flushes
# no-disk-drain no-md-flushes max-bio-bvecs
}
net {  ##定义网络传输,例如加密等信息
cram-hmac-alg "sha1";
shared-secret "123456";
# sndbuf-size rcvbuf-size timeout connect-int ping-int ping-timeout max-buffers
# max-epoch-size ko-count allow-two-primaries cram-hmac-alg shared-secret
# after-sb-0pri after-sb-1pri after-sb-2pri data-integrity-alg no-tcp-cork
}
syncer {  ##同步速率
rate 1000M;
# rate after al-extents use-rle cpu-mask verify-alg csums-alg
}
}

③/etc/drbd.d/mydrbd.res

1
2
3
4
5
6
7
8
9
10
11
12
resource mydrbd {
##全局统一变量,可以一起写在这里也可以写在每个节点里面
device   /dev/drbd0;  ##定义drbd的设备号
disk     /dev/loop0;  ##这里使用的是losetup方式模拟块设备
meta-disk   internal; ##元数据保存位置
on node1.redhat.com {   #定义节点1的位置和端口
address 192.168.220.100:7789;
}
on node2.redhat.com {   #定义节点2的位置和端口
address 192.168.220.101:7789;
}
}

4.资源的初始化,挂载使用,主从切换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1.初始化资源
# drbdadm create-md mydrbd
2.开启drbd服务
# service drbd start
(两边需要同时开启,不然一方会卡住)
3.查看drbd状态信息
# cat /proc/drbd  or  drbd-overview
4.设置drbd的primary节点(第一次)
# drbdsetup /dev/drbd0 primary -o  or drbdadm -- --overwrite-data-of-peer primary mydrbd
5.格式化挂载(首次挂载使用才需要格式化)
# mke2fs -j /dev/drbd0
mount /dev/drbd0 /path/to/file
6.primary和secondary倒换
# drbdadm secondary mydrbd
# drbdadm primary  mydrbd
# mount /dev/drbd  /path/to/file
阅读(939) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~