主机环境 redhat6.5 64位

实验环境 服务端1 ip 172.25.25.111 主机名:server1.example.com   drbd

    服务端2 ip172.25.25.112   主机名:server2.example.com    drbd


安装包 drbd-8.4.3.tar.gz

防火墙状态:关闭

 

1.Drbd的简介

1.基本信息

Distributed Replicated Block Device(DRBD)是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。

DRBD的位置处于文件系统以下,比文件系统更加靠近操作系统内核及IO栈。

2.工具

drbdadm:高级管理工具,管理/etc/drbd.conf,向drbdsetup和drbdmeta发送指令,

drbdsetup:配置装载进kernel的DRBD模块,平时很少直接用

drbdmeta:管理META数据结构,平时很少直接用。

在DRBD中,资源是特指某复制的存储设备的所有方面。包括资源名称、DRBD设备(/dev/drbdm,这里m是设备最小号,最大号可到147)、磁盘配置(使本地数据可以为DRBD所用)、网络配置(与对方通信)

每个资源有个角色,是Primary或Secondary,下面简称"主"和"备"

主角色的DRBD设备可以不受限制的读和写,比如创建和映射文件系统、对于块设备的raw或直接IO访问。

备角色的DRBD设备接受来自对方的所有修改,但是不能被应用程序读写,甚至只读也不行。

角色可以改变。

3.DRBD工作原理图

DRBD是linux的内核的存储层中的一个分布式存储系统,可用使用DRBD在两台Linux服务器之间共享块设备,共享文件系统和数据。类似于一个网络RAID-1的功能,如图所示:

wKioL1f7SsTCQRDJAAJ_a1Uj9g0734.png

 

2. 编译、安装drbd内核模块计及测试

1.编译、安装drbd内核模块,报错解决及debd的配置(服务端1)

[root@server1 mnt]# ls

drbd-8.4.3.tar.gz   

[root@server1 mnt]# tar zxf drbd-8.4.3.tar.gz       #解压

[root@server1 mnt]# ls

drbd-8.4.3           drbd-8.4.3.tar.gz

[root@server1 mnt]# cd drbd-8.4.3

[root@server1 drbd-8.4.3]# ./configure --enable-spec --with-km     

若报错如下:

wKiom1f7SsWSEUqpAAATAwNZs5E177.png

则安装:

[root@server1 drbd-8.4.3]# yum install flex -y

 

[root@server1 drbd-8.4.3]# ./configure --enable-spec --with-km

WARNING系统可以跳过,如下:

wKioL1f7SsXBKOesAAAr5X37v6c525.png

[root@server1 drbd-8.4.3]# yum install rpm-build -y

 

[root@server1 drbd-8.4.3]# ./configure --enable-spec --with-km

[root@server1 drbd-8.4.3]# rpmbuild -bb drbd.spec       #

error: File /root/rpmbuild/SOURCES/drbd-8.4.3.tar.gz: No suchfile or directory

[root@server1 drbd-8.4.3]# cp /mnt/drbd-8.4.3.tar.gz/root/rpmbuild/SOURCES/

[root@server1 drbd-8.4.3]# rpmbuild -bb drbd.spec

 

wKiom1f7SsbBGPlMAABf_AxowqQ953.png

[root@server1 drbd-8.4.3]# rpmbuild -bb drbd-km.spec

error: Failed build dependencies:

    kernel-devel is neededby drbd-km-8.4.3-2.el6.x86_64       #报错,缺少包[root@server1drbd-8.4.3]# yum install kernel-devel -y

[root@server1 drbd-8.4.3]# rpmbuild -bb drbd-km.spec

wKioL1f7SsbRvFWoAACe935GTXE135.png

[root@server1 drbd-8.4.3]# cd /root/rpmbuild/RPMS/x86_64/      #切换目录

[root@server1 x86_64]# ls       #生成10个安装包

drbd-8.4.3-2.el6.x86_64.rpm

drbd-bash-completion-8.4.3-2.el6.x86_64.rpm

drbd-debuginfo-8.4.3-2.el6.x86_64.rpm

drbd-heartbeat-8.4.3-2.el6.x86_64.rpm

drbd-km-2.6.32_431.el6.x86_64-8.4.3-2.el6.x86_64.rpm

