Moosefs分布式文件系统集群部署

Moosefs分布式存储

MFS特性:

1. Free(GPL)

2. 通用文件系统,不需要修改上层应用就可以使用

3. 可以在线扩容,体系架构可伸缩性极强。

4. 部署简单。

5. 高可用,可设置任意的文件冗余程度(提供比raid1+0更高的冗余级别,而绝对不会影响读或写的性能,只会加速!)

6.  可回收在指定时间内删除的文件( ”回收站“提供的是系统级别的服务,不怕误操作了,提供类似oralce 的闪回等高级dbms的即时回滚特性!)

7. 提供netapp,emc,ibm等商业存储的snapshot特性。(可以对整个文件甚至在正在写入的文件创建文件的快照)

8. google filesystem的一个c实现。

9. 提供web gui监控接口。

10. 提高随机读或写的效率。

11. 提高海量小文件的读写效率。

可能的瓶颈:

1. master本身的性能瓶颈。mfs系统master存在单点故障如何解决?moosefs+drbd+heartbeat 来保证master单点问题?不过在使用过程中不可能完全不关机和间歇性的网络中断!

2. 体系架构存储文件总数的可遇见的上限。(mfs把文件系统的结构缓存到master的内存中,文件越多,master的内存消耗越大,8g对应2500w的文件数,2亿文件就得64GB内存 )。

master服务器CPU负载取决于操作的次数,内存的使用取决于文件和文件夹的个数。

MFS文件系统结构: 

包含4种角色:  

        管理服务器managing server (master) 

          元数据日志服务器Metalogger serverMetalogger)       

        数据存储服务器data servers (chunkservers)  

        客户机挂载使用client computers  

     110422_w2Mt_1867979.png

 各种角色作用: 

1. 管理服务器:负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复.多节点拷贝。

2. 元数据日志服务器: 负责备份master服务器的变化日志文件,文件类型为changelog_ml.*.mfs,以便于在master server出问题的时候接替其进行工作

3. 数据存储服务器:负责连接管理服务器,听从管理服务器调度,提供存储空间,并为客户提供数据传输。

4. 客户端: 通过fuse内核接口挂接远程管理服务器上所管理的数据存储服务器,看起来共享的文件系统和本地unix文件系统使用一样的效果。

MFS读写原理:

105617_fe7g_1867979.png

105620_3cWc_1867979.png

原始的读/写速度很明显是主要取决于所使用的硬盘的性能、网络的容量和拓扑结构的,使用的硬盘和网络的吞吐量越好,整个系统的性能也就会越好

MFS部署:

主机环境:RHEL6.5 X86_64 selinux and iptables disabled

Master:192.168.0.60

Metalogger: 192.168.0.70

Chunkserver: 192.168.0.1 192.168.0.2

Client: 192.168.0.3    

 一、安装准备--生成rpm,便于部署:

# yum install gcc make rpm-build fuse-devel zlib-devel -y

# rpmbuild -tb mfs-1.6.26.tar.gz          ##只支持大版本,即如果是mfs-1.6.26.1.tar.gz将其重命名即可

# ls ~/rpmbuild/RPMS/x86_64

mfs-cgi-1.6.26-1.x86_64.rpm       mfs-master-1.6.26-1.x86_64.rpm

mfs-chunkserver-1.6.26-1.x86_64.rpm  mfs-metalogger-1.6.26-1.x86_64.rpm

mfs-client-1.6.26-1.x86_64.rpm

 二、主控服务器 Master server 安装:

# yum localinstall -y  mfs-master-1.6.26-1.x86_64.rpm mfs-cgi-1.6.26-1.x86_64.rpm mfs-cgiserv-1.6.26-1.x86_64.rpm

# cd /etc/mfs

# cp mfsmaster.cfg.dist mfsmaster.cfg

此文件中凡是用#注释掉的变量均使用其默认值,基本不需要就可以工作:

