MooseFS:mooseFS是一款网络分布式文件系统。它把数据分散在多台服务器上,但对于用户来讲,看到的只是一个源。MFS也像其他类unix文件系统一样,包含了层级结构(目录树),存储着文件属性(权限,最后访问和修改时间),可以创建特殊的文件(块设备,字符设备,管道,套接字),符号链接,硬链接。
角色类型:
Master:运行mfsmaster守护进程,作为元数据服务器,管理整个存储网络。
Metalogger:运行mfsmetalogger守护进程,作为元数据备份服务器。
Chunkservers:运行mfschunkserver守护进程,作为后端存储服务器。
Clients:mfsmount挂载存储,作为客户端。
1,安装
安装fuse lib:
yum install fuse-devel
下载mfs:http://sourceforge.net/projects/moosefs/files/?source=navbar
安装mfs:
#groupadd mfs
#useradd -g mfs mfs
#tar -xvfz mfs-1.6.27-1.tar
#cd mfs-1.6.27
#./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var/lib --with-default-user=mfs --with-default-group=mfs
配置选项:
--disable-mfsmaster 不编译master服务
--disable-mfschunkserver 不编译chunkserver服务
--disable-mfsmount 不编译mfsmount和 mfstools
--enable-mfsmount 编译mfsmount 和 mfstools
--prefix=DIRECTORY 安装到给定的前缀目录
--sysconfdir=DIRECTORY 配置文件目录
--localstatedir=DIRECTORY 数据目录 (元数据metadata.mfs,元数据日志changelog.*.mfs)
--with-default-user=USER 运行守护进程的用户名
--with-default-group=GROUP 运行守护进程的用户组
#make
#make install
2,配置:
配置模板文件:/etc/mfs/xxxxx.dist(注释行为默认值)
2.1,配置master:
cp mfsexports.cfg.dist mfsexports.cfg #指定客户端可以挂载的目录,以及访问权限
cp mfsmaster.cfg.dist mfsmaster.cfg #主控服务器配置文件
cp mfsmetalogger.cfg.dist mfsmatalogger.cfg #metalogger服务器配置文件
cp /var/lib/mfs/metadata.mfs.empty /var/lib/mfs/metadata.mfs #master的元数据文件(运行时为metadata.mfs.back)
主控服务器(master)配置文件:mfsexports.cfg mfsmaster.cfg
添加一行共享:cat mfsexports.cfg
192.168.1.0/24 / rw,alldirs,maproot=0
(注:mfsexorts.cfg类似于nfs的export,格式为: [ip range] [path] [options] )
添加主机名:cat /etc/hosts
192.168.1.188 mfsmaster #绑定主机名与ip地址
启动master:
mfsmaster start #启动master守护进程
mfscgiserv #启动master HTTP/CGI监控进程(客户可能过网页查看: 192.168.1.188:9125)
2.2,配置备份服务器Backup server(metalogger)安装
一旦主控服务器master 失效,只要导入changelogs 到元数据文件,备份服务器metalogger
将能接替发生故障的master。
cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
添加主机名:cat /etc/hosts
192.168.1.188 mfsmaster
启动:
mfsmetalogger start
2.3,配置存储服务器(chunkserver):
cp mfschunkserver.cfg.dist mfschunkserver.cfg #存储服务器配置文件
cp mfshdd.cfg.dist mfshdd.cfg #指定挂载点(共享目录)
存储服务器(chunkserver)配置文件:mfschunkserver.cfg mfshdd.cfg
添加共享目录:cat mfshdd.cfg
/demo #共享文件系统之前已经挂载到此目录下
/demo2 #注意访问权限,chown -R mfs:mfs
添加主机名:cat /etc/hosts
192.168.1.188 mfsmaster
启动:
mfschunkserver start //启动chunkserver守护进程
2.3,客户端
编译安装:
#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
添加主机名:cat /etc/hosts
192.168.1.188 mfsmaster
挂载:
mfsmount /mnt/mfstest -H mfsmaster
MooseFS基础用法:
mfssetgoal -r 2 /mnt/mfstest/folder2 #设定目录下副本的数目(goal=n)
mfsgetgoal /mnt/mfstest/folder2 #获得目录下副本数目
mfsdirinfo /mnt/mfstest/folder2 #目录下总信息(du -sh )
mfscheckfile /mnt/mfstest/folder2/test.txt #检查给定的文件有多少副本
mfsfileinfo /mnt/mfstest/folder2/test.txt #查看文件的存放信息
mfsgettrashtime /mnt/mfstest/folder2 #获取回收站的隔离时间
mfssettrashtime -r 604800 /mnt/mfstest/folder2 #设置回收站的隔离时间(1小时=3600s,1天=86400,1周=604800)
扩展属性:
mfsgeteattr
mfsseteattr
mfsdeleattr
快照:
mfsmakesnapshot source ... destination
mfsappendchunks destination-file source-file ...
运行:
运行master守护进程 :mfsmaster start
运行chunkserver守护进程:mfschunkserver start
运行metalogger守护进程:mfsmetalogger start
使用:mfsmount
停止:
客户端:umount
mfschunkserver stop
mfsmetalogger stop
mfsmaster stop
问题:
master元数据包括两部分:
a.主元数据文件,metadata.mfs(运行时叫metadata.mfs.back)
b,元数据日志文件,metadata.*.mfs,存储最后n小时(由BACK_LOGS配置)
master恢复:
从日志恢复元数据文件:mfsmetarestore -a
从备份恢复:mfsmetarestore -m metadata.mfs.back -o metadata.mfs changelog.*.mfs
HSRP协议: hot standby router protocol(热备路由协议)。
CARP协议: common address redundancy protocol(通用地址冗余协议)。
CARP:(现只能在FreeBSD内核中使用)允许在同一网络中多台主机使用相同的地址(错误故障转移),pfsyncd用于接管时同步状态
CARP在设定的过期时间(period)内发送公告(advertisements),此公告可以用SHA1 HMAL保护(设置一个密码),公告中包含有虚拟主机ID(vhid). slave在过期时间内没收到公告时就接管成为master
指定包过滤传输规则:
pass out on eth1 proto carp keep state #eth1为CARP通信的物理接口
CARP配置:
ifconfig carpN create #创见一个CARP虚拟网口
ifconfig carpN vhid vhid [pass password] [carpdev carpdev] \
[advbase advbase] [advskew advskew] [state state] [group|-group group] \
ipaddress netmask mask
carpN:虚拟接口名,N为一个整数(如10)
vhid:虚拟主机ID.
password:同一冗余组内的认证密码。
carpdev:(可选)指定同一冗余组中物理接口。
advbase:(可选)指定公告发送的频率,以秒为单位(1-255,默认为1)
advskew:(可选)master选择的优先级(0-254,默认为0),越小级别越高
state:强制CARP接口进入给定的状态(init,backup,master)
group,-group:添加或删除一个CARP接口到一个给定的接口组
ipaddress: 冗余组的共享IP地址
mask:冗余组中共享IP地址的子网掩码
sysctl控制:
net.inet.carp.allow:是否允许接受CARP包,默认为1(yes)
net.inet.carp.preempt:允许master变换
net.inet.carp.log:记录日志的级别(0-7,对应于syslog),默认为2(只记录状态变化)
例:
# sysctl -w net.inet.carp.allow=1 #使能CARP包的接收
# ifconfig carp1 create #创建CARP接口
# ifconfig carp1 vhid 1 pass mekmitasdigoat carpdev eth0 \
advskew 100 10.0.0.1 netmask 255.255.255.0
pfsync:监听网络状态变化
ifconfig pfsyncN syncdev syncdev [syncpeer syncpeer] [defer|-defer]
pfsyncN: pfsync接口名
syncdev: 要使用的物理接口名
syncpeer: (可选)指定单播IP地址
defer: 廷迟标志
例:
ifconfig pfsync0 syncdev eth1 up
CARP与pfsync搭配:
CARP:错误故障自动转移
pfsync:同步状态变化
配置如下:
+----| WAN/Internet |----+
| |
em2| |em2
+-----+ +-----+
| fw1 |-em1----------em1-| fw2 |
+-----+ +-----+
em0| |em0
| |
---+-------Shared LAN-------+---
fw1 em0: 172.16.0.1
fw1 em1: 10.10.10.1
fw1 em2: 192.0.2.1
fw2 em0: 172.16.0.2
fw2 em1: 10.10.10.2
fw2 em2: 192.0.2.2
LAN shared IP: 172.16.0.100
WAN/Internet shared IP: 192.0.2.100
配置fw1:作为首选master
! enable preemption and group interface failover
# sysctl -w net.inet.carp.preempt=1
! configure pfsync
# ifconfig em1 10.10.10.1 netmask 255.255.255.0
# ifconfig pfsync0 syncdev em1
# ifconfig pfsync0 up
! configure CARP on the LAN side
# ifconfig carp1 create
# ifconfig carp1 vhid 1 carpdev em0 pass lanpasswd \
172.16.0.100 netmask 255.255.255.0
! configure CARP on the WAN/Internet side
# ifconfig carp2 create
# ifconfig carp2 vhid 2 carpdev em2 pass netpasswd \
192.0.2.100 netmask 255.255.255.0
配置FW2:
! enable preemption and group interface failover
# sysctl -w net.inet.carp.preempt=1
! configure pfsync
# ifconfig em1 10.10.10.2 netmask 255.255.255.0
# ifconfig pfsync0 syncdev em1
# ifconfig pfsync0 up
! configure CARP on the LAN side
# ifconfig carp1 create
# ifconfig carp1 vhid 1 carpdev em0 pass lanpasswd \
advskew 128 172.16.0.100 netmask 255.255.255.0
! configure CARP on the WAN/Internet side
# ifconfig carp2 create
# ifconfig carp2 vhid 2 carpdev em2 pass netpasswd \
advskew 128 192.0.2.100 netmask 255.255.255.0
角色类型:
Master:运行mfsmaster守护进程,作为元数据服务器,管理整个存储网络。
Metalogger:运行mfsmetalogger守护进程,作为元数据备份服务器。
Chunkservers:运行mfschunkserver守护进程,作为后端存储服务器。
Clients:mfsmount挂载存储,作为客户端。
1,安装
安装fuse lib:
yum install fuse-devel
下载mfs:http://sourceforge.net/projects/moosefs/files/?source=navbar
安装mfs:
#groupadd mfs
#useradd -g mfs mfs
#tar -xvfz mfs-1.6.27-1.tar
#cd mfs-1.6.27
#./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var/lib --with-default-user=mfs --with-default-group=mfs
配置选项:
--disable-mfsmaster 不编译master服务
--disable-mfschunkserver 不编译chunkserver服务
--disable-mfsmount 不编译mfsmount和 mfstools
--enable-mfsmount 编译mfsmount 和 mfstools
--prefix=DIRECTORY 安装到给定的前缀目录
--sysconfdir=DIRECTORY 配置文件目录
--localstatedir=DIRECTORY 数据目录 (元数据metadata.mfs,元数据日志changelog.*.mfs)
--with-default-user=USER 运行守护进程的用户名
--with-default-group=GROUP 运行守护进程的用户组
#make
#make install
2,配置:
配置模板文件:/etc/mfs/xxxxx.dist(注释行为默认值)
2.1,配置master:
cp mfsexports.cfg.dist mfsexports.cfg #指定客户端可以挂载的目录,以及访问权限
cp mfsmaster.cfg.dist mfsmaster.cfg #主控服务器配置文件
cp mfsmetalogger.cfg.dist mfsmatalogger.cfg #metalogger服务器配置文件
cp /var/lib/mfs/metadata.mfs.empty /var/lib/mfs/metadata.mfs #master的元数据文件(运行时为metadata.mfs.back)
主控服务器(master)配置文件:mfsexports.cfg mfsmaster.cfg
添加一行共享:cat mfsexports.cfg
192.168.1.0/24 / rw,alldirs,maproot=0
(注:mfsexorts.cfg类似于nfs的export,格式为: [ip range] [path] [options] )
添加主机名:cat /etc/hosts
192.168.1.188 mfsmaster #绑定主机名与ip地址
启动master:
mfsmaster start #启动master守护进程
mfscgiserv #启动master HTTP/CGI监控进程(客户可能过网页查看: 192.168.1.188:9125)
2.2,配置备份服务器Backup server(metalogger)安装
一旦主控服务器master 失效,只要导入changelogs 到元数据文件,备份服务器metalogger
将能接替发生故障的master。
cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
添加主机名:cat /etc/hosts
192.168.1.188 mfsmaster
启动:
mfsmetalogger start
2.3,配置存储服务器(chunkserver):
cp mfschunkserver.cfg.dist mfschunkserver.cfg #存储服务器配置文件
cp mfshdd.cfg.dist mfshdd.cfg #指定挂载点(共享目录)
存储服务器(chunkserver)配置文件:mfschunkserver.cfg mfshdd.cfg
添加共享目录:cat mfshdd.cfg
/demo #共享文件系统之前已经挂载到此目录下
/demo2 #注意访问权限,chown -R mfs:mfs
添加主机名:cat /etc/hosts
192.168.1.188 mfsmaster
启动:
mfschunkserver start //启动chunkserver守护进程
2.3,客户端
编译安装:
#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
添加主机名:cat /etc/hosts
192.168.1.188 mfsmaster
挂载:
mfsmount /mnt/mfstest -H mfsmaster
MooseFS基础用法:
mfssetgoal -r 2 /mnt/mfstest/folder2 #设定目录下副本的数目(goal=n)
mfsgetgoal /mnt/mfstest/folder2 #获得目录下副本数目
mfsdirinfo /mnt/mfstest/folder2 #目录下总信息(du -sh )
mfscheckfile /mnt/mfstest/folder2/test.txt #检查给定的文件有多少副本
mfsfileinfo /mnt/mfstest/folder2/test.txt #查看文件的存放信息
mfsgettrashtime /mnt/mfstest/folder2 #获取回收站的隔离时间
mfssettrashtime -r 604800 /mnt/mfstest/folder2 #设置回收站的隔离时间(1小时=3600s,1天=86400,1周=604800)
扩展属性:
mfsgeteattr
mfsseteattr
mfsdeleattr
快照:
mfsmakesnapshot source ... destination
mfsappendchunks destination-file source-file ...
运行:
运行master守护进程 :mfsmaster start
运行chunkserver守护进程:mfschunkserver start
运行metalogger守护进程:mfsmetalogger start
使用:mfsmount
停止:
客户端:umount
mfschunkserver stop
mfsmetalogger stop
mfsmaster stop
问题:
master元数据包括两部分:
a.主元数据文件,metadata.mfs(运行时叫metadata.mfs.back)
b,元数据日志文件,metadata.*.mfs,存储最后n小时(由BACK_LOGS配置)
master恢复:
从日志恢复元数据文件:mfsmetarestore -a
从备份恢复:mfsmetarestore -m metadata.mfs.back -o metadata.mfs changelog.*.mfs
HSRP协议: hot standby router protocol(热备路由协议)。
CARP协议: common address redundancy protocol(通用地址冗余协议)。
CARP:(现只能在FreeBSD内核中使用)允许在同一网络中多台主机使用相同的地址(错误故障转移),pfsyncd用于接管时同步状态
CARP在设定的过期时间(period)内发送公告(advertisements),此公告可以用SHA1 HMAL保护(设置一个密码),公告中包含有虚拟主机ID(vhid). slave在过期时间内没收到公告时就接管成为master
指定包过滤传输规则:
pass out on eth1 proto carp keep state #eth1为CARP通信的物理接口
CARP配置:
ifconfig carpN create #创见一个CARP虚拟网口
ifconfig carpN vhid vhid [pass password] [carpdev carpdev] \
[advbase advbase] [advskew advskew] [state state] [group|-group group] \
ipaddress netmask mask
carpN:虚拟接口名,N为一个整数(如10)
vhid:虚拟主机ID.
password:同一冗余组内的认证密码。
carpdev:(可选)指定同一冗余组中物理接口。
advbase:(可选)指定公告发送的频率,以秒为单位(1-255,默认为1)
advskew:(可选)master选择的优先级(0-254,默认为0),越小级别越高
state:强制CARP接口进入给定的状态(init,backup,master)
group,-group:添加或删除一个CARP接口到一个给定的接口组
ipaddress: 冗余组的共享IP地址
mask:冗余组中共享IP地址的子网掩码
sysctl控制:
net.inet.carp.allow:是否允许接受CARP包,默认为1(yes)
net.inet.carp.preempt:允许master变换
net.inet.carp.log:记录日志的级别(0-7,对应于syslog),默认为2(只记录状态变化)
例:
# sysctl -w net.inet.carp.allow=1 #使能CARP包的接收
# ifconfig carp1 create #创建CARP接口
# ifconfig carp1 vhid 1 pass mekmitasdigoat carpdev eth0 \
advskew 100 10.0.0.1 netmask 255.255.255.0
pfsync:监听网络状态变化
ifconfig pfsyncN syncdev syncdev [syncpeer syncpeer] [defer|-defer]
pfsyncN: pfsync接口名
syncdev: 要使用的物理接口名
syncpeer: (可选)指定单播IP地址
defer: 廷迟标志
例:
ifconfig pfsync0 syncdev eth1 up
CARP与pfsync搭配:
CARP:错误故障自动转移
pfsync:同步状态变化
配置如下:
+----| WAN/Internet |----+
| |
em2| |em2
+-----+ +-----+
| fw1 |-em1----------em1-| fw2 |
+-----+ +-----+
em0| |em0
| |
---+-------Shared LAN-------+---
fw1 em0: 172.16.0.1
fw1 em1: 10.10.10.1
fw1 em2: 192.0.2.1
fw2 em0: 172.16.0.2
fw2 em1: 10.10.10.2
fw2 em2: 192.0.2.2
LAN shared IP: 172.16.0.100
WAN/Internet shared IP: 192.0.2.100
配置fw1:作为首选master
! enable preemption and group interface failover
# sysctl -w net.inet.carp.preempt=1
! configure pfsync
# ifconfig em1 10.10.10.1 netmask 255.255.255.0
# ifconfig pfsync0 syncdev em1
# ifconfig pfsync0 up
! configure CARP on the LAN side
# ifconfig carp1 create
# ifconfig carp1 vhid 1 carpdev em0 pass lanpasswd \
172.16.0.100 netmask 255.255.255.0
! configure CARP on the WAN/Internet side
# ifconfig carp2 create
# ifconfig carp2 vhid 2 carpdev em2 pass netpasswd \
192.0.2.100 netmask 255.255.255.0
配置FW2:
! enable preemption and group interface failover
# sysctl -w net.inet.carp.preempt=1
! configure pfsync
# ifconfig em1 10.10.10.2 netmask 255.255.255.0
# ifconfig pfsync0 syncdev em1
# ifconfig pfsync0 up
! configure CARP on the LAN side
# ifconfig carp1 create
# ifconfig carp1 vhid 1 carpdev em0 pass lanpasswd \
advskew 128 172.16.0.100 netmask 255.255.255.0
! configure CARP on the WAN/Internet side
# ifconfig carp2 create
# ifconfig carp2 vhid 2 carpdev em2 pass netpasswd \
advskew 128 192.0.2.100 netmask 255.255.255.0