您的位置:首页 > 运维架构 > 网站架构

构建高可用MFS分布式文件存储架构

2013-07-24 14:32 381 查看
现在有大量的企业采用共享存储服务器NFS的方式,来对应用数据进行网络存储,但这存在性能瓶颈和单点故障的问题,于是分布式文件存储管理系统开始流行起来。其优点是不言而喻的,本文为大家推荐了开源的分布式文件系统MFS,与NFS相比它是一种多对多的关系,这样一来,性能大幅提升,同时可靠性也高了许多!相信对大家有所帮助。大家都知道,目前MFS元数据服务器存在单点问题,因此我们可以通过DRBD提供磁盘及时同步,通过HeartBeat提供Failover,来达到高可用。相信DRBD大家都有了解过,DRBD(Distributed Replicated Block Device)是一种块设备,可以被用于高可用(HA)之中.它类似于一个网络RAID-1功能.当你将数据写入本地文件系统时,数据还将会被发送到网络中另一台主机上.以相同的形式记录在一个文件系统中. 本地(主节点)与远程主机(备节点)的数据可以保证实时同步.当本地系统出现故障时,远程主机上还会保留有一份相同的数据,可以继续使用.在高可用(HA)中使用DRBD功能,可以代替使用一个共享盘阵.因为数据同时存在于本地主机和远程主机上,切换时,远程主机只要使用它上面的那份备份数据,就可以继续进行服务了.DRBD的工作原理如下图: +----------+ | 文件系统 | +----------+ | V +-------------+ | 块设备层 | | (/dev/drbd1)| +-------------+ | | | | V V +------------+ +-------------+ | 本地硬盘 | | 远程主机硬盘| | (/dev/sdb) | | (/dev/sdb) | +------------+ +-------------+至于MFS更多的知识可以差看相关资料!这里不再多说!这里只是说明下MFS文件系统的组成!MFS文件系统的组成:1、元数据服务器。在整个体系中负责管理管理文件系统,目前MFS只支持一个元数据服务器master,这是一个单点故障,需要一个性能稳定的服务器来充当。希望今后MFS能支持多个master服务器,进一步提高系统的可靠性。2、数据存储服务器chunkserver。真正存储用户数据的服务器,存储文件时,首先把文件分成块,然后这些块在数据服务器chunkserver之间复制(复制份数可以手工指定,建议设置副本数为3)。数据服务器可以是多个,并且数量越多,可使用的"磁盘空间"越小,可靠性也越高。3、元数据日志服务器metalogger。 负责备份master服务器的变化日志文件,文件类型为changelog_ml.*.mfs,以便于在master server出问题的时候接替其进行工作,在1.6版中新增加的功能。4、客户端。使用MFS文件系统来存储和访问的主机称为MFS的客户端,成功挂载MFS文件系统以后,就可以像以前使用NFS一样共享这个虚拟性的存储了。整个系统架构图如下:

通过这个图我们也可以看出整个架构的环境:当前系统:Centos5.8 x86_64mfs-master(主机)eth0:192.168.8.200(对外)eth1:192.168.125.200(对内,HA专用)DRBD镜像分区:/dev/sdbmfs-bak(备机)eth0:192.168.8.201(对外)/192.168.125.201(对内,HA专用)DRBD镜像分区:/dev/sdb虚拟浮动VIP:192.168.8.210前期准备工作:1. 在主服务器的/etc/hosts文件中加入如下内容:192.168.8.200mfs-masterha01192.168.125.200ha01192.168.125.201 ha02192.168.8.201mfs-bak ha022. 更新系统组件和依赖包[root@mfs-master ~]# yum -y install gcc gcc-c++ bison patch unzip mlocate flex scanner generator automake autoconf kernel-headers kernel-devel3.元数据服务器建立一块用于挂载drbd设备的硬盘(先不要格式化操作)一.元数据服务器上的安装与配置1.drbd的安装与配置1.)DRBD安装(这里选择yum来安装,也可以下载源码编译安装)[root@mfs-master ~]# yum -y install kmod-drbd83 drbd83[root@mfs-master ~]# modprobe drbd[root@mfs-master ~]# lsmod |grep -i drbddrbd 300440 2如果没有提示,则系统找不到相应的模块执行下面的命令找到drbd.ko:[root@mfs-master ~]# modprobe -l | grep -i drbd/lib/modules/2.6.18-308.4.1.el5/extra/drbd83/drbd.ko2.)DRBD配置修改配置文件:[root@mfs-master ~]# mv /etc/drbd.conf /etc/drbd.conf.bak[root@mfs-master ~]# cat /etc/drbd.conf
global { usage-count yes; }

