分布式文件系统MogileFS

一、分布式文件系统介绍

    定义:分布式存储系统是大量普通PC服务器通过与Internet互联,对外作为一个整体提供存储服务。分布式文件系统,顾名思义,就是分布式+文件系统。它包含这两个方面的内涵,从文件系统的客户端使用的角度来看,它就是一个标准的文件系统,提过一系列的API,由此进行文件或者目录的创建、移动、删除,以及对文件的读写等操作。从内部实现来看,分布式系统则不再和普通文件系统一样负责管理本地磁盘,它的文件内容和目录结构都不是存储再本地磁盘上,而是通过网络传输到远端系统上。并且,同一个文件存储不只是在一台机器上,而是在一组机器上分布式存储,协同提供服务。   

    特性:

    1、可扩展:分布式存储系统可以扩展到几百台至几千台的集群规模,且随着集群规模的增长,系统整体性能表现为线性增长;

    2、低成本:分布式存储系统的自动容错、自动负载均衡机制使其可以构建再普通PC机之上;另外,线性扩展能力也使得增长、减少机器非常方便,可以实现自动运维;

    3、高性能:无论针对整个集群还是单台服务器,都要求分布式系统具备高性能。

    4、易用性:分布式存储系统需要能够提供易用的对外接口;另外,也要求具备完善的监控、运维工具,并能方便的与其他系统集成,如从hadoop云计算系统导入数据;

    挑战:在于数据、状态信息的持久化,要求在自动迁移,自动容错、并发读写的过程中保证数据的一致性;


二、CAP理论

    来自Berkerly的Eric Brewer教授提出了一个著名的CAP理论:一致性(Consistency),可用性(Availability)和分区容忍性(Tolerance of networkPartition)三者不能同时满足;

    C:读操作总是能够读取到之前完成的写操作结果,满足这个条件的系统成为强一致系统,这里的“之前”一般对同一个客户端而言;

    A:读写操作再单台机器发生故障的情况下依然能够正常执行,而不需要等待发生故障的机器重启或者其上的服务迁移到其他机器;

    P:机器故障、网络故障、机房停电等异常情况下仍然能够满足一致性可可用性;

分布式存储系统要求能够自动容错,即分区可容忍性总是需要满足的,因此,一致性和写操作的可用性就不能同时满足了,需要再这两者间权衡,是选择不允许丢失数据,保持强一致,还是允许少量数据丢失以获得更好的可用性;


三、常见分布式文件系统

    GFS(Google File System):Google公司为了满足自己公司需求而开发的基于Linux的专有分布式文件系统。由于其元数据时存储再内存中,所以在存储文件数量上注定不可能达到海量存储,主要是存储大文件使用。

    HDFS(Hadoop Distributen File System):hadoop的重要组成之一,几乎完全山寨版的GFS。

    TFS:淘宝自主研发,将元数据存储于关系型数据库或其它高性能存储中,从而能维护海量文件元数据;主要用于存储海量小文件,维护难度大

    GlusterFS:去中心化的设计模式;擅长处理单个大文件;

    Ceph:Linux内核级实现的文件系统,目前已经直接被收录进Linux内核;bug较多,稳定性不佳

    MooseFs:持FUSE,相对比较轻量级,对master服务器有单点依赖,用perl编写,性能相对较差,国人用的较多;

    MogileFS:元数据放在数据库中,擅长处理海量小文件,性能较好;

    FastDFS:轻量级分布式系统,擅长处理海量小文件

四、MogileFS详细介绍

    MogileFS是一个开源的分布式文件存储系统,由LiveJournal旗下的Danga Interactive公司开发。Danga团队开发了包括 Memcached、MogileFS、Perlbal 等多个知名的开源项目。目前使用MogileFS 的公司非常多,如日本排名先前的几个互联公司及国内的yupoo(又拍)、digg、豆瓣、1号店、大众点评、搜狗和安居客等,分别为所在的组织或公司管理着海量的图片。

    1、MogileFS由3个部分组成:

    (1)、server:主要包括mogilefsd和mogstored两个应用程序。mogilefsd实现的是tracker,它通过数据库来保存元数据信息,包括站点domain、class、host等;

    (2)、utils(工具集):主要是MogileFS的一些管理工具,例如modadm等。

    (3)、客户端API:MogileFS的客户端API很多,例如Perl、php、Java、python等,用这个模块可以编写客户端程序,实现文件的备份管理功能等。

    

    2、MogileFS特性:

     (1)、工作于应用层:http,nfs;

     (2)、无单点:三大组件(tracker,mogstore,database)皆可以实现高可用;

     (3)、自动完成文件复制:复制的最小单位不是文件,而是class;基于不同的class,文件可以被自动的复制到多个有足够存储空间的存储节点上;

     (4)、传输无需特殊协议:可以通过NFS或HTTP协议进行通信;

     (5)、名称空间:文件通过一个给定的key来确定,是一个全局的命名空间;没有目录,基于域实现文件隔离;

     (6)、不共享任何数据:无需通过昂贵的SAN来共享磁盘,每个存储节点只需维护自己所属的存储设备(device)即可;

     两个关键术语:

        domain:name space,命名空间

            一个MogileFS可以有多个Domain

            用来存放不同文件(大小、类型)

            同一个Domain内,key必须唯一

            不同Domain内,key可以相同

         class:最小复制单元

            文件属性管理器

            定义文件存储再不同设备上的份数

    

     理想架构