drbd-km-debuginfo-8.4.3-2.el6.x86_64.rpm

drbd-pacemaker-8.4.3-2.el6.x86_64.rpm

drbd-udev-8.4.3-2.el6.x86_64.rpm

drbd-utils-8.4.3-2.el6.x86_64.rpm

drbd-xen-8.4.3-2.el6.x86_64.rpm

[root@server1 x86_64]# yum install * -y    #安装所有的包

[root@server1 x86_64]# scp * root@172.25.25.112:/mnt       #将包传给服务端2

[root@server2 mnt]# ls

drbd-8.4.3-2.el6.x86_64.rpm

drbd-bash-completion-8.4.3-2.el6.x86_64.rpm

drbd-debuginfo-8.4.3-2.el6.x86_64.rpm

drbd-heartbeat-8.4.3-2.el6.x86_64.rpm

drbd-km-2.6.32_431.el6.x86_64-8.4.3-2.el6.x86_64.rpm

drbd-km-debuginfo-8.4.3-2.el6.x86_64.rpm

drbd-pacemaker-8.4.3-2.el6.x86_64.rpm

drbd-udev-8.4.3-2.el6.x86_64.rpm

drbd-utils-8.4.3-2.el6.x86_64.rpm

drbd-xen-8.4.3-2.el6.x86_64.rpm

[root@server2 mnt]# rpm -vih *          #安装

Preparing...               ########################################### [100%]

   1:drbd-utils            ########################################### [ 10%]

  2:drbd-bash-completion  ########################################### [ 20%]

   3:drbd-heartbeat        ########################################### [ 30%]

   4:drbd-pacemaker        ########################################### [ 40%]

   5:drbd-udev             ########################################### [ 50%]

   6:drbd-xen              ########################################### [ 60%]

   7:drbd                   ###########################################[ 70%]

  8:drbd-km-2.6.32_431.el6.########################################### [80%]

  9:drbd-km-debuginfo     ########################################### [ 90%]

  10:drbd-debuginfo         ###########################################[100%]

 

在服务端1和服务端2虚拟机中各添加一块虚拟磁盘或划分一个新的分区,然后进行下面的步骤:

 

[root@server1 x86_64]# cd /etc/drbd.d/     #切换到drbd的主配置文件目录

[root@server1 drbd.d]# vim dbdata.res     #创建一个文件,后缀必须是.res

  1 resource dbdata{

  2 meta-disk internal;

  3 device /dev/drbd1;

  4 syncer {

  5 verify-alg sha1;        #设置主备机之间通信使用的信息算法

  6 }

#每个主机的说明以"on"开头,后面是主机名.在后面的{}中为这个主机的配置

  7 on server1.example.com{     #主机名

  8 disk /dev/vdb;             #磁盘名称

  9 address172.25.29.1:7789;      #ip加端口,端口是指定的

 10 }

 11 onserver2.example.com{

 12 disk /dev/vdb;

 13 address172.25.29.2:7789;

 14 }

 15 }

 

[root@server1 drbd.d]# scp dbdata.resroot@172.25.29.2:/etc/drbd.d/

root@172.25.29.2's password:

#服务端1和服务端2同时初始化 ,同时开启drbd

[root@server1 drbd.d]# drbdadm create-md dbdata    #初始化

  --==  Thank you for participating in the globalusage survey  ==--

The server's response is:

 

Writing meta data...

initializing activity log

NOT initializing bitmap

New drbd meta data block successfully created.

 

[root@server2 drbd.d]# drbdadm create-md dbdata

  --==  Thank you for participating in the globalusage survey  ==--

The server's response is:

 

Writing meta data...

initializing activity log

NOT initializing bitmap

New drbd meta data block successfully created.

 

2.drbd的开启初始化、强制主备同步及格式化(主备模型)

[root@server1 drbd.d]# /etc/init.d/drbd start       #开启drbd

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

 

[root@server1 drbd.d]# cat /proc/drbd   #查看

version: 8.4.3 (api:1/proto:86-101)

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build byroot@server1.example.com, 2016-10-08 15:10:25

 

 1: cs:Connectedro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----

    ns:0 nr:0 dw:0 dr:0al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:2097052 

 

[root@server2 drbd.d]# cat /proc/drbd