common { syncer { rate 50M; } }

resource r0 {

protocol C;

net {

cram-hmac-alg sha1;

shared-secret "secret string";

}

onmfs-master {

device    /dev/drbd1;

disk      /dev/sdb;

address   192.168.8.200:7898;

meta-disk  internal;

}

on mfs-bak {

device    /dev/drbd1;

disk      /dev/sdb;

address   192.168.8.201:7898;

meta-disk  internal;

}

}
3.)创建一个ro 资源[root@mfs-master ~]# drbdadm create-md r04.)启动DRBD[root@mfs-master ~]# /etc/init.d/drbd start 或 [root@mfs-master ~]# service drbd start[root@mfs-master ~]# cat /proc/drbd1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----ns:2007644 nr:0 dw:0 dr:2007644 al:0 bm:123 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0对输出的含义解释如下:ro表示角色信息,第一次启动drbd时,两个drbd节点默认都处于Secondary状态,ds是磁盘状态信息,“Inconsistent/Inconsisten”,即为“不一致/不一致”状态,表示两个节点的磁盘数据处于不一致状态。Ns表示网络发送的数据包信息。Dw是磁盘写信息Dr是磁盘读信息PS:以上步骤主备一样!!!!!!!!!!+++++++++++++++++++++++++++++++++++++++++++++++++++在mfs-master服务器上操作:5.)设置主备节点由于默认没有主次节点之分,因而需要设置两个主机的主次节点,选择需要设置为主节点的主机,然后执行如下命令:[root@mfs-master ~]# drbdsetup /dev/drbd1 primary -o或者[root@mfs-master ~]# drbdadm -- --overwrite-data-of-peer primary all接下来再执行如下命令[root@mfs-master ~]# drbdadm primary r0要是有多个资源的话可以执行以下命令:[root@mfs-master ~]# drbdadm primary all执行此命令后,开始同步两台机器对应磁盘的数据![root@mfs-master ~]# cat /proc/drbd1: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r----ns:576224 nr:0 dw:0 dr:581760 al:0 bm:34 lo:84 pe:369 ua:256 ap:0 ep:1 wo:b oos:1443196[====>...............] sync'ed: 28.4% (1443196/2007644)K delay_probe: 69finish: 0:03:56 speed: 6,024 (5,876) K/sec从输出可知:“ro状态现在变为“Primary/Secondary”,“ds”状态也变为“UpToDate/Inconsistent”,也就是“实时/不一致”状态,现在数据正在主备两个主机的磁盘间进行同步,且同步进度为28.4%,同步速度每秒5.8M左右。只有出现了Primary/Secondary表示主从机器已经识别到对方了,drbd启动正常。等待片刻,再次查看同步状态,输出如下:[root@mfs-master ~]#cat /proc/drbd1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----ns:2007644 nr:0 dw:0 dr:2007644 al:0 bm:123 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0我们再到备份服务器上查看下:[root@ mfs-bak ~]#cat /proc/drbd1: cs:WFConnection ro:Secondary/Primary ds:UpToDate/UpToDate C r---- ns:0 nr:4 dw:4 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0可以看到同步完成了,并且“ds“状态也变为“UpToDate/UpToDate”了。即为“实时/实时”状态了。6.)格式化并挂载文件系统mount操作只能在主节点进行[root@mfs-master ~]# mkfs.ext3 /dev/drbd1 [root@mfs-master ~]# mount /dev/drbd1 /usr/local/mfs[root@mfs-master ~]# mount/dev/sda2 on / type ext3 (rw)proc on /proc type proc (rw)sysfs on /sys type sysfs (rw)devpts on /dev/pts type devpts (rw,gid=5,mode=620)/dev/sda5 on /data type ext3 (rw)/dev/sda1 on /boot type ext3 (rw)tmpfs on /dev/shm type tmpfs (rw)none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)/dev/drbd1 on /data type ext3 (rw)PS:这里最好挂载到mfs的安装目录(后面主备服务器的MFS安装目录与这里的挂载目录相同!)7.)正常切换在主节点卸载磁盘分区,然后执行[root@mfs-master ~]# drbdadm secondary all如果不执行这个命令,直接在备用节点执行切换到主节点的命令,会报错:2: State change failed: (-1) Multiple primaries not allowed by configCommand 'drbdsetup 2 primary' terminated with exit code 11接着,在备用节点执行[root@mfs-bak ~]# drbdadm primary all最后在备用节点挂载磁盘分区即可:[root@mfs-bak ~]# mount /dev/drbd1 /mnt/mfs2. HeartBeat安装与配置(同时在主备上操作)1.) 安装heartbeat[root@mfs-master ~]# yum -y install libnet [root@mfs-master ~]# yum -y install heartbeat-devel [root@mfs-master ~]# yum -y install heartbeat-ldirectord [root@mfs-master ~]# yum -y install heartbeat 2.)创建ha.cf[root@mfs-master ~]# cat /etc/ha.d/ha.cf
logfile /var/log/ha.log