分布式文件系统MogileFS_第1张图片



     实际架构


分布式文件系统MogileFS_第2张图片

系统环境: Centos6.7   

     工作流程  

        1、客户端向服务器端发送请求

        2、nginx通过调度将请求转达给其中一个mogilefs的tracker

        3、tracker接收到请求向后端数据库获取存储位置并返回给nginx

        4、nginx接到存储位置再到mogilefs的存储上获取实际存储数据并返回给客户端


五、MogileFS实现

1、node3上安装mysql并配置其root用户允许远程连接
# tar xf mysql-5.6.22-linux-glibc2.5-x86_64.tar.gz -C /usr/local
# cd /usr/local
# ln -sv mysql-5.6.22-linux-glibc2.5-x86_64/ mysql
# groupadd -g 306 mysql
# useradd -g 306 -u 306 -s /sbin/nologin -M -r mysql
# mkdir /u01/mysql/{data,log} -pv
# chown -R mysql.mysql /u01/mysql/
# cd /usr/local/mysql
# chown root.mysql ./*
# scripts/mysql_install_db --user=mysql --datadir=/u01/mysql/data
# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
# chmod +x /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld
# echo "/usr/local/mysql/lib" > /etc/ld.so.conf.d/mysql.conf
# ldconfig
# ldconfig -p | grep mysql
# ln -sv /usr/local/mysql/include/ /usr/include/mysql
# echo "export PATH=$PATH:/usr/local/mysql/bin" > /etc/profile.d/mysql.sh
# . /etc/profile.d/mysql.sh
# vim /etc/my.cnf
[mysqld]
lower_case_table_names =1          #不区分大小写
datadir = /u01/mysql/data          #数据目录
port = 3306                        #端口
socket = /tmp/mysql.sock
pid-file = /tmp/mysql.pid

character_set_server = utf8         #server级别字符集
default_storage_engine  = InnoDB     #默认存储

log_error  = /var/log/mysql/mysqld.log
log-bin  = /u01/mysql/log/mysql-bin    #log-bin文件存放目录
log-bin-index  = /u01/mysql/log/mysql-bin.index
expire_logs_days  = 30        
skip-name-resolve

# mkdir /var/log/mysql
# service mysqld start

# mysql
> GRANT ALL ON *.* TO 'root'@'192.168.%.%' IDENTIFIED BY 'mogilefs';  #授权
Query OK, 0 rows affected (0.00 sec)

> flush privileges;          #重读授权
Query OK, 0 rows affected (0.01 sec)




2、安装如下软件包,虽然只是配置tracker,但还是安装了storage的包,是因为后面做高可用时用到
 MogileFS-Server-2.46-2.el6.noarch.rpm             #通行组件
 MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm   #traker
 MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm   #storage
 MogileFS-Utils-2.19-1.el6.noarch.rpm              #工具包
 Perlbal-1.78-1.el6.noarch.rpm
 Perlbal-doc-1.78-1.el6.noarch.rpm
 perl-MogileFS-Client-1.14-1.el6.noarch.rpm        #客户端开发使用
 perl-Net-Netmask-1.9015-8.el6.noarch.rpm          #机架感知能力
 perl-Perlbal-1.78-1.el6.noarch.rpm                #依赖包
 
# yum -y localinstall *.rpm  #安装所有包
由于node3是做tracker的,用到的主要程序包是MogileFS-Server-mogilefsd,其他和配置tracker没有太
大关系,MogileFS-Server-mogilefsd生成的主要文件
# rpm -ql MogileFS-Server-mogilefsd
/etc/mogilefs/mogilefsd.conf   #主配置文件
/etc/rc.d/init.d/mogilefsd     #启动脚本
/usr/bin/mogdbsetup            #数据库初始化工具
/usr/bin/mogilefsd             #mogilefsd主进程

3、初始化MogileFS数据库:使用可以连接到mysql的用户和密码,创建一个MogileFS使用的数据库和数
据库的管理用户以及设置密码


六、MogileFS高可用

七、Nginx反向代理MogileFS

你可能感兴趣的:(服务器,客户端,internet,本地磁盘,成本)