MogileFS

1.1 分布式存储

集中式的数据存储比如SAN、NAS客户端访问存储时,都是通过存储服务器访问后端存储。存储本身会受到很多限制:

1、纵向扩展受阵列空间限制

2、横向扩展受交换设备限制

3、节点受文件系统限制

分布式存储无非是通过多个节点,每个节点提供一定量的存储空间。有一个节点作为整体的分发节点,来调度用户请求。该节点专门存放元数据,所以称为元数据服务器节点。当任何客户端想要存取数据时,通过网络向元数据服务器节点发起请求。当客户端想要存储某文件A时,首先检查该节点有没有A文件。

带宽受后端可用节点数量限制。存储数据时,分布式文件系统会将数据切割为大小固定的块chunk,每一个块都是一个独立的存储单元,所以就会出现第一个块在第一个主机上,第二个块在第二个主机上,等等这样的情况,看起来就像Raid0一样。同样的,如果其中一个节点挂了,整个所有的数据肯定就没了,这显然是不能够接受。这样一来,就只能在每个chunk在存储时存储双份,并把两份打散存储在不同的节点上。

元数据服务器节点不仅要记录文件的元数据,还要记录每个文件被切割成了多少个chunk、每一个chunk有多少个副本、每个副本存储在哪个主机上等等信息。并且还应该对该节点做高可用。为了使得客户端在访问的速度更快,元数据信息还会在内存中提供,那如何对内存中的数据进行冗余?可能需要开发专门的协议,这是非常麻烦的。有的分布式文件系统干脆直接将元数据信息放在共享磁盘上、还有的分布式文件系统通过数据库进行存放。

分布式文件系统还会面临节点存放数据不均衡的问题,一开始存储时都是平均的,但是数据不光会存储还会删除。时间久了,删除多了,就会存在不均衡的问题了。

chunk的分发不可避免的要用到一致性哈希算法。

一个分布式文件系统必须有机架感知能力,就是说两个副本不仅不能放在同一个节点上,还不应该放在同一个机架的节点上。避免多个节点使用的同一个交换机换了。

支持挂载称为分布式文件系统,不支持挂载称为分布式存储。数据库是一种存储,但也不支持挂载。

分布式文件系统满足三个特性:

1、可伸缩性

2、可靠性

3、总体成本消耗

开源搜索引擎解决方案:

Lucene, Sphinx

当前市面上分布式文件系统或存储:

GFS:Google File System,HDFS就是山寨GFS的,所以它们思路一致。

HDFS:Hadoop Distributed File System,适用于数量不太多的大文件场景。

namenode:名称节点,存储元数据,并且存放在内存中。

datanode:数据节点,存储数据。

TFS:Taobao FS,就是能够将元数据存储在第三方而非内存中的HDFS。将元数据存储于关系型数据库或其它高性能存储中,从而能维护海量文件元数据。

GlusterFS:去中心化的设计模式,没有元数据节点,每个节点既能存数据又能存元数据。越来越受到开源界重视。

ceph:Linux内核级实现的文件系统,而已经被直接收录进Linux内核。

MooseFS:又称为mfs,轻量级

MogileFS:轻量级

FastDFS:轻量级

1.1.1 MogileFS

三个组件:

tracker:追踪元数据

database:存储元数据

storage:存储数据

1.1.1.1 traker

可以将它想象成httpd服务器,通过restful风格将每一个文件访问的路径通过URL输出;而和storage节点打交道支持http、nfs两种协议;traker负责将storage节点的地址告诉客户端,由客户端去找storage;traker需要为整个系统的chunk维护2个以上的副本。

运行为mogilefsd(守护进程),它的主要职责包括:

1、 replication:节点间文件的复制

2、 deletion:删除文件

3、 queryworker:响应客户请求的文件元数据访问请求

4、 reaper:在存储失败后将文件复制请求重新放置于队列中,由traker再次进行调度。

5、 monitor:监测主机和设备的健康状态

1.1.1.2 database

存储mogilefs的元数据,一般使用MySQL;建议使用冗余方案以保证其可用性(MMM, MHA)。

mogilefs专门提供了数据结构管理工具mogdbsetup,使用mogdbsetup初始化数据库。

1.1.1.3 storage

mogstored(进程名),一个准备停当的mogstored节点可通过mogadm命令添加至现在的集群中。

存储节点需定义“设备(dev)”用作存储空间,每个“设备”在当前集群都需要通过一个惟一的DevID来标识。

client:

MogileFS专用的客户端工具,客户端用于与mogilefs建立通信,完成数据存取。

特性:

