Chinaunix首页 | 论坛 | 博客
  • 博客访问: 236502
  • 博文数量: 59
  • 博客积分: 2016
  • 博客等级: 大尉
  • 技术积分: 660
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-04 17:30
文章分类
文章存档

2013年(1)

2011年(2)

2010年(7)

2009年(30)

2008年(19)

我的朋友

分类: LINUX

2009-08-28 09:06:52

heartbeat+drbd
  如果主服务器宕机,造成的损失是不可估量的。要保证主服务器不间断服务,就需要对服务器实现冗余。在众多的实现服务器冗余的解决方案 中,heartbeat为我们提供了廉价的、可伸缩的高可用集群方案。我们通过heartbeat+drbd在Linux下创建一个高可用(HA)的集群 服务器。
  DRBD是一种块设备,可以被用于高可用(HA)之中。它类似于一个网络RAID-1功能。当你将数据写入本地文件系统时,数据还将会被发送到网络中另一 台主机上。以相同的形式记录在一个文件系统中。本地(主节点)与远程主机(备节点)的数据可以保证实时同步。当本地系统出现故障时,远程主机上还会保留有 一份相同的数据,可以继续使用。在高可用(HA)中使用DRBD功能,可以代替使用一个共享盘阵。因为数据同时存在于本地主机和远程主机上。切换时,远程 主机只要使用它上面的那份备份数据,就可以继续进行服务了。

安装heartbeat

[root@manager src]# rpm -ivh e2fsprogs-1.35-7.1.i386.rpm
[root@manager src]# tar zxvf libnet.tar.gz
[root@manager libnet]# ./configure
[root@manager libnet]# make
[root@manager libnet]# make install
[root@manager src]# tar zxvf heartbeat-2.1.2.tar.tar
[root@manager src]# cd heartbeat-2.1.2
[root@manager heartbeat-2.1.2]# ./ConfigureMe configure
[root@manager heartbeat-2.1.2]# make
[root@manager heartbeat-2.1.2]# make install
[root@manager heartbeat-2.1.2]# cp doc/ha.cf /etc/ha.d/
[root@manager heartbeat-2.1.2]# cp doc/haresources /etc/ha.d/
[root@manager heartbeat-2.1.2]# cp doc/authkeys /etc/ha.d/
[root@manager heartbeat-2.1.2]# cd /etc/ha.d/
开始编辑配置文件(两台机器上都需要安装和配置)
(heartbeat的配置比较简单,网上也有很多例子,这里就不多废话了)



开始编译安装DRBD 

[root@manager root]# cp drbd-8.2.1.tar.tar /usr/src/
[root@manager root]# cd /usr/src/
[root@manager src]# tar zxvf drbd-8.2.1.tar.tar
[root@manager src]# cd drbd-8.2.1
[root@manager src]# make KERNVER=2.6.17.11 KDIR=/usr/src/linux-2.6.17.11 

如果编译顺利可以看到Module build was successful.
[root@manager drbd-8.2.1]# make install 

可以编辑配置文件了 

