高可用NFS服务器使用DRBD和心跳在Debian 5.0(Lenny)

在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服务器挂载共享。 我的设置在这里是主动/被动,没有主动/主动。 所以在任何给定的时间,你的主动系统失败,被动系统将接管。

server01server02上 ,我有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

server01server02上执行上述操作

在服务器上,即server01server02 ,您需要安装以下软件包来启动并运行。

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步.创建/编辑相关配置文件

这些是您需要在server01server02上编辑的文件。

处理NFS导出 - / etc / exports - (在server01server02上 ):

/data/export 192.168.1.0/255.255.255.0(rw)

对于drbd配置 - /etc/drbd.conf (在server01server02上 ):

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 - (在server01server02上 ):

logfacility local0
keepalive 1
deadtime 10
bcast eth1
auto_failback on
node server01 server02

设置心跳认证 - / etc / heartbeat / authkeys - (在server01server02上 ):

auth 3
3 md5 your_password

而不是使用md5,您也可以使用sha1。 不要忘记让这个文件只读/写入root。

chmod 600 /etc/heartbeat/authkeys

(在server01server02上

为了使ha资源可用 - /etc/ha.d/haresources - (在server01server02上 ):

server01 IPaddr::192.168.1.100
server01 drbddisk::r0 Filesystem::/dev/drbd0::/data::ext3 nfs-kernel-server

(注意:对于server02 ,在haresources文件中,您必须注意到我已经使用了相同的主机名,即server01 ,这是为了确保在server01可以在线访问时, server02会将控制权交还给它,它会转向作为次要的,请将上述主机名更改为server02 ,如果您希望将其保留为主。)

完成以上所有操作之后,请给这些命令初始化drbd元磁盘(在server01server02上 ):

server01# drbdadm create-md r0

r0这是资源名称。)

server01# drbdadm up all

做一个

cat /proc/drbd

server01server02上 ,您将看到server01server02都处于辅助模式,并且它们不一致。 这很明显,因为我们还没有设置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步.启动系统

server01server02上启动必要的服务:

/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上的日志。 :)

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