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 (master和slave服务器配置一样)
下载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状态,两台都是Secondary,Inconsistent表示不一致,刚配好的DRBD两个节点都认为自己是Secondary,手工指定一台为primary
service drbd status或者cat /proc/drbd
m:rescsrodspmountedfstype
1:r0ConnectedSecondary/SecondaryInconsistent/InconsistentC
在node1(master)上运行指定它primary
#drbdadm primary r0 �Cforce
完成后再次查看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挂载会报错。
同步测试
在node1(primary)服务器上向/data写一些文件
然后停止drbd服务
#service drbd stop
在node2(secondary)将其设置为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 �CUvh epel-release-6-8.noarch.rpm
安装
#yum install heartbeat
配置master的heartbeat
进入/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
#列出master和slave节点
node node1
node node2
auto_failback off
respawn hacluster /usr/lib/heartbeat/ipfail
在同目录创建验证文件authkeys内容如下
auth 1
1 crc
在同目录创建haresources文件内容如下
#下面的IP是集群的VIP,drbddisk是切换时调用的脚本
node1 192.168.122.9 drbddisk::r0 Filesystem::/dev/drbd1::/data::ext4
从drbd的源码中的scripts目录中复制drbddisk脚本到/etc/ha.d/resource.d/
启动master的heartbeat
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
#列出master和slave节点
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上一致。
本文出自 “涛声依旧” 博客,转载请与作者联系!