[root@manager drbd-8.2.1]# vi /etc/drbd.conf 
在manager和manage_bak上都需要安装drbd服务。
分别在两台机器上配置好/etc/drbd.conf 
[root@manager_bak root]# grep -v "#" /etc/drbd.conf 
global {
  usage-count yes; (是否参加使用者统计,yes为参加)
}
common {
  syncer { rate 300M; }
}
resource r0 {
  protocol C; (数据同步协议,C为收到数据并写入后返回,确认成功)
  disk {
  on-io-error detach;
  size 100G; (由于实验环境下两台服务器硬盘大小不同,所以需要设置drbd的大小)
  }
  net {
  after-sb-0pri disconnect;
  rr-conflict disconnect;
  }
  syncer {
  rate 300M; (设置网络同步速率)
  al-extents 257;
  }
  on manager_bak {
  device /dev/drbd0;
  disk /dev/sda3;
  address 192.168.0.2:7788;
  meta-disk internal;
  }
  on manager {
  device /dev/drbd0;
  disk /dev/sdc;
  address 192.168.0.1:7788;
  meta-disk internal;
  }


在启动DRBD之前,需要创建供DRBD记录信息的数据块.分别在两台主机上执行: 

[root@manager ha.d]# drbdadm create-md r0
[root@manager ha.d]#mknod /dev/drbd0 b 147 0
[root@manager ha.d]# /etc/init.d/drbd srart 

现在两台主机都是备机状态,都是”不一致”状态,这是由于DRBD无法判断哪一方为主机,以哪一方的磁盘数据作为标准数据。所以我们需要初始化,在manager上执行: 

[root@manager /]#drbdsetup /dev/drbd0 primary –o 

现在数据开始同步,可以用cat /proc/drbd查看数据同步的进度
等数据同步完查看DRBD的状态 

[root@manager /]# cat /proc/drbd 
version: 8.2.1 (api:86/proto:86-87)
GIT-hash: 318925802fc2638479ad090b73d7af45503dd184 build by root@manager, 2007-12-05 16:40:14
0: cs:Connected st Primary/Secondary ds:UpToDate/UpToDate C r---
  ns:1514 nr:1110 dw:2616 dr:2259 al:0 bm:482 lo:0 pe:0 ua:0 ap:0
  resync: used:0/31 hits:2 misses:2 starving:0 dirty:0 changed:2
  act_log: used:0/257 hits:202 misses:0 starving:0 dirty:0 changed:0
磁盘状态都是”实时”,表示数据同步完成了。 

[root@manager /]# mkfs.xfs /dev/drbd0 

现在可以把manager上的DRBD设备挂载到/export目录上进行使用。备机的DRBD设备无法被挂载,因为它是用来接收主机数据的,由DRBD负责操作。 

[root@manager /]# mount /dev/drbd0 /export
[root@manager /]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 10229696 3019636 7210060 30% /
/dev/drbd0 104806400 3046752 101759648 3% /export 

现在把之前备份的/export中的所有内容再恢复回去。
如果不使用heartbeat的情况下,DRBD只能手工切换主从关系
现在修改heartbeat的配置文件,使DRBD可以通过heartbeat自动切换 

[root@manager /]# vi /etc/ha.d/haresources
manager 192.168.0.3 drbddisk::r0 Filesystem::/dev/drbd0::/export::xfs dhcpd xinetd portmap nfs 

注释:上面那行
manager 定义manager为heartbeat的主机
192.168.0.3 定义对外服务的IP地址,这个IP自动在主从机之间切换
drbddisk::r0 定义使用的drbd资源
Filesystem::/dev/drbd0::/export::xfs 定义挂载文件系统
dhcpd xinetd portmap nfs 定义其他需要切换的服务(用空格隔开) 

现在我们可以测试一下了 

(dhcpd portmap nfs等需要切换的服务,应该先在两台服务器上都配置好) 

[root@manager root]# chkconfig –list 

确定heartbeat和DRBD开机自启动
确定需要由heartbeat切换的服务,开机不自启动(由heartbeat来启用相关的服务)
给gg1接通电源,通过pxe启动系统(gg1是一组服务器中的一台,是一台无盘服务器,启动后挂载在manager上保存的系统)
在manager上ssh gg1 

[root@manager root]# ssh gg1
-bash-2.05b#
-bash-2.05b# arp -a
? (192.168.0.3) at 00:19:B9:E4:7D:22 [ether] on eth0
-bash-2.05b# ls
-bash-2.05b# touch test
-bash-2.05b# ls
test 

现在在manager上关机或停止heartbeat服务
[root@manager root]# /etc/init.d/heartbeat stop
Stopping High-Availability services: [ OK ] 

到manager_bak上ifconfig 
[root@manager_bak root]# ifconfig 
可以看到eth1:0起来了,IP地址是192.168.0.3 

[root@manager_bak root]# ssh gg1
-bash-2.05b#
-bash-2.05b# arp -a
? (192.168.0.3) at 00:19:B9:E5:3B:FC [ether] on eth0 (可以看到192.168.0.3的mac地址变了)
-bash-2.05b# ls
test 

可以看到在manager上ssh上gg1后建立的test文件 
-bash-2.05b# echo "this is test" > test 
-bash-2.05b# cat test 
this is test 

可以看到现在gg1可以正常读写manager_bak上nfs出来的磁盘
现在把manager上的heartbeat服务启动起来 

[root@manager root]# /etc/init.d/heartbeat start
Starting High-Availability services: 
2007/12/06_12:46:08 INFO: Resource is stopped [ OK ]
-bash-2.05b# cat test 
this is test 

现在终于大功告成了,之前在不使用drbd的情况下,heartbeat也可以切换apache、dhcpd、portmap、nfs等等 服务,但是 nfs服务切换后,必须重新mount一下nfs共享出来的目录,否则会报 Stale NFS file handle 的错误。现在heartbeat+drbd配合使用后,nfs等等服务可以无缝切换,不必再重新mount一下nfs目录了

阅读(756) | 评论(0) | 转发(0) |
0

上一篇:DRBD的实验历程

下一篇:DRBD8.0 配置

给主人留下些什么吧!~~