1、 工作于应用层,http, nfs。

2、 无单点

3、 自动完成文件复制

4、 传输无需特殊协议

5、 名称空间机制完成复制

6、 不共享任何数据,通过副本完成冗余。

1.1.1.4 两个关键术语

1、 domain:name space,命名空间,可以想象成一个domain就是一个目录。

一个MogileFS可以有多个domain,用来存档不同的文件,同一个domain内,文件肯定不能同名,而不同的domain就可以。所以说和目录一样。

2、 class:最小复制单元,为了方便进行管理,将多个文件组成一个class后一起做冗余。

MogileFS就是通过domain + Fid来追踪每个文件的,在domain中指明文件的id号来实现。

1.1.1.5 安装MogileFS

规划:web3为traker,web2、web4为storage

1、 安装

(1) 安装的组件

 [[email protected] ~]# ll
-rw-r--r--  1 root root MogileFS-Server-2.46-2.el6.noarch.rpm
-rw-r--r--  1 root root MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm # traker
-rw-r--r--  1 root root MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm # storage
-rw-r--r--  1 root root MogileFS-Utils-2.19-1.el6.noarch.rpm
-rw-r--r--  1 root root perl-MogileFS-Client-1.14-1.el6.noarch.rpm
-rw-r--r--  1 root root perl-Net-Netmask-1.9015-8.el6.noarch.rpm
-rw-r--r--  1 root root perl-Perlbal-1.78-1.el6.noarch.rpm

(2) 安装

[[email protected] ~]# yum --nogpgcheck localinstall *.rpm

(3) 查看traker生成的组件

[[email protected] ~]# rpm -ql MogileFS-Server-mogilefsd
/etc/mogilefs/mogilefsd.conf
/etc/rc.d/init.d/mogilefsd
/usr/bin/mogdbsetup # 数据库初始化工具
/usr/bin/mogilefsd # 守护进程对应的主文件

2、 授权root用户能够远程登陆,虽然数据库是本地,但还是当做远程来使用

MariaDB [(none)]> GRANT ALL ON *.* TO ‘root‘@‘172.16.%.%‘ IDENTIFIED BY ‘123456‘ WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
# WITH GRANT OPTION:自己获得的授权能够授予给其他用户

(1) 初始化数据库

[[email protected] ~]# mogdbsetup --dbhost=172.16.45.3 --dbrootuser=root --dbrootpass=123456 --dbname=mogdb --dbuser=moguser --dbpass=mogpass

(2) 编辑配置文件

[[email protected] ~]# cd /etc/mogilefs/
[[email protected] mogilefs]# cp mogilefsd.conf{,.bak}
[[email protected] mogilefs]# vim mogilefsd.conf
daemonize = 1 # 是否运行为守护进程
db_dsn = DBI:mysql:mogdb:host=172.16.45.3 # DBI:perl语言连接mysql的驱动
db_user = moguser
db_pass = mogpass 
listen = 172.16.45.3:7001
query_jobs = 10 # 同时响应10个用户的请求
delete_jobs = 1 # 删除请求并发数
replicate_jobs = 5 # 复制请求并发数
reaper_jobs = 1 # 重新将请求给traker分配,无需修改

(3) 启动服务

[[email protected] mogilefs]# /etc/init.d/mogilefsd start

3、 另外两个storage节点

[[email protected] ~]# scp *.rpm 172.16.45.4:~
[[email protected] ~]# scp *.rpm 172.16.45.2:~
[[email protected] ~]# yum --nogpgcheck install *.rpm

(1) 安装storage依赖的一个包

[[email protected] ~]# yum install perl-IO-AIO

(2) 查看生成的文件

[[email protected] ~]# rpm -ql MogileFS-Server-mogstored
/etc/mogilefs/mogstored.conf
/etc/rc.d/init.d/mogstored
/usr/bin/mogautomount # 自动挂载工具
/usr/bin/mogstored # 守护进程

(3) 修改配置文件

[[email protected] ~]# cd /etc/mogilefs/
[[email protected] mogilefs]# cp mogstored.conf{,.bak}
[[email protected] mogilefs]# vim mogstored.conf
maxconns = 10000 # 最大连接数
httplisten = 0.0.0.0:7500 # http协议
mgmtlisten = 0.0.0.0:7501 # 管理监听端口
docroot = /mogstore # 文件存储的目录

(4) 新建分区存储文件,并格式化后挂载

[[email protected] mogilefs]# fdisk /dev/sda
[[email protected] mogilefs]# partx -a /dev/sda
[[email protected] mogilefs]# mkdir /mogstore
[[email protected] mogilefs]# mkfs -t ext4 /dev/sda3
[[email protected] mogilefs]# mount /dev/sda3 /mogstore/

