今天来搞一个分布式的存储系统MFS,这个不论是原理还是搭建使用都不太好理解,所以大家可以先去搜索一些相关资料了解一下MFS的工作原理再来尝试搭建.
1、元数据服务器.在整个体系中负责管理管理文件系统.
2、元数据日志服务器.负责备份master 服务器的变化日志文件,文件类型为changelog_ml.*.mfs ,以便于在元数据服务器出问题的时候接替其进行工作.
3、数据存储服务器chunkserver.真正存储用户数据的服务器.存储文件时,首先把文件分成块,然后这些块在数据服务器chunkserver之间复 制(复制份数可以手工指定,建议设置副本数为3).数据服务器可以是多个,并且数量越多,可使用的"磁盘空间"越大,可靠性也越高.
4、客户端.使用MFS文件系统来存储和访问的主机称为MFS的客户端,成功挂接MFS文件系统以后,就可以像以前使用NFS一样共享这个虚拟性的存储了.
一、环境描述:
· 主控服务器Master server: 119.147.146.246
· 主控备份服务器Metalogger server: 119.147.146.248
· 存储块服务器Chunk servers: 119.147.146.249
· 客户端主机 (clients): 119.147.146.242、10.20.220.26
二、主控服务器Master的安装.
1.安装:
$ useradd mfs -s /sbin/nologin
$ wget http://www.moosefs.org/tl_files/mfscode/mfs-1.6.20-2.tar.gz$tar zxvf mfs-1.6.11.tar.gz
$ tar -zxvf mfs-1.6.11.tar.gz
$ cd mfs-1.6.11
$ ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with- default-group=mfs --disable-mfschunkserver --disable-mfsmount
$ make
$ make install
2.copy配置文件:
$ cd /usr/local/mfs/etc/
$ cp mfsmaster.cfg.dist mfsmaster.cfg
$ cp mfsexports.cfg.dist mfsexports.cfg
3.mfsmaster.cfg文件详解:
[root@localhost ~]$ cat /usr/local/mfs/etc/mfsmaster.cfg
# WORKING_USER = mfs #运行master server的用户
# WORKING_GROUP = mfs #运行master server的的组
# SYSLOG_IDENT = mfsmaster #是master server在syslog中的标志
# LOCK_MEMORY = 0#是否执行mlockall()以避免mfsmaster进程溢出(默认为0)
# NICE_LEVEL = -19 #运行的优先级
# EXPORTS_FILENAME = /usr/local/mfs/etc/mfsexports.cfg #被挂载目录及权限控制文件的存放位置
# DATA_PATH = /usr/local/mfs/var/mfs #数据存放路径
# BACK_LOGS = 50 #元数据的改变日志文件数量(默认50)
# REPLICATIONS_DELAY_INIT = 300 #延迟复制的时间(默认300s)
# REPLICATIONS_DELAY_DISCONNECT = 3600 #CHUNK SERVER断开复制的延迟
# MATOML_LISTEN_HOST = * #元数据日志服务器监听的IP地址(默认*,代表任何)
# MATOML_LISTEN_PORT = 9419 #元数据日志服务器监听的端口(默认9419)
# MATOCS_LISTEN_HOST = * #用于CHUNK SERVER 连接的IP(默认*,任何IP)
# MATOCS_LISTEN_PORT = 9420 #用于CHUNK SERVER连接的端口(默认9420)
# MATOCU_LISTEN_HOST = * #用于客户端挂载连接的IP(默认*.代表任何IP)
# MATOCU_LISTEN_PORT = 9421#用户客户端挂载连接的端口(默认9421)
# CHUNKS_LOOP_TIME = 300 #chunks的回环频率(默认300s)
# CHUNKS_DEL_LIMIT = 100 #表示在一个loop设备中可以删除chunks的最大数(默认100)
# CHUNKS_WRITE_REP_LIMIT = 1 #在一个循环里复制一个CHUNK SERVER的最大chunks数目(默认1)
# CHUNKS_READ_REP_LIMIT = 5 #在一个循环里从一个CHUNK SERVER 中复制最大chunks数目(默认5)
# REJECT_OLD_CLIENTS = 0 弹出低于1.6.0的客户端挂接(0或1,默认0)
# deprecated, to be removed in MooseFS 1.7
# LOCK_FILE = /var/run/mfs/mfsmaster.lock
注意: 如果我们打算更改这些配置文件中的某些项目的值,则需要打开特定配置文件相关文本行前的注释,然后修改跟随其后的值.因为被注释掉的行,即是MooseFS内置的缺省值,在这里我们暂时不打算对其进行修改.
4.mfsexports.cfg文件详解:
[root@localhost ~]$ cat /usr/local/mfs/etc/mfsexports.cfg
#* / ro
#192.168.1.0/24 / rw
#192.168.1.0/24 / rw,alldirs,maproot=0,password=passcode
#10.0.0.0-10.0.0.5 /test rw,maproot=nobody,password=test
#* . rw
#* / rw,alldirs,maproot=0
#192.168.1.0/24 / rw,alldirs,maproot=0,password=passcode
119.147.146.248/24 / rw,alldirs,maproot=0
119.147.146.242/24 /data rw,alldirs,maproot=0,password=123
mfsexports.cfg文件每一条由三部分组成,第一部分表示客户端的IP地址,第二部分表示被挂接的目录,第三部分表示客户端拥有的权限,下面对三给部分进行解释:
a.客户端IP地址
* 所有IP地址
x.x.x.x 单个IP地址
x.x.x.x/m.m.m.m IP网络地址/子网掩码
f.f.f.f-t.t.t.t IP段
b.被挂载的目录
/ 表示MooseFS的根
. 表示MFSMETA文件系统
c.客户端拥有的权限
ro 只读
rw 读写
alldirs 允许挂载任何指定的子目录
maproot 映射为root用户还是指定的用户
password 指定客户端密码
5.首次安装master时,会自动生成一个名为metadata.mfs.empty的元数据文件metadata,该文件是空的.MooseFS master运必须有文件metadata.mfs:
$cp /usr/local/mfs/var/mfs/metadata.mfs.empty /usr/local/mfs/var/mfs/metadata.mfs
6.启动master:
$/usr/local/mfs/sbin/mfsmaster start
7.开机启动:
[root@localhost ~]$ echo "/usr/local/mfs/sbin/mfscgiserv" >>/etc/rc.local
[root@localhost ~]$ echo "/usr/local/mfs/sbin/mfsmaster" >> /etc/rc.local
查看mfs是否运行:
$ps -ef | grep mfs
mfs 23920 1 0 01:34 ? 00:00:01 /usr/local/mfs/sbin/mfsmaster start
三、安装主控备份服务器Metalogger server.
1.安装:
$ useradd mfs -s /sbin/nologin
$ wget http://www.moosefs.org/tl_files/mfscode/mfs-1.6.20-2.tar.gz$tar zxvf mfs-1.6.11.tar.gz
$ tar -zxvf mfs-1.6.11.tar.gz
$ cd mfs-1.6.11
$ ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with- default-group=mfs --disable-mfschunkserver --disable-mfsmount
$make
$make install
2.copy配置文件:
$ cd /usr/local/mfs/etc
$ cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
3.mfsmetalogger.cfg文件详解:
[root@localhost 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 = 119.147.146.246
# MASTER_PORT = 9419
# MASTER_TIMEOUT = 60
# deprecated, to be removed in MooseFS 1.7
# LOCK_FILE = /var/run/mfs/mfsmetalogger.lock
META_DOWNLOAD_FREQ,元数据备份文件下载请求频率,默认24H,即每隔一天从元数据服务器上下载一个metadata.mfs.back文件.当元数据服务器关闭或者出故障时,metadata.mfs.back文件将消失,此时要恢复整个MFS,需要从元数据日志服务器中取的该文件.注意,这个文件和日志文件共同使用才可以恢复整个被损毁的分布式文件系统. MASTER_HOST,这个文件中需要修改的是MASTER_HOST变量,这个变量的值是MASTER SERVER 的IP地址.
4.启动元数据日志服务器:
[root@localhost ~]$ /usr/local/mfs/sbin/mfsmetalogger start
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmetalogger modules ...
mfsmetalogger daemon initialized properly
5.开机启动:
echo "/usr/local/mfs/sbin/mfsmetalogger" >> /etc/rc.local
查看MFS进程:
[root@localhost ~]$ ps -ef | grep mfs
mfs 16373 1 0 19:55 ? 00:00:00 /usr/local/mfs/sbin/mfsmetalogger start
查看MFS通讯端口是否打开:
[root@localhost ~]$ lsof -i:9419
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
mfsmetalo 16373 mfs 7u IPv4 119836 TCP 119.147.146.248:42981->119.147.146.246:9419 (ESTABLISHED)
四、安装存储块服务器Chunk servers.
1.安装:
$ useradd mfs -s /sbin/nologin
$ wget http://www.moosefs.org/tl_files/mfscode/mfs-1.6.20-2.tar.gz$tar zxvf mfs-1.6.11.tar.gz
$ tar -zxvf mfs-1.6.11.tar.gz
$ cd mfs-1.6.11
$ ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster
$ make
$ make install
2.copy配置文件:
$ cd /usr/local/mfs/etc/
$ cp mfschunkserver.cfg.dist mfschunkserver.cfg #主配置文件
$ cp mfshdd.cfg.dist mfshdd.cfg #指定服务器分配给MFS使用的空间
[root@localhost etc]$ cat mfschunkserver.cfg
# WORKING_USER = mfs
# WORKING_GROUP = mfs
# SYSLOG_IDENT = mfschunkserver
# LOCK_MEMORY = 0
# NICE_LEVEL = -19
# DATA_PATH = /usr/local/mfs/var/mfs
# MASTER_RECONNECTION_DELAY = 5
MASTER_HOST = 119.147.146.246 #元数据服务器的名称或地址(主机名或者IP)
MASTER_PORT = 9420
# MASTER_TIMEOUT = 60
# CSSERV_LISTEN_HOST = *
# CSSERV_LISTEN_PORT = 9422 #这个监听端口用于与其他数据储存服务器间的连接,通常是数据复制.
# CSSERV_TIMEOUT = 5
# HDD_CONF_FILENAME = /usr/local/mfs/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
[root@localhost etc]$ cat mfshdd.cfg
#/mnt/hd1
#/mnt/hd2
/data #MFS的分区,客户端挂载的目录
改变/data的属主:
[root@localhost ~]$ chown -R mfs:mfs /data
3.启动数据储存服务器:
[root@localhost etc]$ /usr/local/mfs/sbin/mfschunkserver start
4.开机启动:
[root@localhost ~]$ echo "/usr/local/mfs/sbin/mfschunkserver" >> /etc/rc.local
五、MFS客户端的安装配置 为了挂接基于MooseFS分布式文件,客户端主机必须安装FUSE软件包( fuse版本号至少2.6,推荐使用版本号大于2.7.2的fuse).如果系统没有安装fuse,你必须手动对其进行安装.一种常见的安装方式是从源码进行编译安装-我们可以从http://sourceforge.net/projects/fuse/
取得安装源码.
1.安装fuse-2.8.1.tar.gz:
$ tar -zxvf fuse-2.8.1.tar.gz
$ cd fuse-2.8.1
$ ./configure
$ make
$ make install
2.安装mfs-1.6.11.tar.gz:
$ useradd mfs -s /sbin/nologin
$ tar -zxvf mfs-1.6.11.tar.gz
$ cd mfs-1.6.11
$ export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
$ ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --enable-mfsmount --disable-mfsmaster --disable-mfschunkserver
$ make
$ make install
3.加载fuse模块到内核:
[root@localhost ~]$ modprobe fuse
4.创建挂载点:
[root@localhost ~]$ mkdir /mnt/mfs
5.挂载MFS:
/usr/local/mfs/bin/mfsmount /mnt/mfs -H 119.147.146.246 -p
输入密码就可以了,所有的MFS都挂载的是同一个元数据服务器的IP,而不是其他数据储存服务器的IP.
6.开机自动挂载:
echo "/usr/local/mfs/bin/mfsmount /mnt/mfs -H 119.147.146.246 -p" >> /etc/rc.local
7.查看挂载情况:
[root@localhost ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroupRoot-LogVolRoot
16G 2.6G 13G 18% /
/dev/cciss/c0d0p1 99M 27M 68M 29% /boot
tmpfs 5.9G 0 5.9G 0% /dev/shm
/dev/mapper/VolGroupData-LogVolData
246G 13G 221G 6% /data
/dev/mapper/VolGroupData-LogVolLog
9.7G 2.3G 7.0G 25% /data/logs
119.147.146.246:9421 11G 112M 11G 2% /mnt/mfs
利用mount查看:
[root@localhost ~]$ mount
119.147.146.246:9421 on /mnt/mfs type fuse.mfs (rw,nosuid,nodev,allow_other,default_permissions)
最后说明一下:chunkserver和client都是可以无限添加的.其他部分的服务器也可以通过keepalived或者heartbeat实现高可用.