免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 27190 | 回复: 32
打印 上一主题 下一主题

linux高可用(HA)集群笔记heartbeat+drbd+nfs (原创) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-12-10 16:10 |只看该作者 |倒序浏览
heartbeat+drbd
    如果主服务器宕机,造成的损失是不可估量的。要保证主服务器不间断服务,就需要对服务器实现冗余。在众多的实现服务器冗余的解决方案中,heartbeat为我们提供了廉价的、可伸缩的高可用集群方案。我们通过heartbeat+drbdLinux下创建一个高可用(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的配置比较简单,网上也有很多例子,这里就不多废话了)





[ 本帖最后由 okzb 于 2007-12-24 16:45 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-12-10 16:11 |只看该作者
开始编译安装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来启用相关的服务)

给link1接通电源,通过pxe启动系统(link1是一组服务器中的一台,是一台无盘服务器,启动后挂载在manager上保存的系统)

在manager上rlogin link1

[root@manager root]# rlogin link1

-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]# rlogin link1

-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上rlogin上link1后建立的test文件

-bash-2.05b# echo "this is test" > test

-bash-2.05b# cat test

this is test

可以看到现在link1可以正常读写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目录了

两栖生物体原创
66zhoubin@163.com

[ 本帖最后由 okzb 于 2007-12-10 16:13 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2007-12-10 17:32 |只看该作者
收了先,  有空慢慢 看,呵呵~~~ 谢谢楼主,也~~

论坛徽章:
0
4 [报告]
发表于 2007-12-21 14:32 |只看该作者
要珍惜别人的劳动成果。看了就要回帖。呵呵。写的不错。很详细了。

论坛徽章:
0
5 [报告]
发表于 2007-12-21 14:51 |只看该作者
不错,转到我的网站了 http://vrlinux.cn

论坛徽章:
0
6 [报告]
发表于 2008-01-02 16:51 |只看该作者
[root@manager ha.d]# drbdadm create-md r0

[root@manager ha.d]#mknod /dev/drbd0 b 147

可以省略的

直接执行/etc/rc.d/init.d/drbd start  就会出现create-md

论坛徽章:
0
7 [报告]
发表于 2008-01-03 13:32 |只看该作者
感谢楼主的无私分享,正在学习中.

论坛徽章:
0
8 [报告]
发表于 2008-01-15 14:28 |只看该作者
按照LZ的说明把  drbd+heartbeat+nfs 建立起来了,但是发现如果主失败,nfs可以正常切换到从,但是主一旦恢复了,ipfail打开后,nfs又切回主,但是这个时候第三方挂载nfs还是会出现 Stale NFS file handle, 这该怎么办呢?

论坛徽章:
0
9 [报告]
发表于 2008-01-18 17:59 |只看该作者
arp 问题怎么解决?貌似 要耽误蛮长时间

论坛徽章:
0
10 [报告]
发表于 2008-01-18 21:44 |只看该作者
楼主做的不错,但是有两个疑问
1.如果客户端在写入nfs共享的时候,manager当机,请问如何保证写入的数据正确性,请问有没有测试

2.不知道楼主有没有做failback,如果做了failback,manager正常的时候,由于drbd分区的不一致性,如何保证两者的数据统一性
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP