DRBD + HeartBeat + MooseFS

建立高可用的Moosefs文件系统


目录

1.概述... 2

2.系统构架... 2

3.DRBD.. 3

原理... 3

安装... 4

配置... 4

监控... 6

测试... 8

4.HeartBeat. 8

准备工作... 8

安装... 9

监控与测试... 11

5.MooseFS. 12

安装元服务器(主从都一样)... 13

备份服务器Backup server (metalogger) 安装... 14

存储块服务器Chunk servers 安装... 15

客户端Users’ computers 安装... 16

监控界面:... 17

测试... 17

6.集成与测试... 18

集成... 18

测试... 18



1.概述

Moose通过DNBD提供磁盘及时同步,通过HeartBeat提供Failover,来达到高可用。

2.系统构架

搭建此环境前,应该对整体的系统构架有清楚的认识,下面是我的系统构架图

spacer.gif






3.DRBD

原理
DRBD(Distributed Replicated BlockDevice)
是一种块设备,可以被用于高可用(HA)之中.它类似于一个网络RAID-1功能.当你将数据写入本地文件系统时,数据还将会被发送到网络中另一台主机上.以相同的形式记录在一个文件系统中. 本地(主节点)与远程主机(备节点)的数据可以保证实时同步.当本地系统出现故障时,远程主机上还会保留有一份相同的数据,可以继续使用.在高可用(HA)中使用DRBD功能,可以代替使用一个共享盘阵.因为数据同时存在于本地主机和远程主机上,切换时,远程主机只要使用它上面的那份备份数据,就可以继续进行服务了.
DRBD的工作原理如下图:
                    +----------+
                   | 文件系统 |
                   +----------+
                        |
                        V
                  +-------------+
                  |   块设备层  |
                  | (/dev/drbd1)|
                  +-------------+
                   |           |
                   |           |
                   V           V
             +------------+  +-------------+
             |  本地硬盘  |  | 远程主机硬盘|
             | (/dev/sda1)|  | (/dev/sda1) |
             +------------+  +-------------+
          ==========================================================

注意:你需要为本地主机和远程主机,指定一个DRBD使用的硬盘分区.这两个分区的大小建议相同.  我们指定两台主机的/dev/sda1 分区作为DRBD的使用的分区.此分区最好是新划分出来的分区,系统规划过程应预留此分区为DRBD,如果是已经安装好的系统没有分区的话,防止系统数据丢失,建议用Linux分区工具对系统进行分区。

*注意! 在没有建立drbd资源时,切不可提前格式化硬盘!
系统环境:Centos5.5 x86_64 [2.6.18-194.el5]
 master(
主机)IP地址:10.1.27.34  镜像分区:/dev/sda14GB
 slave (
备机)IP地址:10.1.27.35  镜像分区:/dev/sda14GB
软件环境:
   Centos
自带RPM    kernel-headers     kernel-devel

如果找不到,建议利用yum安装相关的包库 yum –y install kernel-headers kernel-devel2.

安装

从官方网站下载源码包来编译或直接使用yum源来安装,这里以CentOS为例说明安装过程,其它系统类似。

[root@server1 ~]# uname -a

Linux server1 2.6.18-194.el5 #1 SMP Fri Apr2 14:58:35 EDT 2010 i686 i686 i386 GNU/Linux

Note : 在安装过程中系统不要选择虚拟机内核去安装DRBD,否则会出现加载不了内核的错误,如我的内核是2.6.18-194.el5xen2.6.18-194.el5,应选择后者,在电脑启动的BIOS上课选择启动的内核

通过yum安装DRBD服务(请设置好网络和yum下载镜像):

Note: 在编译之前,首先要确认系统中已经安装了gcc,make, glibc,flex scanner generatorbison等工具,其中gcc的版本必须和编译当前linux内核所用的gcc是相同版本的。
查看gcc版本的命令:gcc -v
查看当前linux内核对应gcc版本的命令:cat/proc/version

[root@ server1 ~]# yum -y installkmod-drbd83 drbd83

检查DRBD是否安装成功:

[root@ server1 ~]# lsmod | grep -i drbd

drbd                  228528  3

如果没有提示,则系统找不到相应的模块执行下面的命令找到drbd.ko

[root@server1 ~]#  modprobe -l | grep -i drbd

/lib/modules/2.6.18-194.11.1.el5/weak-updates/drbd83/drbd.ko

