NFS网络文件系统在性能与容量上没法胜任更高的要求,而本篇讲的MFS(MooseFS)能够提供容量PB级别的共享存储,无需昂贵的专业硬件服务器,自身就拥有冗余功能及动态扩容功能,能保证数据的安全性。`
分布式文件系统(distributed file system)是指文件系统管理的物质存储资源不必定直接链接在本地节点上,而是经过计算机网络与节点相连。简单说就是把一些分布在局域网内各个计算机上的共享文件夹,集合到一个虚拟共享文件夹内,客户端访问只须要打开这个虚拟共享文件夹便可。 分布式文件系统的优势:集中访问、简化操做、数据容灾、提升了文件的存储性能。
MFS是一个具备容错性的网络分布式文件系统,它把数据分散存放在多个物理服务器上,而呈现给用户的则是一个统一整合的资源。
* 元数据服务器(Master):在整个体系中负责管理文件系统,维护元数据。 * 元数据日志服务器(MetaLogger):备份Master服务器的变化日志文件,文件类型为changelog_ml.*.mfs 当Master服务器数据丢失或者损坏时,能够从日志服务器中取得进行恢复。 * 数据存储服务器(Chunk server):真正存储数据的服务器。将文件分块保存,并相互进行复制。 * 客户端(Client):能够像挂载NFS同样挂载MFS文件系统,其操做是相同的。
* 客户端向元数据服务器发出读请求。 * 元数据服务器把所需数据存放的位置(Chunk server的IP地址和Chunk编号)告知客户端。 * 客户端向已知的Chunk server请求发送数据。 * Chunk server向客户端发送数据。
* 客户端向元数据服务器发送写入请求。 * 元数据服务器与Chunk server进行交互,但元数据服务器只在某些服务器建立新的分块Chunks,建立成功后由Chunk server告知元数据服务器操做成功。 * 元数据服务器告知客户端,能够在哪一个Chunk server的哪些Chunks写入数据。 * 客户端向指定的Chunk server写入数据。 * 该Chunk server与其余Chunk server进行数据同步,同步成功后Chunk server告知客户端数据写入成功。 * 客户端告知元数据服务器本次写入完毕。
主机 | 操做系统 | IP地址 | 主要软件 |
---|---|---|---|
Master Server | CentOS7.5 x86_64 | 192.168.138.138 | mfs-1.6.27-5.tar.gz |
Metalogger Server | CentOS7.5 x86_64 | 192.168.138.128 | mfs-1.6.27-5.tar.gz |
Chunk Server01 | CentOS7.5 x86_64 | 192.168.138.130 | mfs-1.6.27-5.tar.gz |
Chunk Server02 | CentOS7.5 x86_64 | 192.168.138.139 | mfs-1.6.27-5.tar.gz |
Client | CentOS7.5 x86_64 | 192.168.138.140 | mfs-1.6.27-5.tar.gz/fuse-2.9.2.tar.gz |
安装环境包:c++
* yum install -y zlib-devel gcc gcc-c++ #安装所需的环境包 * useradd mfs -s /sbin/nologin #建立用户mfs
解压下载好的软件包并进行手工编译安装:vim
* tar zxvf mfs-1.6.27-5.tar.gz -C /opt/ * cd mfs-1.6.27 #切换到opt/mfs-1.6.27下插入以下配置 * ./configure \ --prefix=/usr/local/mfs \ --with-default-user=mfs \ --with-default-group=mfs \ --disable-mfschunkserver \ --disable-mfsmount * make && make install
切换到配置文件下复制并去掉模板的dist后缀,开启配置文件:浏览器
* cd /usr/local/mfs/etc/mfs/ cp mfsmaster.cfg.dist mfsmaster.cfg cp mfsexports.cfg.dist mfsexports.cfg cp mfstopology.cfg.dist mfstopology.cfg * cd /usr/local/mfs/var/mfs/ cp metadata.mfs.empty metadata.mfs
* vim mfsmaster.cfg #不须要改动 * vim mfsexports.cfg #不须要改动
关闭防火墙、关闭加强×××:安全
* systemctl stop firewalld.service * setenforce 0
* /usr/local/mfs/sbin/mfsmaster start #开启服务 * ps -ef | grep mfs #查看监听状态 * /usr/local/mfs/sbin/mfsmaster -s #中止
安装编译环境、关闭防火墙、关闭加强×××:服务器
* yum install -y zlib-devel gcc gcc-c++ * systemctl stop firewalld.service * setenforce 0
建立mfs用户,解压软件包进行手工编译:网络
* useradd -s /sbin/nologin mfs * tar xzvf mfs-1.6.27-5.tar.gz -C /opt/ * cd mfs-1.6.27 ./configure \ --prefix=/usr/local/mfs \ --with-default-user=mfs \ --with-default-group=mfs \ --disable-mfschunkserver \ --disable-mfsmount * make && make install
切换到配置文件下复制并去掉模板的dist后缀,开启配置文件架构
* cd /usr/local/mfs/etc/mfs/ cp mfsmaster.cfg.dist mfsmaster.cfg cp mfsexports.cfg.dist mfsexports.cfg cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
* vim mfsmetalogger.cfg MASTER_HOST = 192.168.138.138 去掉#注释 添加主机地址
* cd /usr/local/mfs/var/mfs mv metadata.mfs.empty metadata.mfs * /usr/local/mfs/sbin/mfsmetalogger start #开启服务
先搭建第一台chunk server:分布式
* systemctl stop firewalld.service * setenforce 0 * yum install -y zlib-devel gcc gcc-c++ * useradd -s /sbin/nologin mfs * tar xzvf mfs-1.6.27-5.tar.gz -C /opt/
* cd /opt/mfs-1.6.27 ./configure \ --prefix=/usr/local/mfs \ --with-default-user=mfs \ --with-default-group=mfs \ --disable-mfsmaster \ --disable-mfsmount * make && make install
* cd /usr/local/mfs/etc/mfs/ cp mfschunkserver.cfg.dist mfschunkserver.cfg cp mfshdd.cfg.dist mfshdd.cfg
* vim mfschunkserver.cfg MASTER_HOST = 192.168.138.138 去掉#注释 添加主机地址
* vim mfshdd.cfg /data #末尾添加`` 提供存储空间 * mkdir /data * chown -R mfs:mfs /data
* /usr/local/mfs/sbin/mfschunkserver start * netstat -ntap * 提示: 第一台 chunk server搭建完成,第二台和第一台安装配置是同样的,这里就再也不写了。
* systemctl stop firewalld.service * setenforce 0 * yum install -y zlib-devel * tar xzvf fuse-2.9.2.tar.gz -C /opt/
* cd /opt/fuse-2.9.2 ./configure * make && make install
* vim /etc/profile export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH #末尾插入 * source /etc/profile
* 安装mfs客户端: * useradd mfs -s /sbin/nologin * tar zxvf mfs-1.6.27-5.tar.gz -C /opt/ * cd /opt/mfs-1.6.27 ./configure \ --prefix=/usr/local/mfs \ --with-default-user=mfs \ --with-default-group=mfs \ --disable-mfsmaster \ --disable-mfschunkserver \ --enable-mfsmount * make && make install
* mkdir /opt/mfs * modprobe fuse #加载fuse模块到内核 * /usr/local/mfs/bin/mfsmount /opt/mfs -H 192.168.138.138 #指向master主机 * df -hT #查看挂载 * umount /opt/mfs #须要时可解挂载
* 优化客户端: * vim /etc/profile * export PATH=/usr/local/mfs/bin:$PATH #设置环境变量 在末尾插入 * cd /opt/mfs(可在mfs里写入内容进行验证:echo "this is test" > test.txt) * source /etc/profile #从新加载 * mfsgetgoal -r /opt/mfs/ * mfsgetgoal -r 2 /opt/mfs/ #复制2份文件
* /usr/local/mfs/sbin/mfscgiserv * http://192.168.138.138:9425 #客户端浏览器上进行访问测试
* 上述测试访问到的MFS监控表中各部分的含义以下: Info部分:显示了MFS的基本信息 Server部分:列出现有的Chunk Server Disks部分:列出每一台Chunk Server的磁盘目录及使用量 Exports部分:列出被共享的目录,便可被挂载的目录 Mounts部分:显示被挂载的状况 Operations部分:显示正在执行的操做 Master Charts部分:显示Master Server的操做状况,包括读取、写入、建立目录、删除目录等