一、安装

##在之前,将6.5的内核进行了升级,如果以下命令不行,可以先将内核进行升级。升级后重启,应用新内核

##yum update kernel 

##yum install kernel-devel

rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm

yum -y install drbd83-utils kmod-drbd83

modprobe drbd

前期准备说明:两台服务器,两块专用磁盘,大小一致。

 操作系统         主机名       IP                       drbd磁盘

CentOS6.5        g105-1     192.168.100.177           /dev/testvg/testlv

CentOS6.5        g105-2     192.168.100.253           /dev/testvg/testlv

两台设备的防火墙要互相允许。

##以上主机名与IP对应的关系中,两台服务器上的hosts、/etc/sysconfig/network文件都要写上,如果在创建时报错,还要hostname g105-1 

二、配置

#include"drbd.d/global_common.conf";   注释掉
         #include "drbd.d/*.res";                注释掉
global {
usage-count no;是否参加DRBD 使用者统计,默认参加
}
common {
syncer { rate 200M; }  设置主用节点和备用节点同步时的网络速率最大值,单位是字节
}
resource r0 {  资源名字为r0
protocol C;使用DRBD 的第三种同步协议(A B C),大多数用C,表示收到远程主机的写入确认后认为写入完成
startup {
wfc-timeout 120;在启用DRBD块时,初始化脚本drbd会阻塞启动进程的运行,直到对等节点的出现。该选项就是用来限制这个等待时间的,默认为0,即不限制,永远等待。
degr-wfc-timeout 120;也是用于限制等待时间,只是作用的情形不同:它作用于一个降级集群(即那些只剩下一个节点的集群)在重启时的等待时间。
}
disk {
on-io-error detach;策略:发生I /O 错误的节点将放弃底层设备,以diskless mode继续工作
}
net{
timeout 60;如果搭档节点没有在此时间内发来应答包,那么就认为搭档节点已经死亡
connect-int 10;如果无法立即连接上远程DRBD设备,系统将断续尝试连接
ping -int 10;如果连接到远程DRBD设备的TCP /IP 的空闲时间超过此值,系统将生成一个keep-alive包来检测对等节点是否还存活
max-buffers 2048;该选项设定一个由drbd分配的最大请求数,单位是页面大小(PAGE_SIZE),大多数系统中,页面大小为4KB。这些buffer用来存储那些即将写入磁盘的数据。最小值为32(即128KB)。这个值大一点好。
max-epoch-size 2048;该选项设定了两次write barriers之间最大的数据块数。如果选项的值小于10,将影响系统性能。大一点好。
cram-hmac-alg  "sha1" ;该选项设定内核支持的一个算法,用于网络上的用户数据的一致性校验。通常的数据一致性校验,由TCP /IP 头中所包含的16位校验和来进行,而该选项可以使用内核所支持的任一算法。该功能默认关闭。
shared-secret  "Mysql-abcD" ;用来设定在对待节点授权中使用的密码,最长64个字符。
}
on test02 {  每个主机的说明以on 开头,后面是 hostname
device  /dev/drbd0 ;drbd设备名称
disk    /dev/sdb ; /dev/drbd0 使用的磁盘分区是 /dev/sdb
address 192.168.1.244:6666;设置DRBD的监听端口,用于与另一台主机通信
meta-disk internal;DRBD的元数据存放方式
}
on test03 {
device  /dev/drbd0 ;
disk    /dev/sdb ;
address 192.168.1.245:6666;两台主机端口必须一致
meta-disk internal;
}
}

1、drbd.conf的配置参数说明

Protocol

Protocol  A         @数据一旦写入磁盘并发送到网络中就认为完成了写入操作

Protocol  B         @收到接收确认就认为完成了写入操作。

Protocol  C         @收到写入确认就认为完成了写入操作。

2、global

global { usage-count yes; }         @是否参加DRBD使用者统计,默认是yes

3、common

common { syncer { rate 1M; } }

@设置主备节点同步时的网络速率最大值,单位是字节.

4、resource

一个DRBD设备(即:/dev/drbdX),叫做一个"资源"。里面包含一个DRBD设备的主备节点的的ip信息,底层存储设备名称,设备大小,meta信息存放方式,drbd对外提供的设备名等等。

resource r0 {

protocol C;         @使用协议C.表示收到远程主机的写入确认后,则认为写入完成.

net {

     cram-hmac-alg sha1;            @设置主备机之间通信使用的信息算法.

     shared-secret "FooFunFactory";

   }

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

on master {

    device    /dev/drbd0;

    disk      /dev/ hdb;

    address   192.168.2.124:7898;    @设置DRBD的监听端口,用于与另一台主机通信

    meta-disk  internal;

   }

on slave{

    device    /dev/drbd0;

    disk      /dev/ hdb;

    address   192.168.2.124:7898;

     meta-disk  internal;

    }

 }