(5) 在存储目录建立子目录,并且不能和其他节点同名

[[email protected] mogstore]# mkdir dev2 # 
只能为
dev

(6) 改属主属组

[[email protected] mogstore]# chown -R mogilefs.mogilefs /mogstore/

(7) 启动服务

[[email protected] mogilefs]# /etc/init.d/mogstored start

4、 加入节点,在traker节点上进行

[[email protected] ~]# rpm -ql MogileFS-Utils # 通过此包完成
/usr/bin/mogadm # mogileFS管理工具
/usr/bin/mogdelete
/usr/bin/mogfetch # 获取文件
/usr/bin/mogfiledebug
/usr/bin/mogfileinfo # 查看文件
/usr/bin/moglistfids
/usr/bin/moglistkeys
/usr/bin/mogrename
/usr/bin/mogstats
/usr/bin/mogtool
/usr/bin/mogupload # 上传

(1) 检查traker节点

[[email protected] ~]# mogadm --trackers=172.16.45.3:7001 check
Checking trackers...
  172.16.45.3:7001 ... OK
 
Checking hosts...
No devices found on tracker(s).

(2) 查看状态

[[email protected] ~]# mogstats --db_dsn="DBI:mysql:mogdb:host=172.16.45.3" --db_user="moguser" --db_pass="mogpass" --stats="all"

(3) 加入主机

[[email protected] ~]# mogadm --trackers=172.16.45.3:7001 host add 172.16.45.4 --ip=172.16.45.4 --status=alive
[[email protected] ~]# mogadm --trackers=172.16.45.3:7001 host add 172.16.45.2 --ip=172.16.45.2 --status=alive

(4) 查看

[[email protected] ~]# mogadm --trackers=172.16.45.3:7001 host list
172.16.45.4 [1]: alive
  IP:       172.16.45.4:7500
 
172.16.45.2 [2]: alive
  IP:       172.16.45.2:7500

(5) 添加设备并查看

[[email protected] ~]# mogadm --trackers=172.16.45.3:7001 device add 172.16.45.4 2
[[email protected] ~]# mogadm --trackers=172.16.45.3:7001 device add 172.16.45.2 1
[[email protected] ~]# mogadm --trackers=172.16.45.3:7001 device list
172.16.45.4 [1]: alive
                    used(G)    free(G)   total(G)  weight(%)
   dev2:   alive      0.042     27.866     27.908        100
 
172.16.45.2 [2]: alive
                    used(G)    free(G)   total(G)  weight(%)
   dev1:   alive      0.527     17.595     18.122        100

(6) 定义名称空间,并查看

[[email protected] ~]# mogadm --trackers=172.16.45.3:7001 domain add images
[[email protected] ~]# mogadm --trackers=172.16.45.3:7001 domain add conffiles
[[email protected] ~]# mogadm --trackers=172.16.45.3:7001 domain list
 domain               class                mindevcount   replpolicy   hashtype 
-------------------- -------------------- ------------- ------------ -------
 conffiles            default                   2        MultipleHosts() NONE   
 
 images               default                   2        MultipleHosts() NONE  
# 会自动创建类
# mindevcount为2表示文件存储两个副本
# replpolicy为MultipleHosts()表示复制策略为多主机,副本不会放在同一主机
# class中文件记录时会做哈希计算,hashtype为none表示不做哈希计算

(7) 添加class并查看

[[email protected] ~]# mogadm --trackers=172.16.45.3:7001 class add images nc1 --mindevcount=2
[[email protected] ~]# mogadm --trackers=172.16.45.3:7001 class list
 domain               class                mindevcount   replpolicy   hashtype
-------------------- -------------------- ------------- ------------ -------
 conffiles            default                   2        MultipleHosts() NONE   
 
 images               default                   2        MultipleHosts() NONE   
 images               nc1                       2        MultipleHosts() NONE

5、 正式使用mogileFS

(1) 上传一个文件

[[email protected] ~]# mogupload --trackers=172.16.45.3:7001 --domain=images --key=‘1.jpg‘ --file=‘/usr/share/backgrounds/centos_1920x1200_logoonly.jpg‘
# --key指定的是URL,也就是访问路径

(2) 此时文件已经存储到后端节点了,查看文件的信息

 [[email protected] ~]# mogfileinfo --trackers=172.16.45.3:7001 --domain=images --key=‘1.jpg‘