安装成功之后/sbin目录下面有drbdadmdrbdmetadrbdsetup命令,以及/etc/init.d/drbd启动脚本。

配置

DRBD运行需要读取/etc/drbd.conf配置文件,下面是两台主机节点配置的drbd.conf文件的简单示例:

[root@ server1 ~]#cat /etc/drbd.conf

# 是否参加DRBD使用者统计.默认是yes

global { usage-count yes; }

# 设置主备节点同步时的网络速率最大值,单位是字节.

common { syncer { rate 50M; } }

# 一个DRBD设备(:/dev/drbdX),叫做一个"资源".里面包含一个DRBD设备的主备节点的相关信息.

resource r0 {

# 使用协议C.表示收到远程主机的写入确认后,则认为写入完成.

protocol C;

# 设置主备机之间通信使用的信息算法.

net{

      cram-hmac-alg sha1;

      shared-secret "secret string";

   }

# 每个主机的说明以"on"开头,后面是主机名.在后面的{}中为这个主机的配置.

  onserver1 {

# /dev/drbd1使用的磁盘分区是/dev/sda1

      device    /dev/drbd1;

      disk      /dev/sda1;

# 设置DRBD的监听端口,用于与另一台主机通信

      address   10.1.27.34:7898;

      meta-disk  internal;

      }

  onserver2 {

      device    /dev/drbd1;

      disk      /dev/sda1;

      address   10.1.27.35:7898;

      meta-disk  internal;

      }

}

drbd.conf的配置参数很多,有兴趣的话可以使用命令:mandrbd.conf来查看了解更多的参数说明。


建立drbd设备

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

注意:如果你在这步之前已经给/dev/sda1格式化的话,这里会报错,并且无法继续,抱错内容如下:

md_offset ...........
           al_offset...........
           bm_offset...........

          Found ext3 filesystem which uses

          Device size would be truncated, which
           wouldcorrupt data and result in
           'access beyondend of device' errors.
           You need toeither
          * use externalmeta data (recommended)
          * shrink thatfilesystem first
          * zero out thedevice (destroy the filesystem)
          Operation refused.

         Command 'drbdmeta

根据报错和官方描述的大概意思就是:有了文件系统,会被认为该设备已经被使用,不能被drbd所使用,最好的解决办法就是低格硬盘破坏该文件系统~
官方的方法如下:破坏文件系统

#dd if=/dev/zero bs=1M count=1 of=/dev/sda1;sync
# drbdadm create-md
r0  // 配置文件中的resource
 --==  Thank you for participating in the global usage survey  ==--
The server's response is:
you are the 1889th user to install this version
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
success

监控

启动服务

[root@server1 ~]#/etc/init.d/drbd start

[root@ server2~]#/etc/init.d/drbd start

两台机器同时启动

在任意节点查看节点状态

[root@ server1 ~]# cat /proc/drbd

1:cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r----

  ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:2007644

对输出的含义解释如下:

ro表示角色信息,第一次启动drbd时,两个drbd节点默认都处于Secondary状态,

ds是磁盘状态信息,“Inconsistent/Inconsisten”,即为“不一致/不一致”状态,表示两个节点的磁盘数据处于不一致状态。

Ns表示网络发送的数据包信息。

Dw是磁盘写信息

Dr是磁盘读信息


设置主节点

由于默认没有主次节点之分,因而需要设置两个主机的主次节点,选择需要设置为主节点的主机,然后执行如下命令:

[root@ server1 ~]#drbdsetup /dev/drbd1 primary–o

或者执行下面命令也是可以的

[root@ server1 ~]#drbdadm ----overwrite-data-of-peer primary all

第一次执行完此命令后,在后面如果需要设置哪个是主节点时,就可以使用另外一个命令:

[root@ server1 ~]#/sbin/drbdadm primary r0或者/sbin/drbdadmprimary all

执行此命令后,开始同步两台机器对应磁盘的数据

[root@ server1 ~]#cat /proc/drbd

1: cs:SyncSource ro:Primary/Secondaryds:UpToDate/Inconsistent C r----

ns:576224 nr:0 dw:0 dr:581760 al:0 bm:34lo:84 pe:369 ua:256 ap:0 ep:1 wo:b oos:1443196

[====>...............] sync'ed: 28.4%(1443196/2007644)K delay_probe: 69