#WORKING_USER和WORKING_GROUP:是运行master server的用户和组;
#SYSLOG_IDENT:是master server在syslog中的标识;
#LOCK_MEMORY:是否执行mlockall()以避免mfsmaster 进程溢出(默认为0);
#NICE_LEVE:运行的优先级(   如果可以默认是 -19; 注意: 进程必须是用root启动);
#EXPORTS_FILENAME:被挂接目录及其权限控制文件的存放位置
#TOPOLOGY_FILENAME : 定义MFS网络拓扑结构的文件位置
#DATA_PATH:数据存放路径,此目录下大致有三类文件,changelog,sessions和stats;
#BACK_LOGS:metadata的改变log文件数目(   默认是 50);
#BACK_META_KEEP_PREVIOUS:保存以前mfs元数据的文件数,默认值是1;
#REPLICATIONS_DELAY_INIT:延迟复制的时间(默认是300s);
#REPLICATIONS_DELAY_DISCONNECT:chunkserver断开的复制延迟(默认是3600);
# MATOML_LISTEN_HOST:metalogger监听的IP地址(默认是*,代表任何IP);
# MATOML_LISTEN_PORT:metalogger监听的端口地址(默认是9419);
# MATOCS_LISTEN_HOST:用于chunkserver连接的IP地址(默认是*,代表任何IP);
# MATOCS_LISTEN_PORT:用于chunkserver连接的端口地址(默认是9420);
# MATOCU_LISTEN_HOST/MATOCL_LISTEN_HOST:用于客户端挂接连接的IP地址(默认是*,代表任何IP);
# MATOCU_LISTEN_PORT/MATOCL_LISTEN_PORT:用于客户端挂接连接的端口地址(默认是9421);
#CHUNKS_LOOP_CPS:chunks的回环每秒检查的块最大值,默认100000;
# CHUNKS_LOOP_TIME :chunks的回环频率(默认是:300秒);
# CHUNKS_SOFT_DEL_LIMIT :一个chunkserver中可以删除chunks   的最大数,软限 (默认:10)
#CHUNKS_HARD_DEL_LIMIT:一个chunkserver中可以删除chunks   的最大数,硬限 (默认:25)
# REPLICATIONS_DELAY_DISCONNECT:chunkserver断开后的复制延时(默认:3600秒)# CHUNKS_WRITE_REP_LIMIT:在一个循环里复制到一个chunkserver的最大chunk数目(默认是2)
# CHUNKS_READ_REP_LIMIT :在一个循环里从一个chunkserver复制的最大chunk数目(默认是10)
# REJECT_OLD_CLIENTS:弹出低于1.6.0的客户端挂接(0或1,默认是0)
# deprecated:
# CHUNKS_DEL_LIMIT - use CHUNKS_SOFT_DEL_LIMIT instead
# LOCK_FILE - lock system has been changed, and this option is used only to search for old lockfile


# cp mfsexports.cfg.dist mfsexports.cfg

# vi mfsexports.cfg

192.168.0.0/24               /    rw,alldirs,maproot=0

该文件每一个条目分为三部分:

第一部分:客户端的ip地址

第二部分:被挂接的目录

第三部分:客户端拥有的权限

地址可以指定的几种表现形式:

*  所有的ip地址

A.B.C.D  单个ip地址

A.B.C.D/BITS   IP网络地址/位数掩码

A.B.C.D/E.F.G.H IP网络地址/子网掩码

A.B.C.D-E.F.G.H  IP地址范围

目录部分需要注意两点:

/ 标识MooseFS 根;

. 表示MFSMETA 文件系统

权限部分:

ro  只读模式共享

rw  读写方式共享

alldirs  许挂载任何指定的子目录

maproot  映射为root,还是指定的用户

password  指定验证密码,客户端挂载时使用

# cd /var/lib/mfs

# cp metadata.mfs.empty metadata.mfs

# chown nobody /var/lib/mfs

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

192.168.0.60  mfsmaster

# mfsmaster start 启动master server,假如启动报错的话,可能是没有写解析造成的。 

working directory: /var/lib/mfs

lockfile created and locked

initializing mfsmaster modules ...loading sessions ... file not found

if it is not fresh installation then you have to restart all active mounts !!!

exports file has been loaded

mfstopology configuration file (/etc/mfs/mfstopology.cfg) not found - using defaults

loading metadata ...

create new empty filesystemmetadata file has been loaded

no charts data file - initializing empty charts

master <-> metaloggers module: listen on *:9419

master <-> chunkservers module: listen on *:9420

main master server module: listen on *:9421

mfsmaster daemon initialized properly

此时进入/var/lib/mfs可以看到moosefs所产生的数据:

.mfsmaster.lock 文件记录正在运行的mfsmaster的主进程

