设为首页 收藏本站
查看: 1457|回复: 0

[经验分享] 分布式文件系统MogileFS

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-2-4 09:15:50 | 显示全部楼层 |阅读模式
一、分布式文件系统介绍
    定义:分布式存储系统是大量普通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:最小复制单元

            文件属性管理器

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


     理想架构
wKioL1axnaaBGiS7AAD5bTH8ltc314.jpg


     实际架构

wKioL1axoGyht7K2AACn41kC2QQ810.jpg

系统环境: Centos6.7   
     工作流程  
        1、客户端向服务器端发送请求
        2、nginx通过调度将请求转达给其中一个mogilefs的tracker

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

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


五、MogileFS实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-173538-1-1.html 上篇帖子: Mogilefs介绍与安装步骤 下篇帖子: 分布式文件系统MogileFS
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表