debugfile /var/log/ha-debug

bcast eth1

keepalive 2

warntime 10

deadtime 30

initdead 120

hopfudge 1

udpport 694

auto_failback on

node mfs-master

node mfs-bak
3.)配置心跳的加密方式:authkeys[root@mfs-master ~]# cat >> /etc/ha.d/authkeys << EOFauth 11 crcEOF再将authkeys 权限给为600[root@mfs-master ~]chmod 600 /etc/ha.d/authkeys4.)配置haresources[root@mfs-master ~]# cat >> /etc/ha.d/haresources << EOFmfs-master Initdrbd mfsmaster 192.168.8.210EOF这个文件中各字段的功能说明:第一个字段:是主机名,是uname -a得到的第二个字段:作用是执行当前的脚本命令此脚本可以定义在/etc/init.d/或/etc/ha.d/resource.d,此处我定义了一个名叫Initdrbd 的脚本命令,具体的见下面演示。第三个字段:作用定义启动mfsmaster进程,必须在/etc/init.d/或/etc/ha.d/resource.d能找到的可执行的脚本文件。第四个字段:作用是启动虚拟IP5.) 创建Initdrbd脚本[root@mfs-master ~]# cd /etc/ha.d/resource.d/[root@mfs-master ~]# cat 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')

drbdadm primary r0

mount /dev/drbd1 /usr/local/mfs

;;

'stop')

umount /usr/local/mfs

drbdadm  secondary r0

;;

'restart')

;;

*)

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

;;

esac

exit 0
[root@mfs-master ~]# chmod +x Initdrbd6.)启动heartbeat[root@mfs-master ~]# /etc/init.d/heartbeat start或[root@mfs-master ~]# service heartbeat start过会我们来ping下虚拟IP[root@mfs-master ~]# ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:0c:29:d8:bc:3e brd ff:ff:ff:ff:ff:ff inet 192.168.8.200/24 brd 192.168.8.255 scope global eth0inet 192.168.8.210/24 brd 192.168.8.255 scope global secondary eth0:03: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:0c:29:d8:bc:48 brd ff:ff:ff:ff:ff:ff inet 192.168.125.200/24 brd 192.168.125.255 scope global eth1[root@mfs-master ~]# ping 192.168.8.210要是能够PING通,说明配置成功!这里能PING能的前提是:mfsmaster服务必须安装好后,并且/etc/init.d/mfsmaster这个脚本同时也要存在!不然日志出出现意思为mfsmaster无法启动的error!
所以这里没有vip生成是正常,等后面mfs服务安装好后再回过头来测试!!![root@mfs-master ~]# tail -f /var/log/ha.log3.MFS元数据服务器安装配置(主备操作一样)切忌:用户的uid和gid必须两台主备机一样,否则切换之后,起不来!!!!!1.)安装mfs[root@mfs-master ~]# wget http://www.moosefs.org/tl_files/mfscode/mfs-1.6.20-2.tar.gz[root@mfs-master ~]# groupadd -g 1000 mfs[root@mfs-master ~]# useradd -u 1000 -g mfs -s /sbin/nologin mfs[root@mfs-master ~]# tar zxf mfs-1.6.20-2.tar.gz[root@mfs-master ~]# cd mfs-1.6.20-2[root@mfs-master mfs-1.6.20-2]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount[root@mfs-master mfs-1.6.20-2]# make;make install[root@mfs-master mfs-1.6.20-2]# chown -R mfs.mfs /usr/local/mfs2.)创建配置文件[root@mfs-master ~]# cd /usr/local/mfs/etc[root@mfs-master etc]# cp mfsmaster.cfg.dist mfsmaster.cfg[root@mfs-master etc]# cat >> mfsexports.cfg<< EOF192.168.8.0/24 / rw* . rwEOF[root@mfs-master etc]# cd ../var/mfs/[root@mfs-master etc]# cp metadata.mfs.empty metadata.mfs3.)设置环境变量[root@mfs-master ~]# echo "export PATH=$PATH:/usr/local/mfs/sbin" >> /etc/profile[root@mfs-master ~]# source /etc/profile4.)启动MFS[root@mfs-master ~]# mfsmaster start5.)定制hearbeat的启动文件mfsmaster[root@mfs-master ~]# cat /etc/init.d/mfsmaster
# chkconfig: 345 91 10

