一直想做基于linux的双机热备,一直没有时间和机会。一直以为只要做双机热备的实验就必须两台机器外接一个存储。甚至一个月以前在学习keepalived的时候还在琢磨keepalvied去掉哪些条件可以实现双机热备。直到一个月以前设计存储方案的时候部门老大给了一个国外的链接介绍drbd+nfs实现nfs的热备方案的时候,我的眼前一亮,这不就是我一直想做的不依靠存储实现热备的解决方案吗?

先来纠正一下自己的错误认识吧,没接触keepalived和heartbeat的时候,道听途说的认为keepalived出现以后就没有必要再用heartbeat了。在仔细学习了这两个传奇人物以后发现:keepalived是专门为高可用的集群而诞生的,而heartbeat生是双机热备的人死是双机热备的死人。

好了,说说本文实现的原理吧。大体来说就是heartbeat+drbd。heartbeat自是不用说,用它来实现资源的统一调度;而drbd就是本文的重头戏。这一个什么东东呢?官方的东东咱就不说了。用咱们自己的话说,就是实现两台机器的两块硬盘的实时完整复制(drbd即磁盘镜像)。它的出现,解决了两台机器做双机时的数据一致性问题。

ok,废话半天,说一下本文的实现环境:

os:ubuntu9.04

ip1:192.168.1.11 drbd1

ip2:192.168.1.12 drbd2

disk:/dev/sdb1(一个8G的分区)

通过drbd,挂在每台机器上的sdb1这块分区将成为咱们“存储”。let’s go !

++++++现在开始两台机器配置一样++++++

1.设定hosts

vi /etc/hosts

192.168.1.11 drbd1

192.168.1.12 drbd2

注意:比如在1.11这台机器上。drbd1是你执行hostname命令看到的,而不是随手一写的哟:)

2.安装并配置drbd

1).安装drbd。

你可以去http://oss.linbit.com/drbd/下载最新的版本。本文为了方便直接从ubuntu的源进行安装

apt-get install drbd8-utils

2).创建配置文件

如果用apt-get或者yum的方式安装的话,会默认创建配置文件,而编译安装则不会。不管直接清空或改名,写入以下内容。

vi /etc/drbd.conf
   common {
   syncer { rate 10M; } #速率
   }
   resource r0 {
   protocol C;
   disk { on-io-error detach; }
   on drbd1 { #drbd1为第一台机器的机器名
   device /dev/drbd0; #创建的虚拟资源
   disk /dev/sdb1; #实际的物理分区,一定要注意,是一个单独的分区,而且是未经格式化的
   address 192.168.1.11:7788; #第一台机器的ip地址,及通讯端口
   meta-disk internal; #类型,局域网
   }
   on drbd2 {
   device /dev/drbd0;
   disk /dev/sdb1;
   address 192.168.1.12:7788;
   meta-disk internal;
   }
   }

3)创建资源

drbdadm create-md r0 #r0为刚才配置文件里的资源名

会提示三个疑问,如果你英文还可以的话,可以阅读一下,不然的话,直接回车。在终点你会看到

success

😃

4)启动drbd服务

/etc/init.d/drbd start

cat /proc/drbd

你应该可以看到

注意里面我标注的"Secondary/Secondary"意思是说现在这块盘是从盘,主盘不知道。

++++++现在开始只在drbd1上操作++++++

5)初始化网络硬盘

drbdsetup /dev/drbd0 primary -o

cat /proc/drbd

你会发现现在已经是“Primary/Secondary”了,而且已经开始同步硬盘状态。

为了实时的查看同步情况,你可以在drbd1上执行

watch -n1 cat /proc/drbd

同步还在进行

经过一段时间的等待,你会发现成功完成!

同步完成以后,在drbd2上查看硬盘状态

注意磁盘状态是:“Secondary/Primary”

格式化网络磁盘

6)设置drbd开机启动

在两台机器上都执行

chkconfig drbd on

7)手工测试drbd是不是正常工作

在drbd1上建立3个文件

在drbd2上验证结果

ok,我们现在已经确定drbd是正常工作的了。也相信在这么细致的介绍下,你已经熟悉了它是怎么工作了。我们现在有了“网络存储”了。下一步就是让一个东东帮我们调度资源了。简单的几步配置有请heartbeat出场

3.配置heartbeat

1)安装heartbeat

apt-get install heartbeat

2)配置heartbeat

vi /etc/heartbeat/ha.cf
   logfacility local0
   keepalive 2
   deadtime 10
   auto_failback off
   bcast eth0
   node drbd1 drbd2
   vi /etc/heartbeat/haresources
   drbd1 drbddisk::r0 Filesystem::/dev/drbd0::/mnt::ext3
   vi authkeys
   auth 3
   3 md5 abc
   chmod 600 authkeys

3)相同的配置复制到drbd2

scp authkeys haresources ha.cf root@192.168.1.12:/etc/heartbeat/

4)确保服务都是正常运行的

/etc/init.d/drbd start

/etc/init.d/heartbeat start

5)切换测试