finish: 0:03:56 speed: 6,024 (5,876) K/sec

从输出可知:“ro状态现在变为“Primary/Secondary”,“ds”状态也变为“UpToDate/Inconsistent”,也就是“实时/不一致”状态,现在数据正在主备两个主机的磁盘间进行同步,且同步进度为28.4%,同步速度每秒5.8M左右。只有出现了Primary/Secondary表示主从机器已经识别到对方了,drbd启动正常。

等待片刻,再次查看同步状态,输出如下:

[root@ server1 ~]#cat /proc/drbd

1: cs:Connected ro:Primary/Secondaryds:UpToDate/UpToDate C r----

ns:2007644 nr:0 dw:0 dr:2007644 al:0 bm:123lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

可以看到同步完成了,并且“ds“状态也变为“UpToDate/UpToDate”了。即为“实时/实时”状态了。

如果第一次设置主备节点时使用“/sbin/drbdadm primary r0”命令,那么会提示如下错误:

0: State change failed: (-2) Need access toUpToDate data

Command '/sbin/drbdsetup 0 primary'terminated with exit code 17

只要第一次用上面命令成功后,以后就可以用“/sbin/drbdadm primary r0”命令了。


格式化文件系统

由于mount操作只能在主节点进行,所以只有设置了主节点后才能格式化磁盘分区,然后挂载:

[root@ server1 ~]#mkfs.ext3 /dev/drbd1

[root@ server1 ~]#mount /dev/drbd1 /mnt/mfs


主备节点切换

主备节点切换有两种方式,分别是停止drbd服务切换和正常切换,依次介绍:

停止drbd服务切换


1.关闭主节点服务切换

此时挂载的drbd分区就自动在主节点卸载了,然后在备用节点执行切换命令:

[root@drbd2 ~]#drbdadm primary all

此时会报错:

State change failed: (-7) Refusing to bePrimary while peer is not outdated

Command 'drbdsetup 2 primary' terminatedwith exit code 11

因此,必须在备用节点执行如下命令:

[root@server2 ~]#drbdsetup /dev/drbd1primary –o

或者

[root@server2~]#drbdadm ----overwrite-data-of-peer primary all

此时就可以正常切换了。

当在备用节点执行切换到主节点命令后,原来的主用节点自动变为备用节点。无需在主用节点再次执行切换到备用节点的命令。


2.正常切换

在主节点卸载磁盘分区,然后执行

[root@drbd1 ~]#drbdadm secondary all

如果不执行这个命令,直接在备用节点执行切换到主节点的命令,会报错:

2: State change failed: (-1) Multipleprimaries not allowed by config

Command 'drbdsetup 2 primary' terminatedwith exit code 11

接着,在备用节点执行

[root@server2 ~]#drbdadm primary all

最后在备用节点挂载磁盘分区即可:

[root@ server2 ~]#mount /dev/drbd1  /mnt/mfs

测试

1)  切换测试
master主节点
[root@ server2 ~]mount /dev/drbd1  /mnt/mfs
[root@ server2 ~]cd /mnt/mfs/

[root@ server2 ~]vi test

[root@ server2 ~]echo “testing…”>test
接下来你需要将DRBD的主从机互换一下.
可以执行下面的操作:
在主机上,先要卸载掉DRBD设备.
[root@ server2 ~]umount /mnt/mfs
[root@ server2 ~]drbdadm secondary r0
现在,两台主机都是"备机"需要把备节点升为主节点
[root@ server2 ~]drbdadm primary r0
[root@ server2 ~]mount /dev/drbd1 /mnt/mfs
[root@ server2 ~]ls /mnt/mfs 查看是否有test文件


2)  灾难测试
master主节点
[root@ server2 ~]mount /dev/drbd1 /mnt/mfs
[root@ server2 ~]cd /mnt/mfs/

[root@ server2 ~]vi test1

[root@ server2 ~]echo “test1ing…”>test1
slave备节点
[root@ server2 ~]service drbd stop
[root@ server2 ~]mount /dev/sda1 /mnt/mfs

4.HeartBeat


准备工作

1.网络布局

IP设置:

HA01 10.1.27.34   (eth0 对外IP)   心跳:192.168.91.1eth1: 对内IP(HA专用)  
 HA02 10.1.27.35    (eth0 对外IP)  心跳:192.168.91.1 eth1: 对内IP(HA专用)
