DRBD+Heartbeat

测试环境:

Node1 192.168.122.2(master)两块磁盘(vda系统,vdb数据盘)

Node2 192.168.122.8(slave)两块磁盘

服务器操作系统版本centos6.3 32bit

vdb硬盘不要格式化

一、DRBD安装

准备工作

安装下面依赖包

#yum install make gcc gcc-c++ flex kernel-devel kernel-headers

注意:安装的kernel-devel的内核源码(内核源码路径/usr/src/kernel/)和当前系统的kernel版本(uname -r)不一致的话需要把当前内核更新一下。#yum update kernel-版本号

修改默认引导内核为最新版本内核,默认更新后最新的内核排在最上面,不用修改。如果不是就按照下面方法修改。

修改/etc/grub.conf 查看最新的内核版本排在第几个,从0开始。title开头的行是内核。将default=设置为要启动的内核顺序数。

重启服务器

配置DRBD masterslave服务器配置一样)

下载drbd源码http://oss.linbit.com/drbd/

解压tar zxvf drbd-8.4.3.tar.gz

进入解压后的drbd-8.4.3

建立drbd的安装目录/usr/local/drbd

开始编译安装

./configure --prefix=/usr/local/drbd --with-km

make KDIR=/usr/src/kernels/内核源码目录/

make install

mkdir -p /usr/local/drbd/var/run/drbd

cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/rc.d/init.d/

分析可加载模块的依赖性,生成modules.dep和映射文件

depmod

加载模块

modprobe drbd

查看是否已经加载了drbd模块

lsmod |grep drbd

建立配置文件

vi /usr/local/drbd/etc/drbd.conf

写入

include "drbd.d/global_common.conf";

include "drbd.d/*.res";

修改/usr/local/drbd/etc/global_common.conf 文件

net {

#DRBD复制有三种:

#协议A,本地写入完成,数据包已在发送队列中,则写被认为是完成。在一个节点故障时可能发送数据丢失,因为要被写入远程的数据可能仍然在发送队列。

#协议B,本地吸入完成且数据包到底对等节点则认为写在主节点完成,数据丢失可能发送在参加的两个节点同事故障情况下,因为在飞行的数据可能不会提交到磁盘

#协议C,只有本地和远程节点的磁盘已经确认写操作完成,写才认为完成。没有数据丢失情况。但网络带宽决定I/O吞吐量。

#应用最多的是协议C

#添加协议C(大写)

protocol C;

protocol C;

}

 

更正,之前r0.res的路径写错,今天看的时候才发现

vi /usr/local/drbd/etc/drbd.d/r0.res

#resource后面跟drbd资源

resource r0 {

#on 后面跟节点的主机名

on node1 {

#device设置drbd的设备名称

device/dev/drbd1;

#drbd设备同步的物理磁盘

disk/dev/vdb;

#节点drbd监听的端口

address 192.168.122.2:7789;

meta-diskinternal;

}

on node2 {

device/dev/drbd1;

disk/dev/vdb;

address 192.168.122.8:7789;

meta-diskinternal;

}

}

修改主机名

#hostname 新主机名

修改文件/etc/sysconfig/network中主机名

添加本地解析vi /etc/hosts

 

创建drbd记录信息的数据块

#drbdadm create-md r0

 

分别在两个机器启动drbd

#service drbd start

启动后查看drbd状态,两台都是SecondaryInconsistent表示不一致,刚配好的DRBD两个节点都认为自己是Secondary,手工指定一台为primary

service drbd status或者cat /proc/drbd

m:rescsrodspmountedfstype

1:r0ConnectedSecondary/SecondaryInconsistent/InconsistentC

node1master)上运行指定它primary

#drbdadm primary r0 –force

完成后再次查看drbd的状态

service drbd status或者cat /proc/drbd

会发现两个服务器正在同步

drbd driver loaded OK; device status:

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

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@master-01, 2013-07-22 23:01:55

m:rescsrodspmountedfstype

0:r0SyncTargetSecondary/SecondaryInconsistent/UpToDateC

...sync'ed:74.1%(5316/20476)M

等完成后会看到ds变成UpToDate/UpToDate (实时)

下一步对drbd的设备进行格式化,此操作只在primary服务器上进行Secondary服务器起来后什么都不需要操作。

即使没有同步完,也可以对drbd设备进行格式化

#mkfs.ext3 /dev/drbd1

挂载drbd分区

#/mount /dev/drbd1 /data

注意:集群中只有primary服务器可以挂载设备,secondary挂载会报错。

同步测试

node1primary)服务器上向/data写一些文件

然后停止drbd服务

#service drbd stop

node2secondary)将其设置为primary

#drbdadm primary all或者drbdadm primary r0

secondary服务器上就可以挂载/dev/drbd1 到自己的挂载点/data

查看刚才在node1上写的文件是否同步到node2上。

二、安装Heartbeat

操作系统Centos6.3默认的yum源没有heartbeat,需要使用epel的源

下载#wget http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

安装#rpm –Uvh epel-release-6-8.noarch.rpm

安装

#yum install heartbeat

配置masterheartbeat

进入/etc/ha.d/创建ha.cf文件,写入下面内容

debugfile /var/log/ha-debug

logfile /var/log/ha-log

keepalive 2

deadtime 10

warntime 6

initdead 10

udpport 694

#slave服务器的IP

ucast eth0 192.168.122.2

#列出masterslave节点

node node1

node node2

auto_failback off

respawn hacluster /usr/lib/heartbeat/ipfail

在同目录创建验证文件authkeys内容如下

auth 1

1 crc

在同目录创建haresources文件内容如下

#下面的IP是集群的VIPdrbddisk是切换时调用的脚本

node1 192.168.122.9 drbddisk::r0 Filesystem::/dev/drbd1::/data::ext4

drbd的源码中的scripts目录中复制drbddisk脚本到/etc/ha.d/resource.d/

启动masterheartbeat

service heartbeat start

配置slave

文件ha.cf内容稍有不同

debugfile /var/log/ha-debug

logfile /var/log/ha-log

keepalive 2

deadtime 10

warntime 6

initdead 10

udpport 694

#master服务器的IP

ucast eth0 192.168.122.8

#列出masterslave节点

node node1

node node2

auto_failback off

respawn hacluster /usr/lib/heartbeat/ipfail

文件haresources内容

node2 192.168.122.9 drbddisk::r0 Filesystem::/dev/drbd1::/data::ext4

同样需要drbd的源码中的scripts目录中复制drbddisk脚本到/etc/ha.d/resource.d/

其他配置和master一样

Drbd自动切换测试

master上停止heartbeat服务

会发现slave服务器上会自动挂载/dev/drbd1/data,查看/data中数据和master上一致。