1.全局配置文件

vi /etc/drbd.d/global_common.conf

 

global {

usage-count yes;

}

common {

protocol C;

startup {

wfc-timeout          240;

degr-wfc-timeout     240;

outdated-wfc-timeout 240;

}

disk {

on-io-error detach;

}

net {

   cram-hmac-alg md5;

shared-secret "testdrbd";

}

syncer {

rate 330;           #30% bandwith,官方推荐是30%的带宽

al-extents 3389;

verify-alg  md5;    ##pei he /etc/crontab   4 * * * *  root /sbin/drbdadm verify  resourceName,用于数据校验的,通过配合定时任务可以一起起作用。

}

}

2.资源配置文件

vi r0.res

resource r0{

on g105-1 {

  device     /dev/drbd0;

  disk       /dev/testvg/testlv;

  address    192.168.100.177:7898;

  meta-disk  internal;

 }

on g105-2 {

  device     /dev/drbd0;

  disk       /dev/VolGroup/testlv;

  address    192.168.100.253:7898;

  meta-disk  internal;

 }

}

三、启动

准备启动:
创建相应的元数据保存的数据块,两个机器都要执行一下:

drbdadm –c /etc/drbd.conf create-md all 

or

drbdadm create-md r0

1.主备机都开户drbd服务:

/etc/init.d/drbd start

/etc/init.d/drbd start

 

2.启动后,先查看一下drbd的状态,目前显示是不一致,因为还没有指定主:

cat /proc/drbd

version: 8.3.16 (api:88/proto:86-97)

GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2014

-10-28 10:31:39

 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----

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

3.指定g105-1的drbd设备为主:在主机g105-1上执行命令:

drbdsetup /dev/drbd0 primary -o

4.再查看时,就会发现开始进行同步了:

version: 8.3.16 (api:88/proto:86-97)

GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2014-10-28 10:31:39

 0: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r-----

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

        [>....................] sync'ed:  1.5% (5044/5116)M

        finish: 3:47:13 speed: 360 (356) want: 330 K/sec 

增加同步速度,drbdsetup /dev/drbd/by-res/r0 syncer -r 500M

四、使用drbd

注意:备机的drbd设备无法挂载,因为它由drbd负责。用于接收主机数据的。当然,为了测试,可以在主机无数据写入时,进行查看。

使用:将主机上的drbd设备挂载即可使用。当有数据变更时,它会自动同步到备用磁盘上。

备用磁盘要使用时,待数据同步完成后,将drbd停止掉,然后再挂载上就好。

五、主备切换

1.先将主上面的磁盘卸载掉并降级

umount /dev/drbd0

drbdadm secondary r0

2.在备机上升级为主机

drbdadm primary r0

3.挂载磁盘

mount /dev/drbd0 /media/mnt

停止DRBD服务切换

关闭主用节点服务,此时挂载的DRBD分区就自动在主用节点卸载了,操作如下:
 

[root@master-drbd /]# /etc/init.d/drbd  stop  Stopping all DRBD resources:

然后查看备用节点的DRBD状态:
 

[root@slave-drbd /]# cat /proc/drbd  version: 8.3.13 (api:88/proto:86-96)  0: cs:WFConnection ro:Secondary/Unknown ds:UpToDate/DUnknown C r-----    ns:0 nr:16 dw:16 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

从输出可以看到,现在主用节点的状态变为“Unknown”,接着在备用节点执行切换命令:
 

[root@slave-drbd  ~]# drbdadm primary all

此时会出现如下报错信息:
 

2: State change failed: (-7) Refusing to be Primary while peer is not outdated  Command 'drbdsetup 2 primary' terminated with exit code 11

因此,必须在备用节点执行如下命令:
 

[root@slave-drbd  ~]# drbdsetup /dev/drbd0 primary -o

或者
 

[root@slave-drbd ~]# drbdadm -- --overwrite-data-of-peer primary all

现在就可以正常切换了。接着查看此节点的状态,信息如下:
 

[root@slave-drbd /]# cat /proc/drbd  version: 8.3.13 (api:88/proto:86-96)  0: cs:WFConnection ro:Primary/Unknown ds:UpToDate/Outdated C r-----   ns:0 nr:16 dw:16 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

可以看出,原来的备用节点已经处于“Primary”状态了,而原来的主用节点由于DRBD服务未启动,还处于“Unknown”状态,在原来的主用节点服务启动后,会自动变为“Secondary”状态,无需在原来主用节点上再次执行切换到备用节点的命令。

最后,在新的主用节点上挂载DRBD设备即可完成主备节点的切换:
 

[root@slave-drbd /]# mount /dev/drbd0 /mnt