version: 8.4.3 (api:1/proto:86-101)

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build byroot@server1.example.com, 2016-10-08 15:10:25

 

 1: cs:Connectedro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----

    ns:0 nr:0 dw:0 dr:0al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:2097052

#从上面可以看出两个都是secondary

 

[root@server1 drbd.d]# drbdadm primary dbdata --force   #强制使服务端1变成primary

[root@server1 drbd.d]# cat /proc/drbd      #查看,服务端1和服务端2正在同步

version: 8.4.3 (api:1/proto:86-101)

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build byroot@server1.example.com, 2016-10-08 15:10:25

 

 1: cs:SyncSource ro:Primary/Secondaryds:UpToDate/Inconsistent C r-----

    ns:496640 nr:0 dw:0dr:497304 al:0 bm:30 lo:0 pe:4 ua:0 ap:0 ep:1 wo:f oos:1604508

    [===>................]sync'ed: 23.7% (1604508/2097052)K

    finish: 0:00:16 speed:98,508 (98,508) K/sec

 

[root@server1 drbd.d]# cat /proc/drbd

version: 8.4.3 (api:1/proto:86-101)

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build byroot@server1.example.com, 2016-10-08 15:10:25

 

 1: cs:SyncSourcero:Primary/Secondary ds:UpToDate/Inconsistent C r---n-

    ns:1566436 nr:0 dw:0dr:1569432 al:0 bm:94 lo:0 pe:16 ua:3 ap:0 ep:1 wo:f oos:546716

    [=============>......]sync'ed: 74.1% (546716/2097052)K

    finish: 0:00:08 speed:64,596 (64,596) K/sec

 

[root@server1 drbd.d]# cat /proc/drbd   #同步完成,服务端1为primary

version: 8.4.3 (api:1/proto:86-101)

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build byroot@server1.example.com, 2016-10-08 15:10:25

 

 1: cs:Connectedro:Primary/Secondary ds:UpToDate/UpToDate C r-----

    ns:2097052 nr:0 dw:0dr:2097716 al:0 bm:128 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

 

[root@server2 drbd.d]# cat /proc/drbd

version: 8.4.3 (api:1/proto:86-101)

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build byroot@server1.example.com, 2016-10-08 15:10:25

 

 1: cs:Connectedro:Secondary/Primary ds:UpToDate/UpToDate C r-----

    ns:0 nr:2097052dw:2097052 dr:0 al:0 bm:128 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

[root@server1 drbd.d]# mkfs.ext4 /dev/drbd1     #格式化

 

3.切换主备测试是否同步成功

[root@server1 drbd.d]# mount /dev/drbd1 /mnt/           #将格式化好的磁盘挂载到/mnt上

[root@server1 drbd.d]# cd /mnt/     #切换到/mnt

[root@server1 mnt]# ls

lost+found

[root@server1 mnt]# touch file{1..4}      #创建几个文件

[root@server1 mnt]# ls

file1  file2  file3 file4  lost+found

[root@server1 mnt]# cd

[root@server1 ~]# umount /mnt/          #卸载

[root@server1 ~]# drbdadm secondary dbdata    #将服务端1变成secondary

[root@server1 ~]# cat /proc/drbd           #查看

version: 8.4.3 (api:1/proto:86-101)

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build byroot@server1.example.com, 2016-10-08 15:10:25

 

 1: cs:Connectedro:Secondary/Secondary ds:UpToDate/UpToDate C r-----

    ns:2163404 nr:0dw:66352 dr:2098429 al:13 bm:128 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

[root@server2 drbd.d]# drbdadm primary dbdata   #将服务端2变成primary

[root@server2 drbd.d]# cat /proc/drbd  #查看

version: 8.4.3 (api:1/proto:86-101)

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build byroot@server1.example.com, 2016-10-08 15:10:25

 

 1: cs:Connectedro:Primary/Secondary ds:UpToDate/UpToDate C r-----

    ns:0 nr:2163404dw:2163404 dr:664 al:0 bm:128 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

 

[root@server2 drbd.d]# mount /dev/drbd1 /mnt/    #挂载

[root@server2 drbd.d]# cd /mnt/

[root@server2 mnt]# ls              #查看,同步成功

file1  file2  file3 file4  lost+found