浮动IP在这里不需要设置这个IP是在安装heartbeat时设置


2.网络测试

[root@server1 ~]# ping HA02

[root@server1 ~]# ping server2

如果网络网络不通请检查网络。


3.检查主机的几个配置文件


server1hosts内容如下:

[root@server1 ~]# cat /etc/hosts        
127.0.0.1              localhost.localdomain localhost

10.1.27.34               server1               HA01

192.168.91.1  HA01

192.168.91.2  HA02

10.1.27.35 server2    


server2hosts内容如下:      

[root@server2 ~]#  cat /etc/hosts      

127.0.0.1               localhost.localdomain localhost

10.1.27.35              server2                 HA02

192.168.91.1 HA01

192.168.91.2 HA02

10.1.27.34 server1

[
root@server1 ~]# cat /etc/host.conf    
order hosts,bind  

安装

安装heartbeat(主从都需安装)

yum install libnet        
yum install heartbeat-devel        
yum installheartbeat-ldirectord        
yum install heartbeat    


安装过程中如果出现依赖的包,利用yum安装即可。


配置文件

cp /usr/share/doc/heartbeat-2.1.3/ha.cf/etc/ha.d/        
cp /usr/share/doc/heartbeat-2.1.3/authkeys/etc/ha.d/        
cp /usr/share/doc/heartbeat-2.1.3/haresources /etc/ha.d/


a.配置ha.cf

编辑hertbeat主配置文件ha.cf2个主机上的内容一样。

[root@server1 ~]# cat /etc/ha.d/ha.cf

logfile /var/log/ha_log/ha-log.log ## ha的日志文件记录位置。如没有该目录,则需要手动添加

bcast eth1 ##使用eth1做心跳监测

keepalive 2 ##设定心跳(监测)时间时间为2

warntime 10                  

deadtime 30            

initdead 120                    

hopfudge 1                    

udpport 694 ##使用udp端口694 进行心跳监测

auto_failback on ##是否恢复到它的primary节点

node server1 ##节点1,必须要与 uname-n 指令得到的结果一致。

node server2 ##节点2


b.配置心跳的加密方式:authkeys(主从相同)

[root@server1 ~]# vi /etc/ha.d/authkeys

auth 1

1 crc

#2 sha1 HI!

#3 md5 Hello!

可以选择的几种验证方式,

最后记得将authkeys  权限给为600

[root@server1 ~]chmod600 /etc/ha.d/authkeys


c.编辑haresources2个主机上的内容一样。

[root@server1 ~]# vi /etc/ha.d/haresources

server1 Initdrbd  mfsmaster 10.1.27.38


第一个字段是主机名,是uname -a得到的

第二个字段作用是执行当前的脚本命令此脚本可以定义在/etc/init.d//etc/ha.d/resource.d,此处我定义了一个名叫Initdrbd 的脚本命令,具体的见下面演示。

第三个字段作用定义启动mfsmaster进程,必须在/etc/init.d//etc/ha.d/resource.d能找到的可执行的脚本文件。

第四个字段作用是启动虚拟的IP


d.Initdrbd脚本制作

[root@server1 ~]# cd /etc/ha.d/resource.d/

[root@server1 ~]# vi Initdrbd

#!/bin/sh

unset LC_ALL; export LC_ALL

unset LANGUAGE; export LANGUAGE

prefix=/usr

exec_prefix=/usr

. /etc/ha.d/shellfuncs

 case"$1" in

  'start')

   drbdadmprimary r0

   mount/dev/drbd1 /mnt/usb

       ;;

  'stop')

   umount/mnt/usb

   drbdadm  secondary r0      

   ;;

'restart')

       ;;

*)

      echo "Usage: $0 { start | stop | restart }"

       ;;

esac

exit 0

监控与测试

常用的命令


启动/etc/init.d/heartbeat start 或者service heartbeatstart

停止/etc/init.d/heartbeat stop 或者 service heartbeatstop

重启/etc/init.d/heartbeat restart或者 service heartbeatrestart


监视服务tail -f /var/log/ha_log/ha-log.log 来查看启动的服务过程,具体的路径需要看配置文件的cat /etc/ha.d/ha.cf的日志路径的设定。


简单的测试


两台机器都修改配置文件

[root@server1]# vi /etc/ha.d/haresources

server1 10.1.27.38  httpd

利用虚拟IP和启动的Appache服务来,测试heartbeat的切换。

