环境:
系统centos6.x
拓扑图如下
moosefs 是一个具备冗余容错功能的分布式网络文件系统,它将数据分别存放多个物理服务器或单独磁盘及分区上,确保
一份数据多个备份副本。对于访问的客户端或者用户来说,整个分布式网络文件系统集群看起来像一个资源一样。
从对其文件操作的情况看,Moosefs 就相当于类UNIX文件系统。
mfs 是一个分层的目录树结构。
存储支持POSIX 标准的文件属性(权限,最后访问和修改时间)
支持特殊的文件,如:块石板,字符设备,管道和套接字,连接文件(符合连接和硬链接)
支持基于ip地址和密码的方式访问文件系统
MooseF的特性
高可靠性,没一份数据,可以设置多个副本(多份数据) ,并可以存储在不同的主机上
搞可扩展性,可以轻松的通过增加主机磁盘容量或增加主机数量来动态扩展整个文件系统的存储量。
高可容错性,我们可以通过对mfs进行系统设置,实现数据文件被删除后的一段时间内,依然存放于主机的回收站中,一备误删除恢复数据。
高数据一致性,即使文件被写入访问时,我们依然可以轻松完成文件的一致性快照。
注释:我这里用的vmware虚拟机跑的4G内存,勉强跑了三个虚拟机,如果用虚拟机可以考虑用:
master and data 01 ;backup and data 02 ; client and data 03
这样既做master,backup,client,也可以做data数据服务器,省资源,推荐
一.安装主服务器MFS master
1. 下载mfs
wget
tar -zxvf mfs-1.6.27-1.tar.gz
cd mfs-1.6.20
2. 创建mfs用户和组
useradd mfs -s /sbin/nologin
3.安装mfs
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs #配置mfs
make && make install
ln -s /usr/local/mfs /usr/local/mfs-1.6.20
4.查看mfs的安装目录结构
ll /usr/local/mfs
drwxr-xr-x 2 root root 4096 Jan 31 04:09 etc #mfs配置文件目录
drwxr-xr-x 2 root root 4096 Jan 31 04:09 sbin #mfs命令路径
drwxr-xr-x 4 root root 4096 Jan 31 04:09 share #mfs帮助文件目录
drwxr-xr-x 3 root root 4096 Jan 31 04:09 var #mfs数据及日志目录
提示:etc 和var需要备份
配置主服务器 mfs master
cd /usr/local/mfs/etc
mfsexports.cfg.dist #权限配置文件
mfsmaster.cfg.dist #master 的主配置文件
cp mfsmaster.cfg.dist mfsmaster.cfg
cp mfsexports.cfg.dist mfsexports.cfg
主配置文件mfsmaster.cfg 原始内容:
#WORKING_USER = mfs #运行master server 用户
# WORKING_GROUP = mfs #运行master server 组
# SYSLOG_IDENT = mfsmaster #master server 在syslog中的标识,说明是由master产生的
# LOCK_MEMORY = 0 #是否执行mlockall()避免mfsmaster 进程溢出(默认为0)
# NICE_LEVEL = -19 #运行的优先级(如果可以默认-19;注意:进程必须是用root启动)
# EXPORTS_FILENAME = /usr/local/mfs/etc/mfsexports.cfg #被挂接的目录及其权限控制文件的存放位置
# DATA_PATH = /usr/local/mfs/var/mfs #数据存放路径,此目录分三类文件,changelog ,sessions 和stats
# BACK_LOGS = 50 #metadata的改变log文件数目(默认是50)
# REPLICATIONS_DELAY_INIT = 300 #延迟复制的时间(默认是300s)
# REPLICATIONS_DELAY_DISCONNECT = 3600 #chunkserver 断开的复制延迟(默认是3600)
# MATOCS_LISTEN_HOST = * #metalogger 监听的ip地址(默认是*,代表任何ip)
# MATOCS_LISTEN_PORT = 9419 #metalogger 监听的端口地址(默认是9419)
# MATOCS_LISTEN_HOST = * #用于chunkserver 连接的ip地址(默认是*,代表任何ip)
# MATOCS_LISTEN_PORT = 9420 #用于chunkserver 连接的端口地址(默认是9420)
# MATOCU_LISTEN_HOST = * #用于客户端挂接的ip地址(默认*,代表任何ip)
# MATOCU_LISTEN_PORT = 9421 #用于客户端挂接连接的端口地址(默认9421)
# CHUNKS_LOOP_TIME = 300 #chunksde 回环频率(默认是:300秒)
# CHUNKS_WRITE_REP_LIMIT = 1 #在一个循环里复制到一个chunkserver的最大chunk数目
# CHUNKS_READ_REP_LIMIT = 5 #在一个循环里从一个chunkserver复制的最大chunk数目
CHUNKS_READ_REP_LIMIT = 0 弹出低于1.6.0的客户端挂接(0或1,默认是0
Mfsmaster.cfg 配置文件包含主服务器master相关的设置,在这里我们暂时不打算对其进行修改,如果你想知道关于该配置的文件
请查看手册
权限控制配置文件mfsexports.cfg
配置文件mfsexports.cfg 指定那些客户端主机可以远程挂接MFS文件系统,以及授权挂接客户端什么样的访问权限
mfsexports.cfg 的文件每一个条目分为三部分;
第一部分:mfs客户端的ip地址或地址范围
地址可以指定的几种表现形式
* #所以的ip地址
n.n.n.n #单个ip地址
n.n.n.n/b #ip网络地址/位数掩码
n.n.n.n/m.m.m.m #ip网络地址/子网掩码
f.f.f.f-t.t.t.t #ip段
第二部分:被挂载的目录
目录部分需要注意两点
/标识 Moosefs 根
.表示mfsmeta文件系统
第三部分:设置mfs客户端可以拥有的访问权限
权限部分:
ro #只读模式共享
rw #读写的方式共享
alldirs #允许挂载任何指定的子目录
maproot #映射为root,还是指定的用户
password #指定客户端密码
mfsexports.cfg 实际配置
echo 192.168.66.0/24 / rw,alldirs,mapall=mfs:mfs,password=123 >mfsexports.cfg
配置vip地址用于对外提供服务
配置vip地址用于对外提供服务,包括所有的服务器及客户端。
192.168.66.116 mfsmaster.etiantian.org
配置虚拟网卡eth0:0
DEVICE=eth0:0
BOOTPROTO=static
HWADDR=00:0C:29:50:9F:90
ONBOOT=yes
TYPE=Ethernet
NETMASK=255.255.255.0
IPADDR=192.168.66.100
GATEWAY=192.168.66.1
ifup ifcfg-eth0:0 开启
hosts文件都添加 192.168.66.100 mfsmaster.etiantian.org
启动主服务器 mfs master
echo export PATH=$PATH:/usr/local/mfs/sbin >>/etc/hosts #环境变量设置
/etc/hosts
chown -R mfs:mfs /usr/local/mfs/*
cp /usr/local/mfs/var/mfs/metadata.mfs.empty /usr/local/mfs/var/mfs/metadata.mfs
/usr/local/mfs/sbin/mfsmaster start
[root@mysql2 mfs]# /usr/local/mfs/sbin/mfsmaster start
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmaster modules ...
loading sessions ... ok
sessions file has been loaded
exports file has been loaded
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
停止主服务器 mfs master
安全的停止master server 是非常必要的,一定不要用kill -9 。可以使用mfsmaster -s 或mfsmaster stop
来安全停止master进程,当然一旦用了kill也是有解决方法的,如通过mfsmetastore 修复
经常才查看系统日志(tail -f /var/log/messages 查看mfs健康状态
加入开机自启动配置
echo "#startup master" >> /etc/rc.local
echo "/usr/local/mfs/sbin/mfsmaster start " >>/etc/rc.local
开启主服务器mfs master 的图形监控
主服务器mfs master 的图形监控就是mfscgiserv,这是一个用python编写的一个web服务器,它监听端口9425
,可以利用: /usr/local/mfs/sbin/mfscgiserv start 来启动,启动后,我们通过浏览器,即可比较全面的
master,backup,以及所有客户端挂接状态信息及相关操作等待。
[root@mysql2 network-scripts]# /usr/local/mfs/sbin/mfscgiserv start
starting simple cgi server (host: any , port: 9425 , rootpath: /usr/local/mfs/share/mfscgi)
192.168.66.100:9425 进行访问
二.安装与配置备份服务器 Backup(metalogger)
mfs主服务器的备份服务器,也被称为Back server 或metalogger server ,即备份服务器
备份服务器的安装和主服务器master的安装完全相同,只是配置文件有区别。安装步骤如下:
1. 下载mfs
wget
tar -zxvf mfs-1.6.27-1.tar.gz
cd mfs-1.6.20
2. 创建mfs用户和组
useradd mfs -s /sbin/nologin
3.安装mfs
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs #配置mfs
make && make install
ln -s /usr/local/mfs /usr/local/mfs-1.6.20
配置备份服务器
备份服务器Backup server 的配置文件为:
cp /usr/local/mfs/etc/mfsmetalogger.cfg.dist /usr/local/mfs/etc/mfsmetalogger.cfg
cat /usr/local/mfs/etc/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 #元数据备份文件下载请求,默认24小时,每隔一天从元数据服务器,下载一个metadata,mfs.bak
.当元数据服务器关闭或者故障,metedata.mfs.bak文件将消失,那么要恢复整个mfs,则需从metalogger服务器取得该文件,请特别注意
这个文件,它与日志文件一起,才能够恢复整个被破坏的分布式文件系统
# MASTER_RECONNECTION_DELAY = 5
# MASTER_HOST = mfsmaster.etiantian.org #这里是需要连接的mfs master 的主机IP或者域名
# MASTER_PORT = 9419 #这里是需要连接的mfs master 的port
# MASTER_TIMEOUT = 60
# deprecated, to be removed in MooseFS 1.7
# LOCK_FILE = /var/run/mfs/mfsmetalogger.lock
启动备份服务器:
/usr/local/mfs/sbin/mfsmetalogger start
[root@www etc]# /usr/local/mfs/sbin/mfsmetalogger start
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmetalogger modules ...
mfsmetalogger daemon initialized properly
关闭备份服务器
echo export PATH=$PATH:/usr/local/mfs/sbin >>/etc/hosts #环境变量设置
source /etc/hosts
mfsmetalogger stop
开机自启动
echo "#start mfsmetalogger " >>/etc/rc.local
echo "/usr/local/mfs/sbin/mfsmetalogger start" >>/etc/rc.local
三. 安装数据库服务器 data servers
data server 也称为chunk server ,在这里为了方便理解称之为data server
数据库服务器的安装和主服务器master 的安装完全相同,只是配置文件区别。
1. 下载mfs
wget
tar -zxvf mfs-1.6.27-1.tar.gz
cd mfs-1.6.20
2. 创建mfs用户和组
useradd mfs -s /sbin/nologin
3.安装mfs
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs #配置mfs
make && make install
ln -s /usr/local/mfs /usr/local/mfs-1.6.20
配置数据服务器 data servers
配置数据服务器 data servers ,需要两个配置文件mfschunkserver.cfg和 mfshdd.cfg 其中
-rw-r--r-- 1 root root 527 Feb 1 01:37 mfschunkserver.cfg #主配置文件
-rw-r--r-- 1 root root 57 Feb 1 01:37 mfshdd.cfg #服务器用来分配给MFS使用空间的配置文件
最好是一个单独的硬盘或者一个raid卷,最低要求是一个分区
配置mfschunkserver.cfg 主配置文件
cp /usr/local/mfs/etc/mfschunkserver.cfg.dist /usr/local/mfs/etc/mfschunkserver.cfg
cp /usr/local/mfs/etc/mfshdd.cfg.dist /usr/local/mfs/etc/mfshdd.cfg
cat -n /usr/local/mfs/etc/mfschunkserver.cfg
1 # WORKING_USER = mfs
2 # WORKING_GROUP = mfs
3 SYSLOG_IDENT = mfsmaster.etiantian.org #指定主机
4 # LOCK_MEMORY = 0
5 # NICE_LEVEL = -19
6
7 # DATA_PATH = /usr/local/mfs/var/mfs
8
9 # MASTER_RECONNECTION_DELAY = 5
10
11 # BIND_HOST = *
12 # MASTER_HOST = mfsmaster
13 # MASTER_PORT = 9420
14
15 # MASTER_TIMEOUT = 60
16
17 # CSSERV_LISTEN_HOST = *
18 # CSSERV_LISTEN_PORT = 9422 #监听端口用于与其他数据存储服务器间连接,通常是数据复制
19
20 # HDD_CONF_FILENAME = /usr/local/mfs/etc/mfshdd.cfg
21 # HDD_TEST_FREQ = 10
22
23 # deprecated, to be removed in MooseFS 1.7
24 # LOCK_FILE = /var/run/mfs/mfschunkserver.lock
25 # BACK_LOGS = 50
26 # CSSERV_TIMEOUT = 5
echo 192.168.66.100 mfsmaster.etiantian.org >>/etc/hosts
配置mfshdd.cfg 主配置文件
[root@mysql1 etc]# cat mfshdd.cfg
# mount points of HDD drives
#
#/mnt/hd1
#/mnt/hd2
#etc.
配置磁盘分区
/dev/sda5 新添加的分区并格式化
[root@mysql1 etc]# LANG=en #调整英文字符集
[root@mysql1 etc]# /etc/init.d/kudzu start
Checking for hardware changes [ OK ]
[root@mysql1 etc]# mkdir /mnt/mfs 创建挂载点并挂载测试
[root@mysql1 etc]# mkdir /mfsdata #存放数据文件
chown -R mfs.mfs /mfsdata
mount /dev/sda5 /mnt/mfsdata
vim /etc/fstab
添加/dev/sda5 /mfsdata ext3 defaults 0 0
echo "/mfsdata " >mfshdd.cfg #添加共享目录挂载点
启动数据服务器data servers
echo export PATH=$PATH:/usr/local/mfs/sbin >> /etc/profile
source /etc/profile
/usr/local/mfs/sbin/mfschunkserver start 启动服务
[root@mysql1 etc]# chown -R mfs:mfs /mfsdata/
[root@mysql1 etc]# /usr/local/mfs/sbin/mfschunkserver start
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfschunkserver modules ...
hdd space manager: scanning folder /mfsdata/ ...
hdd space manager: scanning complete
hdd space manager: /mfsdata/: 0 chunks found
hdd space manager: scanning complete
main server module: listen on *:9422
no charts data file - initializing empty charts
mfschunkserver daemon initialized properly
检查是否启动:
[root@mysql1 etc]# netstat -tunlp |grep 9422
tcp 0 0 0.0.0.0:9422 0.0.0.0:* LISTEN 10261/mfschunkserve
配置开机启动
echo "#mfs data server " >>/etc/rc.local
echo " /usr/local/mfs/sbin/mfschunkserver start" >>/etc/rc.local
如果资源不够用可以用3-4台虚拟机
1 master and data 01
2. backup and data 02
3. client and data 03 (安装特殊)
打开浏览器查看:
四. 安装配置客户端服务器(client server)
安装客户端服务器
由于mfs文件系统客户端的挂载依赖于fuse工具,所以要先安装fuse工具
查看内核支持情况
[root@mysql1 etc]# modprobe fuse
[root@mysql1 etc]# lsmod |grep fuse
fuse 49237 0
如果内核不支持fuse 客户尝试一下安装
wget
tar -zxvf fuse-2.8.5.tar.gz
cd fuse-2.8.5
./configure
make && make install
安装mfs
wget
tar -zxvf mfs-1.6.27-1.tar.gz
cd mfs-1.6.20
2. 创建mfs用户和组
useradd mfs -s /sbin/nologin
3.安装mfs
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --enable-mfsmount #配置mfs
make && make install
编译报错解决:
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for FUSE... no
configure: error: mfsmount build was forced, but fuse library is too old or not installed
[root@mysql1 mfs-1.6.20]# echo 'export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH' >>/etc/profile
[root@mysql1 mfs-1.6.20]# source /etc/profile
设置环境变量:
echo export PATH=$PATH:/usr/local/mfs/bin >>/etc/profile
source /etc/profile
从客户端上挂载mfs文件系统
1.创建数据目录挂载点
mkdir /mnt/mfs -p
chown -R mfs.mfs /mnt/mfs
2.加载fuse模块到内核
lsmod |grep fuse
modprobe fuse
lsmod |grep fuse
设置模块开机自启动:
①.echo "modprobe fuse " >/etc/sysconfig/modules/fuse.modules
echo 755 /etc/sysconfig/modules/fuse.modules
②.echo "modprobe fuse" >>/etc/rc.modules
chmod 755 /etc/rc.modules
3.挂载mfs文件系统
root@mysql1 ~]# /usr/local/mfs/bin/mfsmount /mnt/mfs -H mfsmaster.etiantian.org -p
MFS Password: #服务器密码123输入即可
mfsmaster accepted connection with parameters: read-write,restricted_ip,map_all ; root mapped to 4889:4889 ; users mapped to 4889:4889
[root@mysql1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 7.5G 6.6G 520M 93% /
/dev/sda1 289M 27M 248M 10% /boot
tmpfs 252M 0 252M 0% /dev/shm
/dev/sda5 2.0G 37M 1.9G 2% /mfsdata
mfs#mfsmaster.etiantian.org:9421
1.6G 0 1.6G 0% /mnt/mfs
[root@mysql1 ~]#
报错解决:
[root@mysql1 ~]# /usr/local/mfs/bin/mfsmount /mnt/mfs -H mfsmaster.etiantian.org
/usr/local/mfs/bin/mfsmount: error while loading shared libraries: libfuse.so.2: cannot open shared object file: No such file or directory
{root@mysql1 ~]# ln -s /usr/local/lib/libfuse.so.2 /lib/
[root@mysql1 ~]# ln -s /usr/local/lib/libfuse.so.2 /var/lib/
打开浏览器查看: