在Debian 5.0(Lenny)上使用DRBD和Heartbeat的高可用NFS服务器
这个HowTo解释了如何使用Debian 5(Lenny)和drbd8设置一个高可用性的NFS服务器。
几天前我做了这个设置。 只是为了好玩。 所以我想,这是一个好主意。
作者 - Vishal Sharma
创建 - 2010年3月9日
版本 - 1.0
免责声明 - 本手册是按原样提供的,绝对不提供任何形式的保证。 使用它自己承担风险。 这些步骤对我有用。 很可能,他们也应该为你工作。 如果遇到任何问题,请随时留下您的意见。 我会尽快解决这个问题。
以下是您需要做的事情的总结:
第1步.做系统准备。 这涉及设置您的基本硬件和软件。 (这不属于这个HowTo的一部分)
第2步.设置必要的IP地址。
第3步.安装必需的软件包。
第4步.编辑相关配置文件。
第5步.启动系统。
第6步.测试它以确保它实际工作。
第1步.做系统准备
我正在使用3个Debian系统。 所有这些都是标准的默认安装。 但是,我做了一个更改,将我的系统启动到文本模式。 由于我的机器上没有这么好的硬件,所以宁愿更喜欢使用命令行。
每个系统都有一个板载网络。 通常在生产系统中,可能并非如此。 但是,由于我的是一个简单的播放安装,我不在乎添加能够提供更好性能的东西。
如果您不想专用一个框,您可以随时使用Sun VirtualBox进行设置。 这样做更容易,因为它可以让您在进行任何重要的配置更改之前,先获取系统快照。
我的测试设置是基于2个服务器和一个客户端。 在我的情况下,这个客户端系统只是一个正常的NFS客户端从NFS服务器挂载共享。 我的设置在这里是主动/被动,没有主动/主动。 所以在任何给定的时间,你的主动系统失败,被动系统将接管。
在server01
和server02上
,我有2个分区,即
/ dev / hdb1
- 500GB - 将nfs装载为/ data
。
/ dev / hdc1
- 500MB - 这将存储drbd元数据。 它至少需要128MB。
确保您没有安装任何这些分区。 这将由drbd处理。 确保你只是做分区,只要离开它们。 没有格式,现在没有挂载。
第2步.设置必要的IP地址
以下是我命名我的系统的方式:
server01
- 192.168.1.2/24(eth0
)
server02
- 192.168.1.3/24(eth0
)
client01
- 192.168.1.4/24(eth0
)
确保您的/ etc / hosts
文件中有上述条目,以便名称解析不成问题。 这可能是最好的选择,您不希望为此设置DNS服务器的麻烦。
192.168.1.5/24
将是我的虚拟浮动IP地址。 这是外部世界将会看到的地址,随着国家的变化,它将从系统浮动到系统。
我的默认网关是192.168.1.1/24
,这是我的路由器。 我需要互联网访问包安装。
第3步.安装必需的软件包
HA集群运作良好的最重要的事情是 - 时代。 系统上的时间应该是一样的。 确保,确保您有ntp软件包到位。
server01# apt-get install ntp ntpdate
在server01
和server02
上执行上述操作
。
在服务器上,即server01
和server02
,您需要安装以下软件包来启动并运行。
drbd8,内核头文件,nfs-server安装和心跳。 所以这就是我所做的。
server01# apt-get update
server01# apt-get install linux-headers-`uname -r` drbd8-utils drbd8-source heartbeat nfs-kernel-server
(上述需要一段时间才能完成。)
安装完成后,使用以下命令使内核drbd模块:
server01# m-a a-i drbd8-source
这将执行一个编译并制作drbd内核模块。
server01# modprobe drbd
server01# lsmod | grep drbd
(这应该告诉你什么,如果这没有给你任何东西,那么有一些问题需要修复。)
禁用nfs启动时启动。 这是因为nfs启动和关闭由drbd处理,我们不希望系统干扰。
server01# update-rc.d -f nfs-kernel-server remove
server01# update-rc.d -f nfs-common remove
在server02
上执行相同的步骤。
第4步.创建/编辑相关配置文件
这些是您需要在server01
和server02
上编辑的文件。
处理NFS导出 - / etc / exports
- (在server01
和server02上
):
/data/export 192.168.1.0/255.255.255.0(rw)
对于drbd配置 - /etc/drbd.conf
(在server01
和server02上
):
global { usage-count yes; } common { syncer { rate 10M; } } resource r0 { protocol C; handlers { pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f"; pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f"; local-io-error "echo o > /proc/sysrq-trigger ; halt -f"; } startup { degr-wfc-timeout 120; # 2 minutes. } disk { on-io-error detach; } net { } syncer { rate 10M; al-extents 257; } on server01 { device /dev/drbd0; disk /dev/hdb1; address 192.168.1.2:7788; meta-disk /dev/hdc1[0]; } on server02 { device /dev/drbd0; disk /dev/hdb1; address 192.168.1.3:7788; meta-disk /dev/hdc1[0]; } }
对于心跳 - /etc/ha.d/ha.cf
- (在server01
和server02上
):
logfacility local0 keepalive 1 deadtime 10 bcast eth1 auto_failback on node server01 server02
设置心跳认证 - / etc / heartbeat / authkeys
- (在server01
和server02上
):
auth 3 3 md5 your_password
而不是使用md5,您也可以使用sha1。 不要忘记让这个文件只读/写入root。
chmod 600 /etc/heartbeat/authkeys
(在server01
和server02上
)
为了使ha资源可用 - /etc/ha.d/haresources
- (在server01
和server02上
):
server01 IPaddr::192.168.1.100 server01 drbddisk::r0 Filesystem::/dev/drbd0::/data::ext3 nfs-kernel-server
(注意:对于server02
,在haresources文件中,您必须注意到我已经使用了相同的主机名,即server01
,这是为了确保在server01
可以在线访问时, server02
会将控制权交还给它,它会转向作为次要的,请将上述主机名更改为server02
,如果您希望将其保留为主。)
完成以上所有操作之后,请给这些命令初始化drbd元磁盘(在server01
和server02上
):
server01# drbdadm create-md r0
( r0
这是资源名称。)
server01# drbdadm up all
做一个
cat /proc/drbd
在server01
和server02上
,您将看到server01
和server02
都处于辅助模式,并且它们不一致。 这很明显,因为我们还没有设置nfs系统,我们还没有定义哪个系统将是主服务器。 在我的情况下它是server01
。 所以我将在server01
上给出以下命令:
server01# drbdsetup /dev/drbd0 primary -o
server01# mkfs.ext3 /dev/drbd0
server01# mkdir /data
server01# mount -t ext3 /dev/drbd0 /data
默认情况下,nfs服务器将其挂载状态存储在/ var / lib / nfs下
,并且我们希望在故障转移的情况下保留该状态。 所以在server01
上这样做:
server01# mv /var/lib/nfs/ /data/
server01# ln -s /data/nfs/ /var/lib/nfs
server01# mkdir /data/export
server01# umount /data
server01# cat /proc/drbd
<---仔细看,你会注意到server01
是现在的主要系统。
在server02
上发出这些命令,准备好在
发生故障时接管。
mkdir /data
rm -fr /var/lib/nfs
ln -s /data/nfs /var/lib/nfs
嗯...就是这么多 您从配置的角度完成。 现在开始启动你的系统。
第5步.启动系统
在server01
和server02
上启动必要的服务:
/etc/init.d/drbd start
/etc/init.d/heartbeat start
上述成功完成后,您将注意到server01
将附加IP - 192.168.1.100
和/ data
。 您还可以检查/ proc / drbd
文件的实时状态。
在server02上,
您不应该看到192.168.1.100
和/ data
。
tail -f /var/log/messages
并观看乐趣。
第6步.测试它以确保它实际上有效
测试它的最好方式是做真实而艰难的方式。 只需关闭server01
,看看server02
如何接管。 看看server02
上的日志。 :)