为两台机器建立标识文件如下

[root@server1]# cd /var/www/html

[root@server1 html]# cat index.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<TITLE> New Document </TITLE>

<META NAME="Generator" CONTENT="EditPlus">

<META NAME="Author" CONTENT="">

<META NAME="Keywords" CONTENT="">

<META NAME="Description" CONTENT="">

</HEAD>

<BODY>

 server1 is running

</BODY>

</HTML>


[root@server2]# cd /var/www/html

[root@server1 html]# cat index.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<TITLE> New Document </TITLE>

<META NAME="Generator" CONTENT="EditPlus">

<META NAME="Author" CONTENT="">

<META NAME="Keywords" CONTENT="">

<META NAME="Description" CONTENT="">

</HEAD>

<BODY>

 Server2 is running

</BODY>

</HTML>


a). 两台机器分别启动

b). 然后在两台机器意外的其他机器上输入http://10.1.27.38

c). 正常会显示server1 isrunning,

d). server1宕机或者关闭heartbeat,则会出现server2接管工作的状态,刷新浏览器出现server2 is running

e). 恢复server1,过数秒后刷新浏览器出现server1is running,

f). 测试成功


Note:如果输入http:// 10.1.27.38 出现错误,请检查配置文件里面的服务是否写对了,查看日志文件看服务是否起来了,如果确定全部运行正常,还是没有WEB页面显示结果,请检查防火墙。

5.MooseFS

我们假定使用的主机ip 地址分配如下:

· 主控服务器Master server: 10.1.27.34

· 主控服务器Master server: 10.1.27.35

· 主控备份服务器Metalogger server: 10.1.27.31

· 存储块服务器Chunk servers: 10.1.27.31 and 10.1.27.32

· 客户端主机 (clients): 10.1.27.33


安装元服务器(主从都一样)

切忌:用户的uidgid必须两台主备机一样,否则切换之后,起不来!!!!!!

(1)、创建用户:

[root@server1 /]# groupadd -g 65534 mfs

[root@server1 /]# useradd -u 65534 -g mfs

(2)、设置依赖库

exportKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

[root@server1 /]# tar -zxvf mfs-1.6.15.tar.gz

[root@server1 ]#./configure --prefix=/mnt/mfs --with-default-user=mfs--with-default-group=mfs --disable-mfschunkserver --disable-mfsmount

[root@server1 /]# make && makeinstall

Note:安装时候一定要记得带prefix=/mnt/mfs,把安装目录全部置于DRBD的挂载目录,这样方便以后不能去指定路径去挂载。

(3)安装必要文件

[root@server1 /]# cd /mnt/mfs/etc

[root@server1 etc]#cpmfsmaster.cfg.dist mfsmaster.cfg

[root@server1 etc]#cpmfsmetalogger.cfg.dist mfsmetalogger.cfg

[root@server1 etc]#cpmfsexports.cfg.dist mfsexports.cfg

[root@server1 etc]#cd /mnt/mfs/var/mfs/

[root@server1 mfs]#cpmetadata.mfs.empty metadata.mfs


(4)启动mfs

[root@server1 mfs]#/mnt/mfs/sbin/mfsmasterstart


(5)、定制hearbeat的启动文件mfsmaster

[root@server1 mfs]#vi /etc/init.d/mfsmaster

# chkconfig: 345 91 10

# description: mfs start.

# 包含函数库

. /etc/rc.d/init.d/functions

# 获取网络配置

. /etc/sysconfig/network

# 检测 NETWORKING 是否为 "yes"

[ "${NETWORKING}" ="no" ] && exit 0

# 启动服务函数

start() {

      /mnt/usb/sbin/mfsmaster start

}

# 关闭服务函数

stop() {

      /mnt/usb/sbin/mfsmaster stop

}

# 重启服务

restart() {

      /mnt/usb/sbin/mfsmaster restart

}

# 根据参数选择调用

case "$1" in

start)

      start

      ;;

stop)

      stop

      ;;

restart)

      restart

      ;;

 *)

      echo $"Usage: $0 start|stop|restart"

      exit 1

esac

exit 0

[root@server1 mfs]#chmod 755/etc/init.d/mfsmaster


备份服务器Backup server (metalogger) 安装

