部分转载感谢原作者,原文地址 https://www.cnblogs.com/NewStudy/p/7270390.html
drbd版本drbd-9.0.21-1.
drbd-utils版本 drbd-utils-9.7.1.

Drbd 全称distributed replicated block device

基于块设备在不同高可用服务器对之间同步和镜像数据的软件,通过它可以实现在网络中的两台服务器之间基于块设备之前的
实时或异步镜像或同步复制,其实就是类似于rsync+inotify这种项目架构.只不过drbd是基于文件系统底层的,即block层级同步.
而rsync+inotify 是基于文件的同步,因为drbd效率更高,效果更好,增量方式

上面提到的块设备可以是 ,磁盘分区,LVM逻辑卷,或整块磁盘,即磁盘块的复制,相当于网络raid1功能

drbd三种同步协议

protocol A B C
协议A:异步同步模式
协议B:内存同步(半同步)复制
协议C:同步复制协议 协议C 用的最多

drbd生产应用模式

单主模式,主备模式,典型
复主模式:采用共享cluster文件系统,GFS OCFS2

drbd企业应用场景

高可用服务器之间的数据同步
heartbeat+drbd+nfs/mfs/gfs
heartbeat+drbd+mysql/oracle

特点:主提供状态读写,从无法查看,因为基于文件系统,没法挂载

相关数据同步工具

rsync scp nc nfs union双机同步 csync2多机同步 软件自身(mysql,oracle etc..) drbd

drbd安装部署

准备阶段

#新加分区(主1G 从2G) .从的容量是主的容量的两倍

两台服务器,分别准备两个分区,数据data和状态meda信息 分区

注意点

#meda-data 且状态分区不能格式化
#meda-data 生产环境1~2G
#格式化好的分区不能挂载使用

下载drbd drbd-utilse及安装依赖环境

https://www.linbit.com/en/drbd-community/drbd-download/ 下载合适版本的kernel driver 和 DRBD Utilities

#这条命令是查线程数
cat /proc/cpuinfo | grep processor | wc -l  
#安装相关软件
yum -y install gcc gcc-c++ libstdc++-devel make automake autoconf kernel-devel kernel-headers flex libxslt libxslt-devel asciidoc po4a

drbd-utils-9.10.0.tar.gz 安装步骤

tar -xf 软件包
./configure --prefix=/usr --sysconfdir=/etc/drbd --localstatedir=/var --runstatedir=/var/run/drbd
make -j `cat /proc/cpuinfo | grep processor | wc -l`
make install

drbd-9.0.19-1.tar.gz 安装步骤

tar -xf 软件包
make -j `cat /proc/cpuinfo | grep processor | wc -l` KDIR=/usr/src/kernels/`uname -r`
make install

配置完成后最好重启系统

#加载到内核,如需开机自动加载加到rc.local里
#echo modprobe drbd >> /etc/rc.local
#chmod +x /etc/rc.d/rc.local
modprobe drbd
lsmod |grep drbd

配置文件

1.确保添加了正确的/etc/hosts 信息

echo 10.0.0.51 db01 >> /etc/hosts
echo 10.0.0.52 db02 >> /etc/hosts

2.vim /etc/drbd/drbd.d/global_common.conf net模块中加入 procotol C;

还有更多有用的参数,持续更新

3.vim /etc/drbd/drbd.d/data.res

#resouce 名字与配置文件名一致
resource data {
meta-disk internal;
#初始化后实际生成的设备名
device /dev/drbd1;
#定义的节点名
on db01 {
#主机1添加的数据分区名
disk /dev/sda1;
#主机1的地址
address 10.0.0.51:7789;
}
on db02 {
#主机2的数据分区名
disk /dev/sda1;
#主机2的地址
address 10.0.0.52:7789;
}
}
#该文件用于定义drbd镜像资源

两个结点上的以上三个文件必须保持相同,并且两个节点要能够互相解析到彼此。

对db01 db02实始化操作

#此条的目的是用于防止初始化时报错
dd if=/dev/zero of=/dev/sdb1 bs=1M count=100
drbdadm create-md data
#可以直接拷备 /etc/init.d/drbd start管理,测试cent7编译后可以直接systemctl 管理
cp -p /路径/drbd /etc/init.d/

使用init.d/ 或 systemctl 方式启动服务

启动服务后,对db01设置为主节点()

drbdadm primary data --force

查看drbd镜像状态

#方法1
cat /proc/drbd
#方法2
复制安装包里的脚本到/usr/sbin   scripts/drbd-overview.pl
drbd-overview.pl

#查询后显示的信息
1:data/0 Connected(2*) Primar/Second UpToDa/UpToDa

测试drbd镜像


[root@client5 drbd.d]# mkfs.xfs /dev/drbd1
#挂载文件系统之前确保这个节点是primary
[root@client5 ~]# mount /dev/drbd1 /mnt/
[root@client5 mnt]# touch file{1..5}
[root@client5 ~]# umount /mnt
[root@client5 ~]# drbdadm secondary data
[root@client6 ~]# drbdadm primary data
[root@client6 ~]# mount /dev/drbd1 /mnt/
[root@client6 mnt]# ls
file1 file2 file3 file4 file5

drbd的使用

相当于多一个硬盘在主将primary 挂载使用即可

drbd问题汇总

1.安装后,更新内核导致与版本不兼容,导致无法编译使用
解决方法:vim /etc/grub2.cfg 删除新版本内核启动参数,强制旧kernel启动
2.被坑过,用yum和编译都安装了,结果导致很多命令配置路径都不对
解决方法:find / -name "drbd*" -exec rm -rf {} \; 删除,重新编译安装