metadata.mfs, metadata.mfs.back MooseFS文件系统的元数据metadata的镜像

changelog.*.mfs 是MooseFS文件系统元数据的改变日志(每一个小时合并到metadata.mfs中一次)

Metadata文件的大小是取决于文件数的多少(而不是他们的大小)。changelog日志的大小是取决于每小时操作的数目,但是这个时间长度(默认是按小时)是可配置的

# mfscgiserv #启动CGI监控服务

lockfile created and locked

starting simple cgi server (host: any , port: 9425 , rootpath: /usr/share/mfscgi)

# cd /usr/share/mfscgi/

# chmod +x chart.cgi mfs.cgi

  在浏览器地址栏输入 http://192.168.0.60:9425    即可查看 master 的运行情况

三、元数据日志服务器 Metalogger server安装:

# yum localinstall -y mfs-metalogger-1.6.26-1.x86_64.rpm

# cd /etc/mfs

# cp mfsmetalogger.cfg.dist  mfsmetalogger.cfg 

文件mfsmetalogger.cfg   的修改是可选的:
# WORKING_USER = nobody
# WORKING_GROUP =
# SYSLOG_IDENT = mfsmetalogger
# LOCK_MEMORY = 0   :是否执行 mlockall()   以避免交换出 mfsmaster 进程(   默认是 0,   即 no);
# NICE_LEVEL = -19
# DATA_PATH = /var/lib/mfs
# BACK_LOGS = 50
# BACK_META_KEEP_PREVIOUS = 3
# META_DOWNLOAD_FREQ = 1
metadata元数据下载间隔时间(默认是24小时,单位是小时,至多是BACK_LOGS的1/2)
# MASTER_RECONNECTION_DELAY = 5 :在失去连接之后延迟多少秒重新连接master
# MASTER_HOST = mfsmaster   :连接 MooseFS master 主机的地址(   默认是 mfsmaster)
# MASTER_PORT = 9419   :连接 MooseFS master 主机的端口(   默认是 9420);
# MASTER_TIMEOUT = 60   :连接 master 的超时时间(   默认 60 秒);
# deprecated, to be removed in MooseFS 1.7
# LOCK_FILE = /var/run/mfs/mfsmetalogger.lock


# mkdir /var/lib/mfs

# chown nobody /var/lib/mfs

# vi /etc/hosts

192.168.0.60 mfsmaster

# mfsmetalogger start

在/var/lib/mfs目录中可以看到从master上复制来的元数据

changelog_ml.*.mfs 是MooseFS文件系统的元数据的changelog日志(备份的Master 的Master的changelog日志)

metadata_ml.mfs.back 是从Master主机上下载的最新的完整metadata.mfs.back的拷贝

sessions.ml.mfs是从master下载的最新的sessions.mfs文件拷贝。

Mfsmetalogger并不能完美的接管master server,在实际生产环境中使用HA解决master的单点故障。

四、存储块服务器 Chunk servers 安装:mfschunkserver:192.168.0.1/2上的操作)

# yum localinstall -y  mfs-chunkserver-1.6.26-1.x86_64.rpm

# cd /etc/mfs

# cp mfschunkserver.cfg.dist mfschunkserver.cfg

# WORKING_USER = nobody
# WORKING_GROUP =
# SYSLOG_IDENT = mfschunkserver
# LOCK_MEMORY = 0
# NICE_LEVEL = -19
# DATA_PATH = /var/lib/mfs
# MASTER_RECONNECTION_DELAY = 5:在失去连接之后延迟多少秒重新连接master
# BIND_HOST = *:本地地址用于连接mfsmaster(默认值是*,即默认的本地地址)
# MASTER_HOST = mfsmaster:master服务器的主机名或是ip地址。
# MASTER_PORT = 9420
# MASTER_TIMEOUT = 60
# CSSERV_LISTEN_HOST = *:允许挂载的客户端连接的IP地址(*允许全部)
# CSSERV_LISTEN_PORT = 9422:允许挂载的客户端连接的端口
# HDD_CONF_FILENAME = /etc/mfshdd.cfg:分配给MFS使用的磁盘空间配置文件的位置
# HDD_TEST_FREQ = 10:块的测试期(单位为秒)
# deprecated, to be removed in MooseFS 1.7
# LOCK_FILE = /var/run/mfs/mfschunkserver.lock
# BACK_LOGS = 50
# CSSERV_TIMEOUT = 5