用来安装metalogger 的主机,在性能上应该比master 强大(至少有更多的内存)。一旦主控服务器master 失效,只要导入changelogs 到元数据文件,备份服务器metalogger将能接替发生故障的master,备份服务器Metalogger安装跟主控服务器master 安装非常类似。其安装命令如下:

1、 创建组mfs

#groupadd mfs

2、创建用户mfs

#useradd -g mfs mfs

3、切换目录

#cd /usr/src

4、解包归档文件

#tar -zxvf mfs-1.6.15.tar.gz

5、切换目录

#cd mfs-1.6.15

6、配置

#./configure --prefix=/usr --sysconfdir=/etc \

--localstatedir=/var/lib --with-default-user=mfs \

--with-default-group=mfs --disable-mfschunkserver --disable-mfsmount

7、编译及安装

#make

#make install

8、产生配置文件

#cd /etc

#cp mfsmetalogger.cfg.dist mfsmetalogger.cfg

类似地,修改/etc/hosts 文件,增加下面的行:

10.1.27.38 mfsmaster

现在,我们来试着运行备份服务mfsmetaloger:

#/usr/sbin/mfsmetalogger start

在一个生产环境里,我们应当设置自动启动脚本,以便操作系统重新启动时,MooseFS

mfsmetalogger服务也能自动运行。

存储块服务器Chunk servers 安装

在每个chunk server 主机上执行下面的命令:

#groupadd mfs

#useradd -g mfs mfs

#cd /usr/src

#tar -zxvfmfs-1.6.15.tar.gz

#cd mfs-1.6.15

#./configure--prefix=/usr --sysconfdir=/etc \

--localstatedir=/var/lib--with-default-user=mfs \

--with-default-group=mfs--disable-mfsmaster

#make

#make install


准备chunk server 服务所需的配置文件:

#cd /etc/

#cpmfschunkserver.cfg.dist mfschunkserver.cfg

#cp mfshdd.cfg.distmfshdd.cfg

为了测试这个安装,我们保留mfschunkserver.cfg文件不做任何改动;如果读者想了解

配置文件mfschunkserver.cfg 更详细的信息,请查看手册页 (man

mfschunkserver.cfg)

在配置文件mfshdd.cfg 中,我们给出了用于客户端挂接MooseFS 分布式文件系统根分区所

使用的共享空间位置。建议在chunk server上划分单独的空间给 MooseFS 使用,这样做的好处

是便于管理剩余空间。此处我们假定要使用两个共享点/mnt/mfschunks1和

/mnt/mfschunks2,为此,我们在mfshdd.cfg 加入下面的文本行:

/mnt/mfschunks1

/mnt/mfschunks2

在启动chunk server 前,需确保用户mfs 有权限读写将要被挂接的分区(因为chunk server 运

行时要在此创建一个.lock 的文件):

#chown -R mfs:mfs/mnt/mfschunks1

#chown -R mfs:mfs/mnt/mfschunks2


类似地,修改/etc/hosts 文件,增加下面的行:

10.1.27.38 mfsmaster


利用双热备虚拟IP来接管mfsmaster服务

开始启动chunk server:

#/usr/sbin/mfschunkserverstart

客户端Users’ computers 安装

为了挂接基于MooseFS 分布式文件,客户端主机必须安装FUSE 软件包( fuse 版本号至少2.6,推荐使用版本号大于2.7.2 的fuse)。如果系统没有安装fuse,你必须手动对其进行安装。

#cd /usr/src

#tar -zxvffuse-2.8.3.tar.gz

#cd fuse-2.8.3

#./configure

#make

#make install

安装客户端软件 mfsmount 的步骤:

#cd /usr/src

#tar -zxvfmfs-1.6.15.tar.gz

#cd mfs-1.6.15

#./configure--prefix=/usr --sysconfdir=/etc \

--localstatedir=/var/lib--with-default-user=mfs \

--with-default-group=mfs--disable-mfsmaster \

--disable-mfschunkserver

#make

#make install


修改文件/etc/hosts ,增加如下的文本行:

10.1.27.38 mfsmaster


假定客户端的挂接点是/mnt/mfs,我们将以下面的指令来使用MooseFS


1、 创建挂接点

#mkdir -p /mnt/mfs


2、开始挂接操作

#/usr/bin/mfsmount/mnt/mfs -H mfsmaster

执行命令df h | grep mfs 检查分区情况,可能的输出如下:

/storage/mfschunks/mfschunks1

