CentOS 6.x系统要升级到最新的内核才支持
CentOS 6.x
rpm -ivh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
yum -y install drbd83-utils kmod-drbd83
CentOS 7.x
rpm -ivh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
yum install -y drbd84-utils kmod-drbd84
加载模块:
modprobe drbd
echo drbd >/etc/modules-load.d/drbd.conf
两台机器时间同步,并修改/etc/hosts文件
192.168.92.250 drbd0
192.168.92.251 drbd1
两台主机分别修改主机名
hostname drbd0
hostname drbd1
修改配置文件(两台机器配置一样)
/etc/drbd.d/global_common.conf配置文件
global {
usage-count no; #是否参加DRBD使用者统计,默认是参加,建议关闭
}
common {
protocol C; #使用DRBD的第三种同步协议,表示收到远程主机的写入确认后认为写入完成
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";
split-brain "/usr/lib/drbd/notify-split-brain.sh root";
}
startup {
wfc-timeout 120;
degr-wfc-timeout 100;
outdated-wfc-timeout 100;
}
disk {
on-io-error detach; # 配置I/O错误处理策略为分离
syncer-rate 68M; #主节点和备用节点同步时最大的网络速率
}
net { #DRBD同步时使用的加密算法和加密密钥
cram-hmac-alg md5;
shared-secret "testdrbd";
}
}
}
vim /etc/drbd.d/drbd0.res
resource drbd0
{
startup {
become-primary-on drbd0;
}
on drbd0 {
device /dev/drbd0;
disk /dev/mapper/vg-lv0;
address 192.168.92.250:7789;
meta-disk internal;
}
on drbd1 {
device /dev/drbd0;
disk /dev/mapper/vg-lv0;
address 192.168.92.251:7789;
meta-disk internal;
}
}
vim /etc/drbd.d/drbd1.res
resource drbd1
{
startup {
become-primary-on drbd1;
}
on drbd0 {
device /dev/drbd1;
disk /dev/mapper/vg-lv1;
address 192.168.92.250:7788;
meta-disk internal;
}
on drbd1 {
device /dev/drbd1;
disk /dev/mapper/vg-lv1;
address 192.168.92.251:7788;
meta-disk internal;
}
}
在两台机器上分别创建数据块
drbdadm create-md drbd0
drbdadm create-md drbd1
在两台机器都启动服务
cat /proc/drbd #启动前查看drbd设备信息
drbdadm up all
cat /proc/drbd #启动后查看drbd设备信息
设定主,并查看状态(drbd84-utils版本用, drbdadm -- --overwrite-data-of-peer primary r0设为主)
drbdsetup /dev/drbd0 primary -o
cat /proc/drbd
在主上格式磁盘,挂载并写入文件,主备切换查看同步情况
drbd0:
mkfs.ext4 /dev/drbd0
mount /dev/drbd0 /data
drbd1:
mkfs.ext4 /dev/drbd1
mount /dev/drbd1 /data
查看状态如果出现diskless,则
drbdadm detach drbd
drbdadm attach drbd
drbd-overview
0:drbd0/0 Connected Primary/Secondary UpToDate/UpToDate /data ext4 992M 2.6M 923M 1%
1:drbd1/0 Connected Secondary/Primary UpToDate/UpToDate
cat /proc/drbd
version: 8.4.11-1 (api:1/proto:86-101)
GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-04-26 12:10:42
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:1082044 nr:0 dw:33536 dr:1053901 al:17 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
1: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
ns:57816 nr:1065668 dw:1082044 dr:57816 al:13 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
设备号 状态 角色(当前/对等) 磁盘状态及协议,I/O状态
----- -------------- --------------------- -----------------------------
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
I/O状态包括6种:
1). I/O suspension, r 表示运行 I/O, s 表示 suspended I/O,正常情况下为 r
2). Serial resynchronization 串行同步:当资源等待同步时却推迟了重新同步,这则个标志变成A,正常情况为 –
3). Peer-initiated sync suspension 对等节点发起的同步暂停: 当资源正在等待重新同步时,对
等节点因为一些原因发起暂停同步。这个标志变成 p。正常为 –
4). Locally initiated sync suspension 本地发起的同步暂停: 当资源等待重新同步时,在本地节
点上用户发起同步暂停,这个标志变成 u。正常为 –
5). Locally blocked I/O 。正常为 -。可能会是一下标志:
d: 如因为一个短暂的磁盘状态导致的 drbd 内部出现 I/O 阻塞
b:备用设备的 I/O 阻塞
n:网络 socket 出现阻塞
a:设备的 I/O 阻塞和网络阻塞的组合
6). Activity Log update suspension 活动日志更新暂停:当活动日志更新暂停,这个标志变成 s。正常为 –
ns:56 nr:0 dw:56 dr:1181 al:3 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
NS( network send 网络发送): net 数据以 kibyte 通过网络连接发送到对等节点
NR( network receive 网络接收):通过网络连接以 kibyte 接收 net 数据
DW( disk write 磁盘写入): net 数据以 kibyte 写入本地磁盘
DR( disk read 磁盘读取): net 数据以 kibyte 读取本地磁盘数据
AL( activity log 活动日志):活动日志区的元数据更新
BM( bit map 位图):位图区元数据更新
LO( local count 本地计数): DRBD 请求的开放本地 I/O 子系统的数量
PE( pengding 待定):发送到对等节点但是尚未节点对方回答的请求的数目
UA( unacknowledged 未确认):通过网络连接接收到对等节点的请求,但是尚未得到回复
AP( alllication pending 应用程序挂起): 数据块 I/O 请求转发到 DRBD,但是 DRBD 尚未回答
EP( epochs):一定数量的 epoch 对象,通常为 1,使用阻碍或者是没有排序写的方法时可能
增加 I/O 负载。
WO ( write order 写入顺序)目前使用的写入顺序的方法: b(barrier 障碍)、( f flush 刷新)、 d(drain
漏)或者是 n( none 无)
OOS( out of sync):以 kububyte 同步当前存储
主备手动切换:
1.先将主上面的磁盘卸载掉并降级
umount /dev/drbd0
drbdadm secondary drbd
2.在备机上升级为主机
drbdadm primary drbd
3.挂载磁盘
mount /dev/drbd0 /data
测试主节点写入,备节点是否能同步
dd if=/dev/zero of=/data/test bs=1G count=1
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 1.26333 s, 850 MB/s
cat /proc/drbd
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate
umount /data/
drbdadm down drbd # 关闭名字为drbd的资源
cat /proc/drbd # 主节点关闭资源之后,查看备节点的信息,可以看到主节点的角色已经变为UnKnown
0: cs:WFConnection ro:Secondary/Unknown ds:UpToDate/DUnknown
drbdadm primary drbd # 确立自己的角色为primary,即主节点
mount /dev/drbd0 /data
cd /data
ls # 发现数据还在
lost+found test
du -sh test
1.1G test
cat /proc/drbd # 查看当前 drbd 设备信息
0: cs:WFConnection ro:Primary/Unknown ds:UpToDate/DUnknown