DRBD(Distributed Replicated Block Device)分布式复制块设备是基于软件的无共享复制存储解决方案,可镜像主机之间的块设备(硬盘,分区,逻辑卷等)的内容
DRBD镜像数据的特点
1)实时:当应用程序修改设备上的数据时,复制将连续进行。
2)透明:应用程序不需要知道数据存储在多个主机上。
3)同步或异步:
使用同步镜像,在所有主机上执行写操作后,将通知应用程序写完成。
使用异步镜像,当本地完成写入时(通常在它们传播到其他主机之前),会通知应用程序写入完成。
结合上面的拓扑图,简单实践一下DRBD
Node1:192.168.31.6
Node2:192.168.31.7
已配置好了双机互信,可以参考之前的高可用集群Heartbeat配置实践中的配置
1、yum安装DRBD的相关安装包kmod-drbd84、drbd84-utils
1)先安装ELRepo yum源
yum install https://www.elrepo.org/elrepo-release-6-9.el6.elrepo.noarch.rpm
ELRepo是CentOS十分有用的稳定的软件源,与其他软件源不一样的是,这个第三方源主要是提供硬件驱动、内核更新方面的支持,如显卡、无线网卡、内核等等
2)yum install kmod-drbd84
会自动安装drbd84-utils
Installing : drbd84-utils-9.5.0-1.el6.elrepo.x86_64
Installing : kmod-drbd84-8.4.11-1.el6_10.elrepo.x86_64
且会自动更新内核版本
2、在node1和node2分别添加一块磁盘分区,且不要格式化
如下图所示/dev/sda6 大小为10G
3、配置drbd的配置文件
cat /etc/drbd.conf可以看出drbd的配置文件分为两个
1)全局配置文件global_common.conf
2)资源配置文件*.res(自行创建)
首先cd /etc/drbd.d,备份一下全局配置文件
cp global_common.conf global_common.conf_default_bak
vi global_common.conf
global {
usage-count yes;
}
common {
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";
}
startup {
}
options {
}
disk {
on-io-error detach;
}
net {
cram-hmac-alg "sha1";
shared-secret "www.walkingcloud.cn";
}
syncer {
rate 1000M;
}
}
再配置res资源配置文件 vi disk_sda6_sync.res
resource disk_sda6_sync {
on node1.walkingcloud.cn{
device /dev/drbd0;
disk /dev/sda6;
address 192.168.31.6:7789;
meta-disk internal;
}
on node2.walkingcloud.cn {
device /dev/drbd0;
disk /dev/sda6;
address 192.168.31.7:7789;
meta-disk internal;
}
}
4、配置文件同步到node2上
scp global_common.conf disk_sda6_sync.res node2:/etc/drbd.d/
5、加载drbd到内核
lsmod | grep drbd
modprobe drbd
ssh node2 "lsmod | grep drbd"
6、在两个节点上初始化已定义的资源并启动drbd服务
1)初始化资源,在Node1和Node2上分别执行:
drbdadm create-md disk_sda6_sync
2)启动服务,在Node1和Node2上分别执行:
service drbd start
3)查看启动状态
cat /proc/drbd
或者drbd-overview
4)从上面的信息中可以看出此时两个节点均处于Secondary状态。于是接下来需要将其中一个节点设置为Primary。在要设置为Primary的节点上执行如下命令
drbdadm -- --force primary disk_sda6_sync
可以使用iftop查看同步时的网络流量
iftop -i eth0 -N -n -m 1000M -P
等待同步进度完成
7、在node1主节点上格式化,并挂载,测试文件写入
文件系统的挂载只能在Primary节点进行,因此,也只有在设置了主节点后才能对drbd设备进行格式化
8、测试高可用性
1)先在主节点上卸载并切换为Secondary
umount /dev/drbd0
drbdadm secondary disk_sda6_sync
drbd-overview
2)在node2上将资源设置为主,直接挂载
drbdadm primary disk_sda6_sync
mount /dev/drbd0 /home
可以正常读取,当然这是手动切换primary和secondary来实现,在实际生产环境可以drbd+corosync等方式实现自动化故障迁移,后期再进行实践测试