- file: 1.jpg
     class:              default
  devcount:                    2
    domain:               images
       fid:                    2
       key:                1.jpg
    length:                57592
 - http://172.16.45.2:7500/dev1/0/000/000/0000000002.fid # 可以通过浏览器直接访问
 - http://172.16.45.4:7500/dev2/0/000/000/0000000002.fid

(3) 将文件下载下来

[[email protected] ~]# mogfetch --trackers=172.16.45.3:7001 --domain=images --key=‘1.jpg‘ --file=‘/root/1.jpg‘

1.1.1.6 编译nginx mogilefs模块

1、 编译并配置

[[email protected] ~]# yum install -y pcre-devel
[[email protected] ~]# tar xf nginx-1.6.2.tar.gz 
[[email protected] ~]# tar xf nginx_mogilefs_module-1.0.4.tar.gz 
[[email protected] ~]# cd nginx-1.6.2
[[email protected] nginx-1.6.2]# ./configure --prefix=/usr/local/nginx   --sbin-path=/usr/local/nginx/sbin/nginx   --conf-path=/etc/nginx/nginx.conf   --error-log-path=/var/log/nginx/error.log   --http-log-path=/var/log/nginx/access.log   --pid-path=/var/run/nginx/nginx.pid    --lock-path=/var/lock/nginx.lock   --user=nginx   --group=nginx   --with-http_ssl_module   --with-http_flv_module   --with-http_stub_status_module   --with-http_gzip_static_module   --http-client-body-temp-path=/var/tmp/nginx/client/   --http-proxy-temp-path=/var/tmp/nginx/proxy/   --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/   --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi   --http-scgi-temp-path=/var/tmp/nginx/scgi   --with-pcre --add-module=../nginx_mogilefs_module-1.0.4
[[email protected] nginx-1.6.2]# make && make install

(1) 准备nginx启动脚本

[[email protected] ~]# vim /etc/init.d/nginx
[[email protected] ~]# chmod +x /etc/init.d/nginx
[[email protected] ~]# chkconfig --add nginx
[[email protected] ~]# useradd -r nginx
[[email protected] ~]# mkdir /var/tmp/nginx/{client,proxy,fcgi,uwsgi,scgi} –pv
[[email protected] ~]# service nginx start

(2) 编辑配置文件

 [[email protected] nginx]# vim nginx.conf
        location /images/ {
            mogilefs_tracker 172.16.45.3:7001; # 如果有多个tracker节点,可以将它们定义为一个upstream进行调用,还能进行负载均衡和后端健康状态监测
            mogilefs_domain images;
        
            mogilefs_pass {
                proxy_pass $mogilefs_path;
                proxy_hide_header Content_Type; # 隐藏首部
                proxy_buffering off; # 关闭缓冲
            }
        }
[[email protected] nginx]# service nginx reload

(3) 直接通过浏览器访问http://172.16.45.3/images/1.jpg

2、配置上传

(1) 编辑配置文件

[[email protected] nginx]# vim nginx.conf
        location /upload/ {
            mogilefs_tracker 172.16.45.3:7001;
            mogilefs_domain images;
            mogilefs_methods PUT DELETE;
 
            mogilefs_pass {
                proxy_pass $mogilefs_path;
                proxy_hide_header Content_Type;
                proxy_buffering off;
            }
        }
[[email protected] nginx]# !ser

(2) 删除文件

[[email protected] nginx]# curl -X DELETE 172.16.45.3/upload/2.jpg

(3) 上传

[[email protected] ~]# curl -X PUT -T ‘/tmp/4.jpeg‘ 172.16.45.3/upload/4.jpeg
时间: 2024-10-13 00:21:35

MogileFS的相关文章

mogilefs分布式部署及说明

一.mogilefs介绍 二.mogilefs原理 三.mogilefs架构说明 四.mogile安装部署 一.mogilefs介绍 MogileFS是我们的开源分布式文件系统.其性能和特点包括: (1)应用程序级别 - 不需要特殊的内核模块. 没有单点故障 -  MogileFS设置的所有三个组件(存储节点,跟踪器和跟踪器的数据库)可以在多台机器上运行,因此没有单点故障. (您可以在与存储节点相同的计算机上运行跟踪器,因此您不需要4台计算机...)建议至少使用2台计算机. (2)自动文件复制

分布式存储mogilefs简介(1)

MogileFS 分布式存储: 不能mount,基于API进行存储 分布式文件系统:(把存储空间抽象成文件格式的存储) 可以mount,基于VFS接口访问 常见的分布式文件系统 GFS:适合存储少量大文件 HDFS:适合存储少量大文件 TFS:淘宝FS,在名称节点上将元数据存储于关系型数据中,文件数量不在受限于名称节点的内存 空间,可以存储海量小文件 TFS:腾讯FS(为开源) Lustre:Oracle,企业级应用,重量级 GlusterFS: MooseFS:基于FUSE的格式,可以挂载 M

