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

[经验分享] MogileFS实现分布式存储

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-12-6 10:56:38 | 显示全部楼层 |阅读模式
导读目录:

    一、 分布式存储概念
    二、 MogileFS简介

     1、MogileFS特性
     2、MogileFS结构
     3、MogileFS工作原理
     4、MogileFS管理结构

    三、 实现MogileFS分布式存储

     1、    实验环境
     2、    实验前的准备
     3、    对主机进行角色分配
     4、    配置数据库服务器节点
     5、    tracker节点的配置
     6、    管理端节点配置
     7、    storage节点的配置
     8、    安装Sys::Syscall模块
     9、    添加host以及上传文件测试

    四、 实验错误总结及注意事项

一、分布式存储简介:

    分布式存储系统,是将数据分散存储在多台独立的设备上。传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系统性能的瓶颈,也是可靠性和安全性的焦点,不能满足大规模存储应用的需要。分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可靠性、可用性和存取效率,还易于扩展。

二、MogileFS简介
1、MogileFS的特性:

    1、支持多接点冗余。
    2、可实现自动的文件复制。
    3、使用名称空间(命令空间),每个文件通过key来确定分布的文件的位置。
    4、不需要RAID,应用层可以直接实现RAID,不共享任何东西,通过集群接口体用服务。
    5、工作于应用层,没用特殊的组件要求。
    6、不共享任何数据,MogileFS不需要依赖昂贵的SAN来共享磁盘,每个机器只能维护好自己的磁盘。

2、MogileFS主要由三部分构成:

    tracker接点、database节点、storage节点
    1、tracker(MogileFSd进程),这个是MogileFS的核心部分,他是一个调度器,MogileFSd进程就是trackers进程程序,trackers做了很多工作,REplication、Deletion、Query、REaper、Monitor等等,这个是基于事件的(event-based)父进程/消息总线来管理所有来自客户端应用的交互,包括负载均衡到多个“query workers”中,然后让 MogileFSd 的子进程去处理。
    2、MySQL:用来存放 MogileFS 的元数据 (命名空间, 和文件在哪里),是Trackers 来操作和管理它,可以用mogdbsetup程序来初始化数据库,因为数据库保存了MogileFS的所有元数据,建议做成HA架构;(需要在数据库中给tracker授权用户)。
    3、Storage Nodes:这个是 MogileFS 存储文件存放在这些机器上,也是 mogstored 节点,也叫 Storage Server,一台存储主要都要启动一个 mogstored 服务.扩容就是增加这些机器,实际文件存放的地方。

3、MogileFS工作原理
watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=.jpg


    每次文件的上传和读取,都经过前端tracker-Server服务器,tracker-Server服务器受到client端的请求,查询数据库,返回一个上传或者是读取的可用的后端StorageServer的地址,然后由client端直接操作后端Storage-Server服务器。upload操作返回就是成功或者失败的结果,read操作就是返回对应的查询数据。

4、MogileFS管理概念:

1、Domian:一个MOgileFS可以有多个Domain,用来存放不同文件(大小、类型)同一个Domain内key必须唯一,不同Domain内,key可以相同。
2、每一个存储节点称为一个主机,一个主机上可以有多个存储设备(单独的硬盘),每个设备多有ID号,Domain+FID用来定位文件。
3、Class:文件属性管理,定位文件存储在不同设备上的份数。

三、实现MogileFS分布式存储
1、实验环境

    关闭防火墙、关闭selinux
    安装依赖的包:
    在tracker节点和storage节点:

yum install perl-Net-Netmask perl-IO-AIO perl-IO-String perl-Sys-Syslog
2、实验前的准备

准备四台centos、配置好yum源、准备好安装包:

    对于tracker节点:

        只需要安装:

        MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm
        perl-Danga-Socket-1.61-1.el6.rf.noarch.rpm
        两个包就可以实现tracker节点
        MogileFS-Server-2.46-2.el6.noarch.rpm

        在测试的时候没有这个包,可以启动

    对于storage节点:

        需要安装:

        perl-Perlbal-1.78-1.el6.noarch.rpm
        MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm
        perl-Danga-Socket-1.61-1.el6.rf.noarch.rpm

        (如果这个包通过yum localinstall ...安装不上,可以使用rpm -ivh perl-Dan...rpm --force进行安装)

    对于管理端节点:

        需要安装:

        perl-MogileFS-Client-1.14-1.el6.noarch.rpm
        MogileFS-Utils-2.19-1.el6.noarch.rpm

