分布式复制模块(drbd)是一种基于软件的,无共享,复制的存储解决方案,在服务器之间的DRBD 镜像数据

实时性:当应用对磁盘的数据进行修改时,复制立即发生。

透明性:应用程序的数据存储在镜像设备上是独立和透明的,数据可存储在不同的服务器

上。

同步镜像和异步镜像:同步镜像,当本地发申请进行写操作进行时,同步写到两台服务器

上。异步镜像,当本地写申请已经完成对本地的写操作时,开始对对应的服务器进行写操作。堆块设备(硬盘,分区,逻辑卷等)进行镜像。

DrbdlinuxI/O堆栈中的位置

drbd+heartbeat_heartbeat

Drbd复制的模式有三种

协议内容特点
用途
协议A (异步复制)数据一旦写入磁盘发送到网络队列中就认为是完成里写入操作一个节点发生故障时,可能发生数据丢失,数据还有可能在队列中用于地理上分开的节点
协议B(半同步复制)收到接受确认就认为完成操作数据丢失可能发生在参加的两个节点同时故障的情况下,因为在飞行中的数据可能不会
被提交到磁盘

协议C(同步复制)收到写入确认就认为完成写入操作

没有任何数

据丢失,所以这是一个群集节点的流行模式, I/O 吞吐量依赖于网络带宽
数据的复制较慢但是最安全的一种。目前应用最多最广泛的一种协议。

实验(此实验用的是协议C

Server6 server7

需要包:drbd-8.4.2.tar.gz 要对这个tar包进行源码编译,所以需要rpm-bulid这个工具。

编译源码包解决依赖

两台虚拟机需要加一块4G的虚拟内存,内存的大小自己可以定义

Server7

cpdrbd-8.4.0.tar.gz rpmbuild/SOURCES/  通常一般把源码包放在SOURCES/这个目录里

[root@server6drbd-8.4.2]# yum install gcc -y

[root@server6drbd-8.4.2]# yum install flex -y

[root@server6 ~]#yum install -y rpm-build

[root@server6 ~]#tar zxf drbd-8.4.2.tar.gz

[root@server6drbd-8.4.2]# ./configure  --enable-spec--with-km 编译缺什么就补什么

[root@server6drbd-8.4.2]# rpmbuild -bb drbd.spec

[root@server6drbd-8.4.2]# cd /root/rpmbuild/RPMS/x86_64/ 进入这个目录就会看到生成的RPM包。

drbd+heartbeat_heartbeat_02

[root@server6x86_64]# rpm -ivh *  安装

[root@server6x86_64]# scp * 172.25.137.7:~  把生成的rpm包传给server7

[root@server6drbd.d]# fdisk -l   查看添加磁盘信息

[root@server6drbd.d]# vim example.res   编辑的文件都以.res结尾。因为在/etc/drbd.conf的内容里规定"drbd.d/*.res";

resource example{                  ###example这是名字是和文件的名字一样

meta-diskinternal;

device /dev/drbd1;

syncer {

verify-alg sha1;

}

on server6.example.com{           ###主备的主机名

disk/dev/vdb;                     ###在做之前添加一个虚拟磁盘,这是磁盘的名字

address172.25.137.6:7789;            

}

onserver7.example.com {

disk /dev/vdb;

address172.25.137.:7789;

}

}

drbd+heartbeat_drbd_03

[root@server6drbd.d]# drbdadm create-md example 对资源做初始化

[root@server6drbd.d]# /etc/init.d/drbd start                会报这样的错是因为没有启动内核模块

drbd+heartbeat_drbd_04

[root@server6drbd-8.4.2]# rpmbuild -bb drbd-km.spec

drbd+heartbeat_drbd_05


[root@server6drbd-8.4.2]# yum install kernel-devel -y

[root@server6drbd-8.4.2]# rpmbuild -bb drbd-km.spec

[root@server6drbd-8.4.2]# cd /root/rpmbuild/RPMS/x86_64

[root@server6x86_64]# rpm -ivh drbd-km-2.6.32_431.el6.x86_64-8.4.2-2.el6.x86_64.rpm

[root@server6x86_64]# scp drbd-km-2.6.32_431.el6.x86_64-8.4.2-2.el6.x86_64.rpm172.25.137.7:~  传给7

[root@server6x86_64]# /etc/init.d/drbd start    开启服务,

[root@server6x86_64]# cat /proc/drbd   此时看到的是secondary要把它手动设置为primary

drbd+heartbeat_drbd_06

[root@server6 x86_64]# drbdadm primaryexample --force

下面这个截图是在同步

drbd+heartbeat_heartbeat_07

[root@server6x86_64]# mkfs.ext4 /dev/drbd1   格式化磁盘

[root@server6 x86_64]#mount /dev/drbd1   /mnt/    drbd1 挂载

drbd+heartbeat_drbd_08

Server7

[root@server7 ~]#rpm -ivh *.rpm

 

[root@server7 ~]#fdisk -l

drbd+heartbeat_heartbeat_09

[root@server7 ~]#drbdadm create-md example

[root@server7 ~]#rpm -ivh drbd-km-2.6.32_431.el6.x86_64-8.4.2-2.el6.x86_64.rpm

[root@server7 ~]#/etc/init.d/drbd start

如果让server7成为主那么就的把server6设置为primary

[root@server7mnt]# drbdadm primary example

[root@server7mnt]# mount /dev/drbd1 /mnt/

[root@server7mnt]# df

drbd+heartbeat_heartbeat_10


[root@server7 /]# drbd-overview  查看状态

[root@server7 /]# drbdadm down example  关闭节点

[root@server7 /]# drbdadm up example  开启节点

在实验中记住解挂的时候一定不能在挂载的那个目录进行解挂,否则解不掉

Drbd服务起不来有可能是因为没有下载内核启动所以在做实验下载需要的程序的时候把kernel-devel下载好。

两台主机上的/dev/drbd1不能同时挂载,只有状态为 primary ,才能被挂载使

,而此时另一方的状态为 secondary

               Heartbeat + drbd

在做drbd的时候heartbeat是关闭的。现在要开启heartbeat来自动挂载

[root@server6ha.d]# vim haresources  在这个文件加入里磁盘自动挂载

server6.example.comIPaddr::172.25.137.100/24/eth0 drbddisk::exampleFilesystem::/dev/drbd1::/var/www/html::ext4 httpd

 

[root@server6ha.d]# /etc/init.d/heartbeat start

[root@server6ha.d]# ip addr show  我们可以看到vipserver6

drbd+heartbeat_drbd_11

[root@server6 ha.d]# drbd-overview   此时6是主

drbd+heartbeat_drbd_12

/dev/drbd1 也自动挂载上了

如果关闭heartbeat服务此时server7是主备

[root@server7 ha.d]# ip addr show

drbd+heartbeat_drbd_13

[root@server7 ha.d]# drbd-overview

drbd+heartbeat_heartbeat_14

此时挂载在server7

drbd1上写一个测试页

drbd+heartbeat_heartbeat_15

在浏览器上看到的效果httpd服务一定要开启

drbd+heartbeat_heartbeat_16