# description: mfs start.

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

. /etc/sysconfig/network

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

start() {

/usr/local/mfs/sbin/mfsmaster start

}

stop() {

/usr/local/mfs/sbin/mfsmaster stop

}

restart() {

/usr/local/mfs/sbin/mfsmaster restart

}

case"$1"in

start)

start

;;

stop)

stop

;;

restart)

restart

;;

*)

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

exit 1

esac

exit 0
[root@mfs-master ~]#chmod 755 /etc/init.d/mfsmaster二.元数据日志服务器metalogger安装与配置1.)安装mfs[root@metalogger ~]# wget http://www.moosefs.org/tl_files/mfscode/mfs-1.6.20-2.tar.gz[root@metalogger ~]# groupadd -g 1000 mfs[root@metalogger ~]# useradd -u 1000 -g mfs -s /sbin/nologin mfs[root@metalogger ~]# tar zxf mfs-1.6.20-2.tar.gz[root@metalogger ~]# cd mfs-1.6.20-2[root@metalogger mfs-1.6.20-2]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount[root@metalogger mfs-1.6.20-2]# make;make install[root@metalogger mfs-1.6.20-2]# chown -R mfs.mfs /usr/local/mfs[root@metalogger mfs-1.6.20-2]# echo "export PATH=$PATH:/usr/local/mfs/sbin" >> /etc/profile[root@metalogger mfs-1.6.20-2]# source /etc/profile2.)创建配置文件[root@metalogger ~]# cd /usr/local/mfs/etc该服务仅需要一个配置文件,这里我们只需要从模板文件复制一个,然后稍微加以修改即可![root@metalogger etc]# cp mfsmetalogger.cfg.dist mfsmetalogger.cfg[root@metalogger etc]# cat mfsmetalogger.cfg
# WORKING_USER = mfs

# WORKING_GROUP = mfs

# SYSLOG_IDENT = mfsmetalogger

# LOCK_MEMORY = 0

# NICE_LEVEL = -19

# DATA_PATH = /usr/local/mfs/var/mfs

# BACK_LOGS = 50

# META_DOWNLOAD_FREQ = 24

# MASTER_RECONNECTION_DELAY = 5

MASTER_HOST = 192.168.8.210

# MASTER_PORT = 9419

# MASTER_TIMEOUT = 60

# deprecated, to be removed in MooseFS 1.7

# LOCK_FILE = /var/run/mfs/mfsmetalogger.lock
这个配置文件,唯一需要修改的地方就是MASTER_HOST,它的值必须是元数据服务器上由heartbeat生成的虚拟VIP:192.168.8.210MASTER_HOST = 192.168.8.210其它选项不加说明,也很容易理解!3.) 元数据日志服务(metalogger)运行及关闭[root@metalogger etc]# mfsmetalogger start关闭服务[root@metalogger etc]# mfsmetalogger stop三.数据存储服务器 chunkserver 安装与配置1.)安装mfs[root@chunkserver1 ~]# wget http://www.moosefs.org/tl_files/mfscode/mfs-1.6.20-2.tar.gz[root@chunkserver1 ~]# groupadd -g 1000 mfs[root@chunkserver1 ~]# useradd -u 1000 -g mfs -s /sbin/nologin mfs[root@chunkserver1 ~]# tar zxf mfs-1.6.20-2.tar.gz[root@chunkserver1 ~]# cd mfs-1.6.20-2[root@chunkserver1 mfs-1.6.20-2]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmount[root@chunkserver1 mfs-1.6.20-2]# make;make install[root@chunkserver1r mfs-1.6.20-2]# chown -R mfs.mfs /usr/local/mfs[root@chunkserver1 mfs-1.6.20-2]# echo "export PATH=$PATH:/usr/local/mfs/sbin" >> /etc/profile[root@chunkserver1 mfs-1.6.20-2]# source /etc/profile2.)创建配置文件[root@chunkserver1 ~]# cd /usr/local/mfs/etc[root@chunkserver1 etc]# cp –a mfschunkserver.cfg.dist mfschunkserver.cfg[root@chunkserver1 etc]# cat mfschunkserver.cfg
#WORKING_USER = mfs