# cp mfshdd.cfg.dist mfshdd.cfg

# vi mfshdd.cfg 定义mfs共享点

/mnt/mfschunks1

/mnt/mfschunks2

#mkdir /mnt/mfschunker1
#mkdir /mnt/mfschunker2

# chown -R nobody:nobody /mnt/mfschunks1

# chown -R nobody:nobody /mnt/mfschunks2

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

192.168.0.60  mfsmaster

#mkdir /var/lib/mfs

#chown nobody  /var/lib/mfs

# mfschunkserver start

working directory: /var/lib/mfs

lockfile created and locked

initializing mfschunkserver modules ...

hdd space manager: path to scan: /mnt/mfschunks2/

hdd space manager: path to scan: /mnt/mfschunks1/

hdd space manager: start background hdd scanning (searching for available chunks)

main server module: listen on *:9422

no charts data file - initializing empty charts

mfschunkserver daemon initialized properly

现在再通过浏览器访问http://192.168.0.60:9425/应该可以看见这个 MooseFS 系统的全部信息,包括主控 master和存储服务chunkserver 。

五、客户端 client 安装:

# yum localinstall -y mfs-client-1.6.26-1.x86_64.rpm

# cd /etc/mfs

# cp mfsmount.cfg.dist mfsmount.cfg

# vi mfsmount.cfg 定义客户端默认挂载

mfsmaster=mfsmaster

/mnt/mfs

# mkdir /mnt/mfs

#vim /etc/hosts

192.168.0.60    mfsmaster

# mfsmount

# df -h 

...

mfsmaster:9421      2729728      0   2729728   0% /mnt/mfs

六、MFS测试:(客户端操操作)

在MFS挂载点下创建两个目录,并设置其文件存储份数:

# cd /mnt/mfs

# mkdir dir1 dir2

# mfssetgoal -r 2 dir2/ 设置在dir2中文件存储份数为两个,默认是一个

dir2/:

 inodes with goal changed:            1

 inodes with goal not changed:       0

 inodes with permission denied:      0

“ 对一个目录设定 goal”,此目录下的新创建文件和子目录均会继承此目录的设定,但不会改变已经存在的文件及目录的copy份数。但使用-r选项可以更改已经存在的copy份数。

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

# cp /etc/passwd dir1

# cp /etc/passwd dir2

查看文件信息

# mfsfileinfo dir1/passwd

dir1/passwd:

    chunk 0: 0000000000000001_00000001 / (id:1 ver:1)

     copy 1: 192.168.0.2:9422

# mfsfileinfo dir2/passwd

dir2/passwd:

    chunk 0: 0000000000000002_00000001 / (id:2 ver:1)

     copy 1: 192.168.0.1:9422

     copy 2: 192.168.0.2:9422

关闭mfschunkserver2后再查看文件信息

# mfsfileinfo dir1/passwd

dir1/passwd:

    chunk 0: 0000000000000001_00000001 / (id:1 ver:1)

     no valid copies !!!

# mfsfileinfo dir2/passwd

dir2/passwd:

    chunk 0: 0000000000000002_00000001 / (id:2 ver:1)

     copy 1: 192.168.0.1:9422

启动mfschunkserver2后,文件回复正常。

恢复误删文件

# rm -f dir1/passwd

# mfsgettrashtime dir1/

dir1/: 86400

文件删除后存放在“垃圾箱”中的时间称为隔离时间, 这个时间可以用mfsgettrashtime 命令来查看,用mfssettrashtime 命令来设置,单位为秒,默认为86400秒。

# mkdir /mnt/mfsmeta

# mfsmount -m /mnt/mfsmeta/ -H mfsmaster

挂载MFSMETA    文件系统,它包含目录 trash (包含仍然可以被还原的删除文件的信息)和 trash/undel (用于获取文件)。把删除的文件,移到/ trash/undel下,就可以恢复此文件。

# cd /mnt/mfsmeta/trash

# mv 00000004\|dir1\|passwd  undel/

到dir1目录中可以看到passwd文件恢复

在MFSMETA 的目录里,除了trash 和trash/undel 两个目录,还有第三个目录reserved,该目录内有已经删除的文件,但却被其他用户一直打开着。在用户关闭了这些被打开的文件后,reserved 目录中的文件将被删除,文件的数据也将被立即删除。此目录不能进行操作。