2.0G 69M 1.9G 4%/mnt/mfschunks1

/storage/mfschunks/mfschunks2

2.0G 69M 1.9G 4%/mnt/mfschunks2

mfs#mfsmaster:94213.2G 0 3.2G 0% /mnt/mfs

监控界面:

mfscgiserv的使用Mfscgiserv是用python编写的一个web服务器,它的监听端口是9425

可以利用:/mnt/mfs/sbin/mfscgiserv来启动,用户利用浏览器就可全面监控所有客户挂接,chunkservermasterserver,客户端的各种操作等等,绝对是个好工具。

在任何一台装有浏览器的机器上都可以查看:http://10.1.27.389425

测试

MooseFS 挂接点下创建目录folder1,在该目录,我们将以一个副本的方式存放文件 (设置goal=1):

#mkdir-p /mnt/mfs/folder1

再在挂接点创建第2 个目录 folder2, 在该目录,我们将以两个个副本的方式存放文件(设置goal=2):

#mkdir-p /mnt/mfs/folder2

使用命令mfssetgoal –r 设定目录里文件的副本数:

1、副本数为1

#mfssetgoal-r 1 /mnt/mfs/folder1

/mnt/mfs/folder1:

inodeswith goal changed: 0

inodeswith goal not changed: 1

inodeswith permission denied: 0


2、副本数为2

#mfssetgoal-r 2 /mnt/mfs/folder2

/mnt/mfs/folder2:

inodeswith goal changed: 0

inodeswith goal not changed: 1

inodeswith permission denied: 0

拷贝同一个文件到两个目录:

cp/usr/src/mfs-1.6.15.tar.gz /mnt/mfs/folder1

cp/usr/src/mfs-1.6.15.tar.gz /mnt/mfs/folder2

命令mfschunkfile 用来检查给定的文件以多少副本数来存储。对应目录folder1 来说,

有一个副本存储在一个chunk 里:

#mfscheckfile/mnt/mfs/folder1/mfs-1.6.15.tar.gz

/mnt/mfs/folder1/mfs-1.6.15.tar.gz:

1copies: 1 chunks


而在目录folder2 中,文件 mfs-1.6.15.tar.gz 是以两个副本保存的:

#mfscheckfile/mnt/mfs/folder2/mfs-1.6.15.tar.gz

/mnt/mfs/folder2/mfs-1.6.15.tar.gz:

2copies: 1 chunks

附加信息。当所有的组件被安装到同一个物理主机的时候,即便设定了goal=2 来到达保存两个副本的目的,但你可能看到的只是一个副本而已这是合理的,尽管有两个磁盘,但它只是一个chunk server 啊!


6.集成与测试

集成

1.heartbeatdrbd的集成

DRBD的主从的切换依赖与heartbeat的服务,所以集成的关键点在于定义Initdrbd的脚本文件的定义和heartbeat的服务定义文件/etc/ha.d/resource.d。如server1 Initdrbd 就是集成DRBDheartbeat


2.heartbeatMFS的集成

DRBD一样,mfsmaster的脚本文件定义与heartbeat的服务定义文件/etc/ha.d/resource.d中即可。


3.drbd mfs 的集成

在主服务器中,必须把MFS的安装文件全部安装到drbd的挂载目录中去,安装到块设备上去,所以在主从切换的时候,备份机器拿到安装环境和主的一样,那么通过同样的方式来启动MFS进程,达到切换切换启动MFS的目的。


测试

1.两台server上启动DRBD,利用cat /proc/drbd 查看启动情况和网络状态

主机器上显示Primary/Secondary 备份机器上显示Secondary/Primary,启动成功

2.启动heartbeat,通过日志查看heartbeat包括关联的服务加载的情况,tail –f /var/log/ha_log/xxx.log

3.在主机器上Ps 的方式查看heartbeat MFS进程,确保服务启动,如果没有启动,可手动在启动一次。此时备份机器的mfs没有启动。

4.停止主服务的heartbeat,查看主服务的日志,发现所有的关联服务都会被关闭,包括drbd,mfs,vip等。

5.查看备份机器的日志,发现已经开始启动关联的服务,此时备份机器上cat /proc/drbd

出现Primary/Secondary 主机器上显示Secondary/Primary,说明DRBD切换成功,然后查看mfs是否启动,如果启动成功,恭喜您,高可用的MFS文件分布式系统已经搭建好了。