#WORKING_GROUP = mfs

# DATA_PATH = /usr/local/mfs/var/mfs

# LOCK_FILE = /var/run/mfs/mfschunkserver.pid

# SYSLOG_IDENT = mfschunkserver

# BACK_LOGS = 50

# MASTER_RECONNECTION_DELAY = 30

MASTER_HOST = 192.168.8.210

# MASTER_PORT = 9420

# MASTER_TIMEOUT = 60

# CSSERV_LISTEN_HOST = *

# CSSERV_LISTEN_PORT = 9422

# CSSERV_TIMEOUT = 60

# CSTOCS_TIMEOUT = 60

# HDD_CONF_FILENAME = /usr/local/mfs/etc/mfshdd.cfg
这个配置文件,唯一需要修改的地方就是MASTER_HOST,它的值必须是元数据服务器上由heartbeat生成的虚拟VIP:192.168.8.210MASTER_HOST = 192.168.8.210其它选项不加说明,也很容易理解![root@chunkserver1 etc]# cp -a mfshdd.cfg.dist mfshdd.cfg在配置文件mfshdd.cfg 中,我们给出了用于客户端挂接MFS分布式文件系统根分区所使用的共享空间位置。建议在chunk server 上划分单独的空间给 MFS 使用,这样做的好处是便于管理剩余空间。此处我们假定要使用两个共享点/mnt/mfschunk为此,我们在mfshdd.cfg 加入下面的文本行:/data/mfschunk[root@chunkserver1 etc]# mkdir -p /data/mfschunk[root@chunkserver1 etc]# chown -R mfs:mfs /data/mfschunk3.启动和关闭mfschunk[root@chunkserver1 etc]# mfschunkserver start[root@chunkserver1 etc]# tail -f /var/log/messages四、MFS 客户端的安装及配置1.)安装MFS 客户端Mfsmount 需要依赖FUSE,因此需要先安装好fuse![root@mfs-client ~]# wget http://cdnetworks-kr-2.dl.sourceforge.net/project/fuse/fuse-2.X/2.8.5/fuse-2.8.5.tar.gz[root@mfs-client ~]# tar zxf fuse-2.8.5.tar.gz[root@mfs-client ~]# cd fuse-2.8.5[root@mfs-client fuse-2.8.5]#./configure[root@mfs-client fuse-2.8.5]# make;make install[root@mfs-client fuse-2.8.5]# yum -y install fuse-devel[root@mfs-client fuse-2.8.5]# modprobe fuse[root@mfs-client fuse-2.8.5]# cdPS:这里不yum安装fuse-devl时后面安装mfs时启用 --enable-mfsmount 时会报错!2.)安装MFS 客户端程序export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH如果不执行这个操作,在后面安装MFS 的过程中,执行命令./configure --enable-mfsmount 时可能出现"checking for FUSE... no configure:error: mfsmount build was forced, but fuse development package is notinstalled"这样的错误,而不能正确安装MFS 客户端程序。[root@mfs-client ~]# wget http://www.moosefs.org/tl_files/mfscode/mfs-1.6.20-2.tar.gz[root@mfs-client ~]# groupadd -g 1000 mfs[root@mfs-client ~]# useradd -u 1000 -g mfs -s /sbin/nologin mfs[root@mfs-client ~]# tar zxf mfs-1.6.20-2.tar.gz[root@mfs-client ~]# cd mfs-1.6.20-2[root@mfs-client mfs-1.6.20-2]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --enable-mfsmount[root@mfs-client mfs-1.6.20-2]# make;make install[root@mfs-client mfs-1.6.20-2]# chown -R mfs.mfs /usr/local/mfs[root@mfs-client mfs-1.6.20-2]# echo "export PATH=$PATH:/usr/local/mfs/bin" >> /etc/profile[root@mfs-client mfs-1.6.20-2]# source /etc/profile[root@mfs-client mfs-1.6.20-2]# cd3.)挂载挂载前,我们PING下元数据服务器上的VIP[root@mfs-client ~]# ping 192.168.8.210[root@mfs-client ~]# mkdir –p /mnt/mfs[root@mfs-client ~]# mfsmount /mnt/mfs/ -H 192.168.8.210[root@mfs-client ~]# mount/dev/sda2 on / type ext3 (rw)proc on /proc type proc (rw)sysfs on /sys type sysfs (rw)devpts on /dev/pts type devpts (rw,gid=5,mode=620)/dev/sda5 on /data type ext3 (rw)/dev/sda1 on /boot type ext3 (rw)tmpfs on /dev/shm type tmpfs (rw)none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)mfs#192.168.8.210:9421 on /mnt/mfs type fuse (rw,nosuid,nodev,allow_other,default_permissions)[root@mfs-client ~]# df –h[root@mfs-client mfs]# df -hFilesystem Size Used Avail Use% Mounted on/dev/sda2 3.8G 2.4G 1.3G 65% //dev/sda5 4.9G 139M 4.5G 3% /data/dev/sda1 122M 18M 98M 16% /boottmpfs 144M 0 144M 0% /dev/shmmfs#192.168.8.210:9421 17G 0 17G 0% /mnt/mfs五.网页监控--mfscgiservmfscgiserv是用python编写的一个web服务工具,它的监听端口是9425,可以利用:/usr/local/mfs/sbin/mfscgiserv来启动,用户利用浏览器就可全面监控所有客户挂接,chunkserver及master server,客户端的各种操作等等,绝对是个好工具。通过浏览器可以查看:http://VIP:9425六.MFS客户端常用命令介绍[root@mfs-client mfs]# ll /usr/local/mfs/bin/total 556lrwxrwxrwx 1 root root 8 Jun 5 01:09 mfsappendchunks -> mfstoolslrwxrwxrwx 1 root root 8 Jun 5 01:09 mfscheckfile -> mfstoolslrwxrwxrwx 1 root root 8 Jun 5 01:09 mfsdeleattr -> mfstoolslrwxrwxrwx 1 root root 8 Jun 5 01:09 mfsdirinfo -> mfstoolslrwxrwxrwx 1 root root 8 Jun 5 01:09 mfsfileinfo -> mfstoolslrwxrwxrwx 1 root root 8 Jun 5 01:09 mfsfilerepair -> mfstoolslrwxrwxrwx 1 root root 8 Jun 5 01:09 mfsgeteattr -> mfstoolslrwxrwxrwx 1 root root 8 Jun 5 01:09 mfsgetgoal -> mfstoolslrwxrwxrwx 1 root root 8 Jun 5 01:09 mfsgettrashtime -> mfstoolslrwxrwxrwx 1 root root 8 Jun 5 01:09 mfsmakesnapshot -> mfstools-rwxr-xr-x 1 root root 384447 Jun 5 01:09 mfsmountlrwxrwxrwx 1 root root 8 Jun 5 01:09 mfsrgetgoal -> mfstoolslrwxrwxrwx 1 root root 8 Jun 5 01:09 mfsrgettrashtime -> mfstoolslrwxrwxrwx 1 root root 8 Jun 5 01:09 mfsrsetgoal -> mfstoolslrwxrwxrwx 1 root root 8 Jun 5 01:09 mfsrsettrashtime -> mfstoolslrwxrwxrwx 1 root root 8 Jun 5 01:09 mfsseteattr -> mfstoolslrwxrwxrwx 1 root root 8 Jun 5 01:09 mfssetgoal -> mfstoolslrwxrwxrwx 1 root root 8 Jun 5 01:09 mfssettrashtime -> mfstools-rwxr-xr-x 1 root root 137 Jun 5 01:09 mfssnapshot-rwxr-xr-x 1 root root 170799 Jun 5 01:09 mfstools七.整个系统架构总结1.heartbeat与drbd的集成DRBD的主从的切换依赖与heartbeat的服务,所以集成的关键点在于定义Initdrbd的脚本文件的定义和heartbeat的服务定义文件/etc/ha.d/resource.d。如mfs-master Initdrbd 就是集成DRBD和heartbeat。2.heartbeat与MFS的集成与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,启动成功主上查看:[root@mfs-master /]# cat /proc/drbd version: 8.3.13 (api:88/proto:86-96)GIT-hash: 83ca112086600faacab2f157bc5a9324f7bd7f77 build by mockbuild@builder10.centos.org, 2012-05-07 11:56:36 1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----- ns:2377 nr:41 dw:2418 dr:694 al:4 bm:1 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0备上查看:[root@mfs-bak ha.d]# cat /proc/drbdversion: 8.3.13 (api:88/proto:86-96)GIT-hash: 83ca112086600faacab2f157bc5a9324f7bd7f77 build by mockbuild@builder10.centos.org, 2012-05-07 11:56:36 1: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r----- ns:41 nr:2377 dw:2379 dr:173 al:1 bm:1 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0结论:说明主备上DRBD启动正常,之前连接正常!2.启动heartbeat,通过日志查看heartbeat包括关联的服务加载的情况,tail -f /var/log/ha.log[root@mfs-master /]# tail -f /var/log/ha.log IPaddr[15336]:2012/06/05_19:26:04 INFO: Resource is stoppedResourceManager[15238]:2012/06/05_19:26:04 info: Running /etc/ha.d/resource.d/IPaddr 192.168.8.210 startIPaddr[15409]:2012/06/05_19:26:04 INFO: Using calculated nic for 192.168.8.210: eth0IPaddr[15409]:2012/06/05_19:26:04 INFO: Using calculated netmask for 192.168.8.210: 255.255.255.0IPaddr[15409]:2012/06/05_19:26:04 INFO: eval ifconfig eth0:0 192.168.8.210 netmask 255.255.255.0 broadcast 192.168.8.255IPaddr[15392]:2012/06/05_19:26:04 INFO: Successheartbeat[15225]: 2012/06/05_19:26:04 info: local HA resource acquisition completed (standby).heartbeat[15197]: 2012/06/05_19:26:04 info: Standby resource acquisition done [foreign].heartbeat[15197]: 2012/06/05_19:26:04 info: Initial resource acquisition complete (auto_failback)heartbeat[15197]: 2012/06/05_19:26:05 info: remote resource transition completed.结论:heartbeat 启动成功!3.在主机器上ps的方式查看heartbeat 和MFS进程,确保服务启动,如果没有启动,可手动在启动一次。此时备份机器的mfs没有启动。[root@mfs-master /]# ps aux |grep haertroot 15507 0.0 0.2 61220 748 pts/0 S+ 19:30 0:00 grep haert[root@mfs-master /]# ps aux |grep heartroot 15197 0.0 4.4 58008 13008 ? SLs 19:25 0:00 heartbeat: master control processnobody 15200 0.0 2.1 51412 6412 ? SL 19:25 0:00 heartbeat: FIFO reader nobody 15201 0.0 2.1 51408 6408 ? SL 19:25 0:00 heartbeat: write: bcast eth1 nobody 15202 0.0 2.1 51408 6408 ? SL 19:25 0:00 heartbeat: read: bcast eth1 root 15509 0.0 0.2 61220 744 pts/0 S+ 19:30 0:00 grep heart[root@mfs-master /]# ps aux |grep mfsroot 14914 0.0 3.5 136048 10416 ? S 19:18 0:00 python /data/mfs/sbin/mfscgiservmfs 15320 0.8 27.3 93880 80508 ? S< 19:25 0:02 /usr/local/mfs/sbin/mfsmaster startroot 15511 0.0 0.2 61220 744 pts/0 S+ 19:30 0:00 grep mfs结论:主服务器上各服务正常启动4.停止主服务的heartbeat,查看主服务的日志,发现所有的关联服务都会被关闭,包括drbd,mfs,vip等。[root@mfs-master mfs]# service heartbeat stopStopping High-Availability services: [ OK ][root@mfs-master mfs]# tail -f /var/log/ha.log ResourceManager[14246]:2012/06/05_19:06:57 info: Running /etc/ha.d/resource.d/mfsmaster stopResourceManager[14246]:2012/06/05_19:06:57 info: Running /etc/ha.d/resource.d/Initdrbd stopheartbeat[14233]: 2012/06/05_19:06:58 info: All HA resources relinquished.heartbeat[8527]: 2012/06/05_19:07:00 info: killing HBFIFO process 8529 with signal 15heartbeat[8527]: 2012/06/05_19:07:00 info: killing HBWRITE process 8530 with signal 15heartbeat[8527]: 2012/06/05_19:07:00 info: killing HBREAD process 8531 with signal 15heartbeat[8527]: 2012/06/05_19:07:00 info: Core process 8530 exited. 3 remainingheartbeat[8527]: 2012/06/05_19:07:00 info: Core process 8531 exited. 2 remainingheartbeat[8527]: 2012/06/05_19:07:00 info: Core process 8529 exited. 1 remainingheartbeat[8527]: 2012/06/05_19:07:00 info: mfs-master Heartbeat shutdown complete.结论:可以看到各关联服务正关闭!5.查看备份机器的日志,发现已经开始启动关联的服务,此时备份机器上cat /proc/drbd出现Primary/Secondary 主机器上显示Secondary/Primary,说明DRBD切换成功,然后查看mfs是否启动,如果启动成功,恭喜您,高可用的MFS文件分布式系统已经搭建好了.查看日志:[root@mfs-bak ha.d]# tail -f /var/log/ha.log IPaddr[16737]:2012/06/05_19:23:31 INFO: Using calculated nic for 192.168.8.210: eth0IPaddr[16737]:2012/06/05_19:23:31 INFO: Using calculated netmask for 192.168.8.210: 255.255.255.0IPaddr[16737]:2012/06/05_19:23:31 INFO: eval ifconfig eth0:0192.168.8.210 netmask 255.255.255.0 broadcast 192.168.8.255IPaddr[16720]:2012/06/05_19:23:32 INFO: Successmach_down[16548]:2012/06/05_19:23:32 info: /usr/share/heartbeat/mach_down: nice_failback: foreign resources acquiredmach_down[16548]:2012/06/05_19:23:32 info: mach_down takeover complete for node mfs-master.heartbeat[16471]: 2012/06/05_19:23:32 info: mach_down takeover complete.heartbeat[16471]: 2012/06/05_19:23:49 WARN: node mfs-master: is deadheartbeat[16471]: 2012/06/05_19:23:49 info: Dead node mfs-master gave up resources.heartbeat[16471]: 2012/06/05_19:23:49 info: Link mfs-master:eth1 dead.切换后mfs是否自己启动起来:[root@mfs-bak ha.d]# ps aux |grep mfsmfs 16650 15.8 27.3 93800 80484 ? S< 19:23 0:02 /usr/local/mfs/sbin/mfsmaster startroot 16843 0.0 0.2 61220 748 pts/0 S+ 19:23 0:00 grep mfs查看有没有自动接管VIP[root@mfs-bak ha.d]# ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:0c:29:5a:64:12 brd ff:ff:ff:ff:ff:ff inet 192.168.8.201/24 brd 192.168.8.255 scope global eth0 inet 192.168.8.210/24 brd 192.168.8.255 scope global secondary eth0:03: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:0c:29:5a:64:1c brd ff:ff:ff:ff:ff:ff inet 192.168.125.201/24 brd 192.168.125.255 scope global eth1结论:主服务器的heartbeat 服务停掉后,从服务器heartbeat 服务马上接管过来!下面我们再重启主服务器 heartbeat 服务,他会自动再抢过来![root@mfs-master /]# service heartbeat startStarting High-Availability services: [ OK ][root@mfs-master /]# ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:0c:29:d8:bc:3e brd ff:ff:ff:ff:ff:ff inet 192.168.8.200/24 brd 192.168.8.255 scope global eth0 inet 192.168.8.210/24 brd 192.168.8.255 scope global secondary eth0:03: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:0c:29:d8:bc:48 brd ff:ff:ff:ff:ff:ff inet 192.168.125.200/24 brd 192.168.125.255 scope global eth1本人也刚开始对MFS进行初步了解,整个架构从搭建到最后的测试花了不少时间,凝聚了不少心血!希望大家提出宝贵的意见!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: