一、常见分布式文件系统
二、MogileFS基本原理
三、MogileFS的实现
四、Fastdfs基本原理
五、Fastdfs的实现
六、Mogilefs与FastDFS的对比
数据存储是个永恒的话题,从结绳记数到文字出现,实现了数据信息表示方式的演化和进步,而存储介质的变化,在这一过程中,更是呈现了种类繁多的样式,记录是保存信息的一种有效方式,但随着时间的推移,数据信息的安全和持久必将打破传统的存储介质和存储思维的束缚,随着计算机技术的发展,再加上网络和通讯技术的成熟,存储变得无处不在,需要时时更新。存储需要保持实时读写,提供复杂的查询功能,缺乏容灾和备份能力,大量无结构的数据的存储和处理,对传统的存储方式提出挑战。这个时候,分布式存储,应运而生,就是将数据信息分散存储。
一、常见分布式文件系统
Google Filesystem | GFS+MapReduce擅长处理单个大文件 |
Hadoop Distributed Filesystem | GFS的山寨版+MapReduce,擅长处理单个大文件 |
ClusterFS | 擅长处理单个大文件 |
Taobao Filesystem | 擅长处理海量小文件 |
MogileFS | 擅长处理海量小文件 |
Ceph | PB级别的分布式文件系统 |
MooseFS | 通用简便,适用于研发能力不强的公司 |
Lustre | 一种平行分布式文件系统 |
二、MogileFS基本原理
MogileFS是一个开源的分布式文件存储系统,由LiveJournal旗下的Danga Interactive公司开发。其主要特性包括支持多节点冗余、实现文件自动复制、无需RAID、无特殊组件要求等。mogilefs主要有以下三部分构成:
1、Tracker:MogileFS 的核心部分,称为调度器,MogileFSd 进程就是trackers进程程序,trackers 做了很多工作:Replication,Deletion,Query,Reaper,Monitor 等等,这个是基于事件的( event-based ) 父进程/消息总线来管理所有来之于客户端应用的交互(requesting operations to be performed),,包括将请求负载平衡到多个“query workers”中,然后让 MogileFSd 的子进程去处理
2、Database:用来存放mogilefs的元数据
3、Storage server:mogilefs数据存储于此
MogileFS管理的几个概念:
1、Domain:一个MogileFS可以有多个Domain,用来存放不同文件(大小,类型),同一个Domain内key必须唯一,不同Domain内,key可以相同
2、每一个存储节点称为一个主机host,一个主机上可以有多个存储设备dev(单独的硬盘),每个设备都有ID号,Domain+Fid用来定位文件
3、Class:文件属性管理,定位文件存储在不同设备上的份数
三、MogileFS的实现
工具:三台主机,角色如下
172.17.19.17:tracker+mysql
172.17.19.117:storage1
172.17.19.189:storage2
大环境:三台主机全部安装如下包
yum install perl-Net-Netmask perl-IO-String perl-Sys-Syslog perl-IO-AIO
yum -y install make gcc unzip perl-DBD-MySQL perl perl-CPAN perl-YAML perl-Time-HiRes
yum localinstall *
1、tracker配置
①[root@tracker ~]# yum install mariadb mariadb-server -y
[root@tracker ~]# systemctl start mariadb
②初始化数据库
[root@websrv /etc/mogilefs]# mysql -uroot -p
GRANT ALL PRIVILEGES ON *.* TO 'mogile' @'127.0.0.1' IDENTIFIED BY 'mogile' WITH GRANT OPTION; 授权
flush privileges; 清权限
[root@websrv /etc/mogilefs]# mogdbsetup --dbpass=mogile(一路y)
③[root@websrv /etc/mogilefs]# vim mogilefsd.conf
listen = 172.17.19.17:7001 监听的IP对应的port
db_user = mogile
db_pass = mogile
④启动服务
/etc/init.d/mogilefsd start
Starting mogilefsd (via systemctl): [ OK ]
[root@websrv /etc/mogilefs]# mogadm --tracker=172.17.19.17:7001 check 检测
Checking trackers...
172.17.19.17:7001 ... OK
Checking hosts...
No devices found on tracker(s). 此时只是配了tracker,还没有添加storage,所以是no devices
2、storage配置
[root@localhost mogilefs]# vim mogstored.conf
docroot = /data/mogdata
[root@localhost mogilefs]# mkdir /data/mogdata -p
chown mogilefs.mogilefs mogdata/ -R
[root@localhost mogilefs]# /etc/init.d/mogstored start
3、组合(也就是把storage“加到”tracker)
tracker操作
[root@websrv ~]# mogadm --tracker=172.17.19.17:7001 host add node1 --ip=172.17.19.117 --port=7500 --status=alive 指定storage为node1节点,alive的状态加到tracker里
[root@websrv ~]# mogadm --tracker=172.17.19.17:7001 host add node2 --ip=172.17.19.189 --port=7500 --status=alive
[root@websrv ~]# mogadm --tracker=172.17.19.17:7001 check
Checking trackers...
172.17.19.17:7001 ... OK
Checking hosts...
[ 1] node1 ... OK
[ 2] node2 ... OK
storage操作
[root@centos7 ~]# cd /data/mogdata/
[root@centos7 /data/mogdata]# ls
[root@centos7 /data/mogdata]# mkdir dev1
[root@centos7 /data/mogdata]# chown mogilefs.mogilefs dev1/ -R
[root@localhost mogilefs]# cd /data/mogdata/
[root@localhost mogdata]# mkdir dev2
[root@localhost mogdata]# chown mogilefs.mogilefs dev2/ -R
tracker操作
[root@websrv ~]# mogadm --tracker=172.17.19.17:7001 device add node1 1
[root@websrv ~]# mogadm --tracker=172.17.19.17:7001 device add node2 2
[root@websrv ~]# mysql -uroot -p
4、上传一张图片,测试是否能存储成功
tracker操作
[root@websrv /etc/mogilefs]# mogadm --tracker=172.17.19.17:7001 domain add img
[root@websrv /etc/mogilefs]# mogadm --tracker=172.17.19.17:7001 domain list
domain class mindevcount replpolicy hashtype
-------------------- -------------------- ------------- ------------ -------
img default 2 MultipleHosts() NONE
[root@websrv ~]# mogupload --tracker=172.17.19.17:7001 --domain=img --key=test --file=test.jpg
浏览器访问查找出来的路径,出现图片,测试成功
四、Fastdfs基本原理
FastDFS是一个由国人余庆开发的轻量级的开源分布式文件系统,主要解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡。它用纯C语言实现,支持Linux、FreeBSD、AIX等UNIX系统。其特性包括分组存储、灵活简洁、支持多块磁盘、节省存储空间等,FastDFS的核心组件如下:
1、Tracker:调度器,负责维持集群的信息,例如各group及其内部的storage node,这些信息也是storage node报告所生成;每个storagenode会周期性向tracker发心跳信息;
2、storage server:以group为单位进行组织,任何一个storage server都应该属于某个group,一个group应该包含多个storage server;在同一个group内部,各storage server的数据互相冗余;
五、Fastdfs的实现
工具:三台主机,角色如下
172.17.19.17:tracker+mysql
172.17.19.117:storage1
172.17.19.189:storage2
大环境:三台机器全部安装如下包
fastdfs-5.0.11-1.el7.centos.x86_64.rpm
fastdfs-debuginfo-5.0.11-1.el7.centos.x86_64.rpm
fastdfs-server-5.0.11-1.el7.centos.x86_64.rpm
fastdfs-tool-5.0.11-1.el7.centos.x86_64.rpm
libfdfsclient-devel-5.0.11-1.el7.centos.x86_64.rpm
libfdfsclient-5.0.11-1.el7.centos.x86_64.rpm
libfastcommon-1.0.36-1.el7.centos.x86_64.rpm nginx-filesystem-1.10.2-1.el7.centos.noarch.rpm
libfastcommon-devel-1.0.36-1.el7.centos.x86_64.rpm
1、编辑配置文件
tracker操作
[root@websrv /etc/fdfs]# vim tracker.conf
disabled=false 默认为false,表示是否无效
port=22122 默认为22122
base_path=/data/fastdfs/tracker
启动服务
[root@websrv /etc/fdfs]# /etc/init.d/fdfs_trackerd start
或者systemctl status fdfs_trackerd
Starting fdfs_trackerd (via systemctl): [ OK ]
storage操作
[root@centos7 ~/fastdfs]# cd /etc/fdfs/
[root@centos7 /etc/fdfs]# ls
anti-steal.jpg http.conf storage.conf.sample tracker.conf.sample
client.conf.sample mime.types storage_ids.conf.sample
[root@centos7 /etc/fdfs]# cp storage.conf.sample storage.conf
[root@centos7 /etc/fdfs]# vim storage.conf
disabled=false 默认为false,表示是否无效
port=23000 默认为23000
base_path=/data/fastdfs/storage
tracker_server=172.17.19.17:22122
store_path0=/data/fastdfs/storage
http.server_port=8888
启动服务
systemctl start fdfs_storaged
2、配置完成,测试、上传文件
在tracker上配置客户端
[root@websrv /etc/fdfs]# cp client.conf.sample client.conf
[root@websrv /etc/fdfs]# vim client.conf
base_path=/data/fastdfs/tracker
tracker_server=172.17.19.17:22122
[root@websrv ~]# fdfs_upload_file /etc/fdfs/client.conf test.jpg
group1/M00/00/00/rBETvVoc0meAcLtvAAAcdXbJWOo831.jpg
storge 上查看,图片已存储,测试成功
[root@localhost 00]# ls
rBETvVoc0meAcLtvAAAcdXbJWOo831.jpg
[root@localhost 00]# pwd
/data/fastdfs/storage/data/00/00
六、Mogilefs与FastDFS的对比
介绍结束,谢谢浏览~