3、对主机进行角色分配

    centos7-1: tracker节点      IP_1
    centos7-2: mysql服务器    IP_2
    centos7-3: storage1           IP_3   
    centos7-4: storage2           IP_4

(注:为了节省主机资源,将管理节点放置到tracker节点上,不影响其正常功能,如有条件,可以单独作为管理节点)

4、配置数据库服务器节点

    如果没有数据库需要提前安装,并初始化数据库
    登录数据库:

    mysql -uroot -pjiake

    为tracker节点管理数据库授权:

    grant all on mogilefs.* to mogile@'%' identified by 'jiake' with grant option;

        (最后这个with grant option是赋予授权用户对该数据库有授权的权限)

    授权之后,刷新用户的权限:

    flush privileges;


5、tracker节点的配置

    首先安装依赖的包:

    yum install perl-Net-Netmask perl-Sys-Syslog perl-IO-AIO perl-IO-String
    yum localinstall MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm perl-Danga-Socket-1.61-1.el6.rf.noarch.rpm MogileFS-Server-2.46-2.el6.noarch.rpm

配置配置文件:

vim /etc/mogilefs/mogilefsd.conf
        db_dsn = DBI:mysql:mogilefs:host=192.168.11.17
        db_user = mogile
        db_pass = jiake
        (指向数据的地址,配置数据库中经过授权的用户和用户密码)
        listen = 0.0.0.0:7001
        (监听端口,如果想监听所有的地址,不可以使用*:7001,只能使用0.0.0.0:7001这种形式)

    查看是否有mogilefs用户,如果没有则创建:

    useradd -r mogilefs

    查看存放pid文件的目录的权限

    ll -d /var/run/mogilefsd/

    所属人是否是mogilefs,如果不是将所属人改为mogilefs:

    chown mogilefs.mogilefs /var/run/mogilefsd/

    为数据库创建存放索引信息的数据库和表:

    mogdbsetup --dbhost=192.168.11.17 --dbpass=jiake --dbrootpass=jiake

        #IP地址是指向数据库的地址,默认用户是moilge其他的配置参数都是默认的,可以不用改,回车之后都是选y

创建完之后到数据库中进行查看!
watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=.jpg
测试在tracker节点上,使用授权的用户是否能够登录到远程的数据库,如果可以登上,则表明tracker于数据库之间的链路是通畅的,否则需要重新授权,必须能够远程登录才可以!

启动服务:

/etc/init.d/mogilefsd start

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=.jpg
停止服务使用:

    /etc/init.d/mogilefsd stop

重新加载服务使用:

     /etc/init.d/mogilefsd restart

6、管理端节点配置

    管理端需要关闭防火墙和selinux,安装相对应的管理端工具包就可以了。
    同样要先安装依赖的包:

    yum install perl-Net-Netmask perl-IO-String perl-IO-AIO perl-Sys-Syslog
    yum localinstall perl-MogileFS-Client-1.14-1.el6.noarch.rpm MogileFS-Utils-2.19-1.el6.noarch.rpm

管理端拥有的管理工具有:

Mogadm、mogfetch、mogrename、mogupload、mogtool、moglistkeys、mogfiledebug、moglistfids、mogstats、mogdelete、mogfileinfo

    将trackers=192.168.11.17:7001写入客户端的配置文件中,这样在每次测试的时候就不用每次都指定--trackers=192.168.11.17:7001

    vim /etc/mogilefs/mogilefs.conf
    trackers=192.168.11.17:7001

    (如果想检测多个tracker,可以在后面加多个,使用逗号隔开就行了)
    经过以上的配置,就可测试tracker的状态了:

    mogadm --trackers=192.168.11.17:7001 check

    因为我们已经配置了/etc/mogilefs/mogilefs.conf文件,所以我们就可以这样:

     mogadm check

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=.jpg
7、storage节点的配置(两个storage节点配置相同)

    首先安装依赖的包:

    yum install perl-IO-String Perl-Net-Netmask perl-IO-AIO perl-Sys-Syslog
    yum localinstall perl-Perlbal-1.78-1.el6.noarch.rpm MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm  perl-Danga-Socket-1.61-1.el6.rf.noarch.rpm

    (如果安装出现问题,可以尝试用rpm -ivh rpm_package --force)
    配置文件:

    vim /etc/mogilefs/mogstored.conf
    maxconns = 10000    #最大连接数
    httplisten = 0.0.0.0:7500  #监听的http请求的端口
    mgmtlisten = 0.0.0.0:7501
    docroot = /data/mogdata   #存储数据的目录

        查看是否有mogilefs用户,如果没有,创建:

          useradd -r mogilefs

        创建存储数据目录:

          mkdir -p /data/mogdata

        修改存储数据目录的所属人:

          chown mogilefs.mogilefs /data/mogdata

        查看是否有存放pid文件的目录:

          ll -d /var/run/mogilefsd/

        如果没有创建出来:

          mkdir -p /var/run/mogilefsd/

        并修改其所属人:

          chown mogilefs.mogilefs /var/run/mogilefsd/

        在存储数据的目录下创建一个设备:

          mkdir /data/mogdata/dev1
          chown mogilefs.mogilefs /data/mogdata/dev1

        启动服务:

          /etc/init.d/mogstored start

            有时候启动失败,但是端口是已经打开了,这就表明启动了,注意端口。

