一、安装
##在之前,将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 �Cc /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