修改linux下最大文件描述符的限制:

在进行大量小文件写时,可能会出现了一个严重错误,有可能和操作系统文件描述符有关。操作系统默认文件描述符为1024.

1.6.26版本默认为100000

建议上线时,master和chunker修改文件描述符

系统级限制:它是限制所有用户打开文件描述符的总和,可以通过修改内核参数来更改该限制:

# vi /etc/sysctl.conf添加

fs.file-max=102400 如果此值默认够大可以不用更改

# sysctl -p  命令使其生效。

用户级限制:只是修改用户级的最大文件描述符限制,也就是说每一个用户登录后执行的程序占用文件描述符的总数不能超过这个限制。

# vi /etc/security/limits.conf

* - nofile 102400

保存退出后重新登录,其最大文件描述符已经被永久更改了。

与file-max参数相对应的还有file-nr,这个参数是只读的,可以查看当前文件描述符的使用情况。

# sysctl -a|grep file

fs.file-nr = 12800    0    782554

fs.file-max = 782554

在kernel 2.6之前的版本中,file-nr 中的值由三部分组成,分别为:1.已经分配的文件句柄数,2.已经分配单没有使用的文件句柄数,3.最大文件句柄数。但在kernel 2.6版本中第二项的值总为0,这并不是一个错误,它实际上意味着已经分配的文件句柄无一浪费的都已经被使用了file-max的值是linux内核可以分配的最大文件句柄数。如果你看到了很多关于打开文件数已经到了最大值的错误信息,你可以试着增加该值的限制。file-max的默认值大概是系统内存的10%(系统内存以kb计算)

快照

MooseFS系统的另一个特征是利用mfsmakesnapshot工具给文件或者是目录树做快照:

# mfsmakesnapshot source … destination

Mfsmakesnapshot是在一次执行中整合了一个或是一组文件的拷贝,而且任何修改这些文件的源文件都不会影响到源文件的快照, 就是说任何对源文件的操作,例如写入源文件,将不会修改副本(或反之亦然)。

文件快照可以用mfsappendchunks,例如:

# mfsappendchunks destination-file source-file …

当有多个源文件时,它们的快照被加入到同一个目标文件中(每个chunk的最大量是chunk)。

为了安全停止 MooseFS 集群,建议执行如下的步骤:

# umount -l /mnt/mfs                               #客户端卸载MooseFS 文件系统

# mfschunkserver stop                         #   停止 chunk server 进程

# mfsmetalogger stop                          #   停止 metalogger 进程

# mfsmaster stop                               #   停止主控 master server 进程

安全的启动MooseFS集群:

# mfsmaster start                              #   启动 master 进程

# mfschunkserver start                        #   启动 chunkserver 进程

# mfsmetalogger start                         #   启动 metalogger 进程

# mfsmount                #   客户端挂载 MooseFS 文件系统

实际上无论如何顺序启动或关闭,未见任何异常,master启动后,metalogger、chunker、client三个元素都能自动与master建立连接。

故障测试:

Client客户端断电、断网对MFS的体系不产生影响.  如果客户端误杀 killall -9 mfsmount进程,需要先umount /mnt/mfs,然后再mfsmount。否则会提示:/mnt/mfs: Transport endpoint is not connected

chunkserver端:

传输一个大文件,设置存储2份。传输过程中,关掉chunker1,这样绝对会出现有部分块只存在chunker2上;启动chunker1,关闭chunker2,这样绝对会有部分块只存在chunker1上。把chunker2启动起来。整个过程中,客户端一直能够正常传输。使用mfsfileinfo 查看此文件,发现有的块分布在chunker1上,有的块分布在chunker2上。使用mfssetgoal -r 1后,所有块都修改成1块了,再mfssetgoal -r 2,所有块都修改成2份了。

# mfssetgoal -r 1 bigfile

bigfile:

 inodes with goal changed:            1

 inodes with goal not changed:        0

 inodes with permission denied:       0

# mfsfileinfo bigfile

bigfile:

    chunk 0: 0000000000000010_00000001 / (id:16 ver:1)

     copy 1: 192.168.0.1:9422

    chunk 1: 0000000000000011_00000002 / (id:17 ver:2)

     copy 1: 192.168.0.2:9422