8、由于mogilefs系统需要一个Sys::Syscall的模块才可以实现自动创建文件副本,所以需要安装带有该模块的包

注意:在tracker节点和storage节点上都要安装

    首先安装编译该包需要的编译环境:

    yum install make gcc perl-DBD-MySQL perl perl-CPAN perl-YAML perl-Time-HiRes

    下载该包:

    wget http://search.cpan.org/CPAN/auth ... Syscall-0.23.tar.gz

    解压:

    tar xvf Sys-Syscall-0.23.tar.gz -C /tmp/
    cd /tmp/Sys-Syscall-0.23
    perl Makefile.PL
    make && make install

    安装完成之后要重新启动各个服务,使配置生效。

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=.jpg
9、管理端将storage节点连接到tracker节点

    (1)、添加host到tracker节点:

          mogadm host add node1 --ip=IP_3 --port=7500 --status=alive
          mogadm host add node2 --ip=IP_4 --port=7500 --status=alive

    查看添加状态:

              mogadm host list 或 mogadm check

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=.jpg
watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=.jpg
(2)、添加host上的device到tracker节点

      mogadm device add node1 1
      mogadm device add node2 2
      mogadm device add node2 3

查看添加状态:

          mogadm device list 或 mogadm check

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=.jpg
(3)、向tracker节点中添加域(domain)

      mogadm domain add images
      mogadm domain add doc

查看域的状态:

          mogadm domain list

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=.jpg
(4)、向tracker节点添加class

      mogadm class add images jk1 --mindevcount=3
      mogadm class add images jk2 --mindevcount=3

查看class的状态:

      mogadm class list
watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=.jpg
5)、上传文件

          mogupload --domain=images --class=jk1 --key=jk.jpg  --file=/root/jk.jpg

查看上传文件的存储信息:

          mogfileinfo --domain=images --key=jk.jpg
watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=.jpg
四、实验错误总结及注意事项
错误总结:

    1、 在启动tracker节点mogilfsd服务的时候,一直启动不起来,pid文件目录也正常,但就是启动不起来。
    解决:最后发现是数据库连接的问题,在数据库中创建的用户,远程登录不上,一直显示拒绝,最后进入数据库中,刷新了用户权限:flush privilege; 就可以了。
    2、 在测试过数据库创建的用户可以正常的远程登录后,还是不能启动服务。
    解决:查看了pid文件生成的目录,显示没有问题,最后查看启动该进程的用户,显示没有该系统用户。又手动创建了该系统用户:useradd –r mogilefs

注意事项:

    1、 安装完各种包之后,检测是否自动创建了mogilefs该系统用户,如果没有该用户,需要手动创建。
    2、 创建完数据库中授权用户后,一定要刷新用户权限:flush privilege; 并测试看是否能够远程登录。
    3、 查看pid生成目录是否存在:ll –d /var/run/mogilefsd/,并查看该目的所属人是否是mogilefs。如果不是需要在启动服务前创建该目录,并更改所属人和所属组为mogilefs
    4、 在tracker的配置文件中,监听7001的IP地址在本机上一定要存在,否则,启动不起来。
    5、 在storage节点上启动之前一定要确保配置文件中指定的数据存放目录存在,并且目录所属人和所属组是mogilefs。
    6、 在storage节点上创建的设备dev的所属人和所属组也是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-421180-1-1.html 上篇帖子: Linux分布式存储之——Mogilefs 下篇帖子: 基于mogilefs实现分布式存储
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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