2011年(7)
分类: LINUX
2011-09-18 17:41:02
分布式复制块设备DRBD
Distrbuted Replicated Block Device
一).关于DRBD:
简介
开发公司:linbit
遵循GPL协定的开源软件
2.6.33以后被做进内核
在内核内工作
一个内核的子系统,补充了内核关于I/O方面的功能
工作原理:
node1,node2双方各提供一个共享分区
node1上的存储网页文件在底层自动复制给node2
复制过程为块级别,在内核中完成
配置工具:
drdbadm(两段式:内核/用户)
用以定义将哪些分区配置为DRBD的块设备,或者监控他们的工作状态
主配置文件:/etc/drbd.conf
drbdsetup
drbdmeta
DRBD特点:
software-based 基于软件
shared-nothing 无共享
between servers
服务器之间
replicated storage solution mirroring the content of block devices
镜像块设备(硬盘,分区,逻辑卷)内容的同步存储解决方案
DRBD mirrors data
实现数据镜像的特点:
In real time 实时
Transparently 透明
Synchronously or asynchronously 可同步也可异步或半同步
附:
复制过程分为同步和异步:需要对方确认为同步,不需要为异步。
二).一些基础概念:
一.资源:
对于DRBD资源不是流转的,它实际是一个DRBD完整的架构信息。
资源有好几种组件组成:
1.Resource name资源的名字:
DRBD节点识别DRBD设备用到的,每一个资源名用以标示一个独立的DRBD架构
必须使用纯粹的ascII码来标示,并且不能包含任何空白字符
DRBD设备必须建立在资源上,资源必须用资源名进行标示
2.DRBD device设备:
在DRBD中,资源被定义为DRBD的块设备,这个设备是虚拟的,所以他必须有对应的定义文件。
所有设备的主设备号是147
每一个块设备都被命名为/dev/drdbn,其中n为该设备的次设备号
3.Disk configuration 磁盘配置相关信息
指定为了创建这个DRBD设备需要用到的哪个节点的哪个分区,以及有关DRBD的源数据信息的位置
4.Network configuration 网络相关的配置信息
关于网络的传输过程中是否需要认证
用于指定两者之间的可用带宽
二.资源的角色
Primary 主节点
unrestrictedly 读写 可以裸I/O
Secondary 从节点
不能挂载,不能读写
只接受主节点的读写信息,不允许用户或其他本节点任何应用程序的读写信息
两者可以互换
类似于MYSQL为数据提供一种通路
三.DRBD的模型
单主节点(主从)
任何资源只能在主节点被读写操作
文件系统可以使任何常见的文件系统
主要为HA提供解决方案
双主节点(主主)
任何一个节点实现对DRBD的读写,但是双主模型必须要结合集群文件系统来实现,来解决加锁问题
只在DRBD8.0以后才支持
gfs ocfs2
四.同步和异步
Protocol(关键字,定义同步或异步)
A异步
只传输,不考虑从节点
不可靠,但性能好
B半同步(内存同步)
只要传输到内存中,就宣布成功
两个节点同时断电会造成数据丢失
C同步
只有数据存储在磁盘上,才宣布存储完成
最可靠,DRBD默认使用
附:关于断电丢失数据的解决方法:可以把DRBD数据存放到RAID上,RAID要带电池
DRBD只能提供99.5%的高可用性,可以满足一般企业的需要。
五.脑裂split brain与解决方法
双节点都无法探测到彼此,结果导致双方都认为自己成为主节点,各自进行读写,然后当双方恢复通讯时,双方数据无法吻合。
解决方法:
1.最近刚刚成为主节点的新人数据丢弃,早的覆盖晚的
2.晚的覆盖早的,越晚写的数据越新
3.谁改的少丢弃谁的
4.手动选择
三)安装并配置一个DRBD设备
前提:
1.两个节点通过主机名访问彼此,两个主机名必须通过uname -n访问彼此
2.双方节点各自准备一个大小一样的磁盘分区
3.各自安装软件
注意:
DRBD与kmod软件包版本必须一样
关于配置文件:
配置文件/etc/drbd.conf
两个字段:
grobal 全局属性
common 定义每一个资源用到的共享配置,非必须
定义resource文件
resource web(资源名) {
on node1.a.org {
device /dev/drbd0;(对应设备)
disk /dev/sda4;
address (监听在哪个端口上互相通信)
meta-disk internel;(元数据)
一.分别创建分区
node1:
fdisk /dev/sda
4
n
w
partprode /dev/sda
node2:同上
二.两个节点分别下载安装软件
lftp 172.16.0.1(这里我在局域网中下载的软件包,用户可根据自己情况选择合适的网址进行下载)
cd /pub/Source/drbd
mget *
bye
yum --localinstall -y --nogpgcheck *.rpm
node2节点同上
三.配置文件
1.
cd /user/share/doc/drbd83-8.3.8/
cp /drbd.conf /etc
2.配置/etc/drbd.d/global-common.conf
global {
usage-count no;
# minor-count dialog-refresh disable-ip-verification
}
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;
fencing resource-only;
}
net {
cram-hmac-alg "sha1";
shared-secret "mydrbdlab";
}
syncer {
rate 100M;
}
}
可以注释掉以下三行
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";
3.定义一个资源
vim /etc/drbd.d/web.res
resource web {
on node1.a.org {
device /dev/drbd0;
disk /dev/sda5;
address 172.16.44.41:7789;
meta-disk internal;
}
on node2.a.org {
device /dev/drbd0;
disk /dev/sda5;
address 172.16.44.42:7789;
meta-disk internal;
}
}
scp -r /etc/drbd.conf /etc/drbd.d node2:/etc/drbd.conf
四.初始化与角色分配
1.初始化资源
drbdadm create-md web
2.启动服务
/etc/init.d/drbd start
3.查看启动状态:
cat /proc/drbd
4.在node2上完成同样配置,但注意,双方节点必须同时启动起来
5.将其中一个节点设置为主节点
drbdadm -- --overwrite-data-of-peer primary web
五.创建文件系统并挂载使用
文件系统的挂载只能在Primary节点进行,因此,也只有在设置了主节点后才能对drbd设备进行格式化:
mke2fs -j -L DRBDWEB /dev/drbd0
mkdir /web
mount /dev/drbd0 /web
cd /web
vim index.html
6、切换Primary和Secondary节点
对主Primary/Secondary模型的drbd服务来讲,在某个时刻只能有一个节点为Primary,因此,要切换两个节点的角色,只能在先将原有的Primary节点设置为Secondary后,才能原来的Secondary节点设置为Primary:
Node1:
cp -r /etc/drbd.* /Web
umount /Web
drbdadm secondary web
查看状态:
drbd-overview
0:web Connected Secondary/Secondary UpToDate/UpToDate C r----
Node2:
drbdadm primary web
drbd-overview
0:web Connected Primary/Secondary UpToDate/UpToDate C r----
mkdir /mnt/drbd
mount /dev/drbd0 /Web
由于使用DRBD和pacemaker以及Mysql搭配构建集群一直未能实现,决定先将此博客前半段放出,在下一篇博客继续为大家讲解DRBD+pacemaker与mysql的组合使用。