# mfssetgoal -r 2 bigfile

bigfile:

 inodes with goal changed:            1

 inodes with goal not changed:        0

 inodes with permission denied:       0

# mfsfileinfo bigfile

bigfile:

    chunk 0: 0000000000000010_00000001 / (id:16 ver:1)

     copy 1: 192.168.0.1:9422

     copy 2: 192.168.0.2:9422

    chunk 1: 0000000000000011_00000002 / (id:17 ver:2)

     copy 1: 192.168.0.1:9422

     copy 2: 192.168.0.2:9422

断网、杀掉mfschunkserver程序对MFS系统无影响。

断电:

#无文件传输时,对两个chunker都无影响;

#当有文件传输时,但是文件设置存储一份时,对文件的存储无影响。

#文件设置存储两份,数据传输过程中,关掉chunker1,等待数据传输完毕后,启动chunker1.chunker1启动后,会自动从chunker2复制数据块。整个过程中文件访问不受影响。

#文件设置存储两份,数据传输过程中,关掉chunker1,不等待数据传输完毕,开机启动chunker1.chunker1启动后,client端会向chunker1传输数据,同时chunker1也从chunker2复制缺失的块。只要不是两个chunker服务器同时挂掉的话,就不会影响文件的传输,也不会影响服务的使用。

master端:

断网、杀掉MFS的master服务对MFS系统无影响。

断电可能会出现以下的情况:#当没有文件传输时,可在服务器重启之后,运行mfsmetarestore –a进行修复,之后执行mfsmaster start恢复master服务。

# mfsmetarestore -a

loading objects (files,directories,etc.) ... ok

loading names ... ok

loading deletion timestamps ... ok

loading chunks data ... ok

checking filesystem consistency ... ok

connecting files and chunks ... ok

store metadata into file: /var/lib/mfs/metadata.mfs

# mfsmaster start

working directory: /var/lib/mfs

lockfile created and locked

initializing mfsmaster modules ...

loading sessions ... ok

sessions file has been loaded

exports file has been loaded

mfstopology configuration file (/etc/mfstopology.cfg) not found - using defaults

loading metadata ...

loading objects (files,directories,etc.) ... ok

loading names ... ok

loading deletion timestamps ... ok

loading chunks data ... ok

checking filesystem consistency ... ok

connecting files and chunks ... ok

all inodes: 5

directory inodes: 3

file inodes: 2

chunks: 2

metadata file has been loaded

stats file has been loaded

master <-> metaloggers module: listen on *:9419

master <-> chunkservers module: listen on *:9420

main master server module: listen on *:9421

mfsmaster daemon initialized properly

#当有文件传输时,可能会在/usr/local/mfs/sbin/mfsmetarestore –a进行修复时可能会出现:

# mfsmetarestore -a

loading objects (files,directories,etc.) ... ok

loading names ... ok

loading deletion timestamps ... ok

loading chunks data ... ok

checking filesystem consistency ... ok

connecting files and chunks ... ok

S:115: error: 32 (Data mismatch)

此时无法修复也无法启动master服务,有个应急的办法是将metadata.mfs.back复制成metadata.mfs,然后再启动master。这样将会丢失那些正在传输的数据。

mfsmaster热备:

解决方案:drbd+corosync+pacemaker

drbd配置:

# cat /etc/drbd.d/mfs.res

resource mfsdata {

meta-disk internal;

device /dev/drbd1;

syncer {

    verify-alg sha1;

}

on server89.example.com {

    disk /dev/vgdrbd/mfs;

    address 192.168.0.189:7789;

}

on server87.example.com {

    disk /dev/vgdrbd/mfs;

    address 192.168.0.187:7789;

}

}

corosync配置:

# cat /etc/corosync/corosync.conf

# Please read the corosync.conf.5 manual page

compatibility: whitetank

totem {

    version: 2

    secauth: off

    threads: 0

    interface {

     ringnumber: 0

     bindnetaddr: 192.168.0.0

     mcastaddr: 226.94.2.1

     mcastport: 5408

     ttl: 1

    }

}

logging {

    fileline: off

    to_stderr: no

    to_logfile: yes

    to_syslog: yes

    logfile: /var/log/cluster/corosync.log

    debug: off

    timestamp: on

    logger_subsys {

    subsys: AMF

    debug: off    }

}