44 分布式存储与mogilefs、mogiles使用进阶

01 分布式存储与mogilefs 实战:安装配置mogilefs 配置环境: node1:192.168.1.130 CentOS7.2 node2:192.168.1.131 CentOS7.2 node3:192.168.1.132 CentOS7.2 node4:192.168.1.133 CentOS7.2 [[email protected] ~]# vim /etc/hosts 添加 192.168.1.130           node1 192.168.1.131      

mogilefs分布式文件系统搭建详解

MogileFS是一套开源的分布式存储软件,适用于存储海量小文件.由tracker,mogstore,database三个部分组成. Tracker:它通过数据库来保存元数据信息,包括站点domain.class.host等:主要功能包括监控后端Storage节点,及指示Storage节点完成数据的添加.删除.查询,及节点之间数据的复制等. mogstored 实际存储数据的位置,默认监听在7500端口,接受客户端的文件存储请求. database:用来做数据key  value 映射,可用my

分布式文件系统MogileFS的使用

MogileFS简介 MogileFS是一套开源的分布式存储组件,由LiveJournal旗下的Danga Interactive研发,主要应用于存储海量的小文件. MogileFS有3个组件: 1)Tracker Nodes:是文件系统集群的核心节点,借助数据库节点保存元数据,主要功能包括监控后端Storage节点,及指示Storage节点完成数据的添加.删除.查询,及节点之间数据的复制等,该节点上运行的进程为mogilefsd.往往Tracker节点有多个,以实现负载均衡和高可用: 2)St

分布式文件系统之——mogilefs

本节我们将来认识下分布式文件系统,不过我主要讲的是关于其中的一个比较流行的mogilefs进行介绍,好了其他的不多说了,下面我们就开始吧. 什么是分布式文件系统? 什么是分布式文件系统(Distributed File System)?顾名思义,就是分布式+文件系统.它包含了2方面,从文件系统的客户端的角度来看,他就是一个标准的文件系统,提供了API,由此可以进行文件的创建.删除.读写等操作:从内部来看的话,分布式文件系统则与普通的文件系统不同,它不在是本地的磁盘中,它的内容和目录都不是存储在本

Nginx与MogileFS架构图片服务器实例

利用Nginx和MogileFS架构图片服务器 在之前的文章中以介绍如何搭建MogileFS:这里就不提了. 一,Nginx安装 在标准的nginx安装中增加支持MogileFS的模块,vkholodkov-nginx-mogilefs-module-249f2b0Nginx的配置mogilefs_pass [<key>] {<fetch block>} 使用范围:server,location,limit_except向MogileFS tracker查找URI中指定的关键字,关

Web集群实现共享存储的架构演变及MogileFS

本篇博客从Web集群中亟需解决的大容量存储问题引入,分析了几类常用的共享存储架构,重点解析了分布式存储系统的原理及配置实现: =================================================================== 1 共享存储的架构演变 2 分布式存储系统 2.1 基础知识 2.2 分类 2.3 CAP理论 2.4 协议 3 MogileFS 3.1 特性 3.2 架构 3.3 组成 3.4 服务安装及启动 3.5 配置部署 3.6 配置前端代理N

CentOS 6.5 分布式文件系统之MogileFS工作原理及实现过程

   MogileFS是一套高效的文件自动备份组件,由Six Apart开发,广泛应用在包括LiveJournal等web2.0站点上.MogileFS由3个部分组成:    第1个部分:是server端,包括mogilefsd和mogstored两个程序.前者即是mogilefsd的tracker,它将一些全局信息保存在数据库里,例如站点domain,class,host等.后者即是存储节点(store node),它其实是个HTTP Daemon,默认侦听在7500端口,接受客户端的文件备份

MogileFS学习小结

大纲: 一.关于MogileFS 二.常见分布式文件系统 三.MogileFS基本原理 四.MogileFS的实现 一.关于MogileFS 当下我们处在一个互联网飞速发展的信息社会,在海量并发连接的驱动下每天所产生的数据量必然以几何方式增长,随着信息连接方式日益多样化,数据存储的结构也随着发生了变化.在这样的压力下使得人们不得不重新审视大量数据的存储所带来的挑战,例如:数据采集.数据存储.数据搜索.数据共享.数据传输.数据分析.数据可视化等一系列问题. 传统存储在面对海量数据存储表现出的力不从