amf {

    mode: disabled

}

service {

    name: pacemaker

    ver: 0

}

mfs启动脚本:

         # cat /etc/init.d/mfs

#!/bin/bash

# Init file for the MooseFS master service

# chkconfig: - 92 84

# description: MooseFS master

# processname: mfsmaster

# Source function library.

# Source networking configuration.

. /etc/init.d/functions

. /etc/sysconfig/network

# Source initialization configuration.

# Check that networking is up.

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

[ -x "/usr/sbin/mfsmaster" ] || exit 1

[ -r "/etc/mfsmaster.cfg" ] || exit 1

[ -r "/etc/mfsexports.cfg" ] || exit 1

RETVAL=0

prog="mfsmaster"

datadir="/var/lib/mfs"

mfsbin="/usr/sbin/mfsmaster"

mfsrestore="/usr/sbin/mfsmetarestore"

start () {

echo -n $"Starting $prog: "

$mfsbin start >/dev/null  2>&1

    if [ $? -ne 0 ];then

    $mfsrestore -a >/dev/null  2>&1 && $mfsbin start >/dev/null  2>&1

    fi

RETVAL=$?

echoreturn $RETVAL

}

stop () {

echo -n $"Stopping $prog: "

$mfsbin -s >/dev/null 2>&1 || killall -9 $prog #>/dev/null 2>&1

RETVAL=$?

echo

return $RETVAL

}

restart () {

stop

start

}

reload () {

  echo -n $"reload $prog: "

$mfsbin reload  >/dev/null 2>&1 

RETVAL=$?

echo

return $RETVAL

}

restore () {

  echo -n $"restore $prog: "

$mfsrestore -a  >/dev/null 2>&1

RETVAL=$?

echo

return $RETVAL

}

case "$1" in

  start)

start

;;

  stop)

stop

;;

  restart)

restart

;;

  reload)

reload

;;

  restore)

restore

;;

  status)

status $prog

RETVAL=$?;;

  *)

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

RETVAL=1

esac

exit $RETVAL

pacemaker配置:

node server87.example.com 

node server89.example.com 

primitive MFSdata ocf:linbit:drbd params drbd_resource="mfsdata"

primitive MFSfs ocf:heartbeat:Filesystem \

     params device="/dev/drbd1" directory="/var/lib/mfs" fstype="ext4"

primitive MFSmaster lsb:mfs op monitor interval="30s"

primitive vip ocf:heartbeat:IPaddr2 \

     params ip="192.168.0.163" cidr_netmask="24" \

     op monitor interval="30s" \

group MFSgroup MFSfs vip MFSmaster 

ms MFSdataclone MFSdata \

     meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" 

notify="true" target-role="Started"

colocation mfs-with-drbd inf: MFSgroup MFSdataclone:Master

order mfs-after-drbd inf: MFSdataclone:promote MFSgroup:start

property $id="cib-bootstrap-options" \

     stonith-enabled="false" \

     dc-version="1.1.6-3.el6-a02c0f19a00c1eb2527ad38f146ebc0834814558" 

     cluster-infrastructure="openais" \

     expected-quorum-votes="2" \

     no-quorum-policy="ignore" \

     start-failure-is-fatal="false"

转载于:https://my.oschina.net/leeypp1/blog/298118

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用,MooseFS是一种分布式文件系统,用作共享存储服务器。要手动切换MooseFS的主备节点,可以按照以下步骤进行操作: 1. 首先,根据引用中的指示,需要通过运行"./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --enable-mfsmount"来配置MooseFS。 2. 接下来,根据引用中的指示,需要修改配置文件"/usr/local/mfs/etc/mfshdd.cfg"。在这个文件中,你需要指定MooseFS的主备角色。 3. 修改配置文件时,你需要注意以下几个步骤: a. 确保每个服务器只贡献一个分区作为MooseFS的一部分。 b. 根据你的服务器配置,将分区的挂载点修改为MooseFS的写目录的属主。 c. 确保配置文件中只包含一行内容,指定MooseFS的主备角色。 通过完成以上步骤,你就可以手动切换MooseFS的主备节点。请确保按照正确的配置和指示进行操作,以确保系统的正常运行。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [分布式文件系统MFS(moosefs)实现存储共享](https://blog.csdn.net/weixin_35953844/article/details/119661796)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值