分布式文件存储系统 mogilefs 的使用(1)


一、mogilefs简介
       mogilefs是一种分布式存储(不可挂载,通过API调用或专门客户端)的解决方案,可存储海量图片、静态文件。
       mogilefs的相关程序是用perl语言编写,元数据存储在关系型数据库中(国内有人用C语言将mogilefs重写的程序叫做FastDFS,后者的元数据是存储在内存中的)


mogilefs的基本组成结构:
     (1) tracker:追踪器,从database中追踪用户请求数据的元数据
            与客户端通过http协议通信,RESTful风格。
            提供mogilefsd(守护进程),主要职责包括:
                 ① replication:节点间文件的复制
                 ② deletion:删除文件
                 ③ queryworker:响应客户请求的文件元数据访问请求
                 ④ reaper:在存储失败后将文件复制请求重新放置于队列中
                 ⑤ monitor:监测主机和设备的健康状态
  
      (2) database:
              存储mogilefs的元数据(存储数据的内容、大小、存储的节点等非数据内容信息),一般使用MySQL;建议使用冗余方案以保证其可用性(如MMM,MHA)
             mogilefs专门提供了数据结构管理工具mogdbsetup(功用:初始化MySQL、管理元数据)
 
       (3) storage:存储数据,数据副本冗余量默认是2个(可修改)
              mogstored(进程名),一个准备停当的mogstored节点可通过mogadm命令添加至现在的集群中;
              存储节点需要定义“设备(dev)”用作存储空间:每个“设备”在当前集群都需要通过一个唯一的DevID来标识;
        (4)client:
              客户端用于与mogilefs建立通信,完成数据存取;

            wKiom1WOxgGivK2ZAAGTlCiFZ60793.jpg   


mogilefs特性:
         (1)工作于应用层:无需特殊核心组件;
         (2)无单点;
         (3)自动完成文件复制;
           (由tracker指挥storage自动完成)
         (4)传输无需特殊协议(使用http或nfs);
         (5)使用简单名称空间机制来完成复制;
         (6)不在任何节点之间共享任何数据;
         (7)non-RAID
         (8)不能追加写、随机写
         (9)Tracker Client传输(Mogilefsd),管理数据复制、删除、查询、修复以及监控
         (10)数据通过HTTP/WebDAV服务上传到Storage node(mogstored)
         (11)MySQL存储MofileFS元数据(命名空间、位置)

mogilefs所存储数据的存储结构:
         ① domain: name space,命名空间 ,key的名字空间
          一个mogilefs可以有多个domain,是一种路径映射,类似于目录,同一个domain内key(文件名)唯一,不同domain内的key可以相同
          实际应用中可以将不同的类别文件存储在不同的domain中
         ② class: 最小复制单元


    定位文件: 先定位 domain,再定位 fid
    一个domain内 可以有多个class,是最小复制单位、最小调度单元,是多个文件合起来组成的。


本次试验架构:


             wKioL1WOyCuAgZjSAAE9C3yQUh0121.jpg


配置服务顺序:
 node1上安装mariadb-5.5.43-linux-x86_64-->在node1、node2、node3上安装tracker --> 在node1、node2、node3上安装mogstored --> 在node2上安装nginx做反向代理


本次试验只是做mogilefs的练习,未对元数据的存储做高可用。


对mariadb做高可用参考:
http://ctrry.blog.51cto.com/9990018/1658665
参考架构可以如下:


            wKiom1WOxn_xcK2EAAGi-2qJI2o570.jpg


二、mariadb数据库及分区及mogstored专用数据存储分区的准备


(一)准备磁盘分区:


在node1、node2、node3上执行下面创建新分区的步骤:

# fdisk /dev/sda
 ……
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26        7859    62914560   8e  Linux LVM
/dev/sda4            7859       14386    52435161    5  Extended
/dev/sda5            7859        9164    10489414+  8e  Linux LVM          10G
/dev/sda6            9165       10470    10490413+  8e  Linux LVM         10G
# partx -a /dev/sda
# partx -a /dev/sda


# bash mogilefs.sh
 

 #!/bin/bash
 #
 pvcreate /dev/sda5
 vgcreate myvg5 /dev/sda5
 lvcreate -L 10G -n maria myvg5
 mke2fs -t ext4 -L MARIA /dev/myvg5/maria
 mkdir -p /mydata
 mkdir -p /mogstore
 
 pvcreate /dev/sda6
 vgcreate myvg6 /dev/sda6
 lvcreate -L 10G -n mogstore myvg6
 mke2fs -t ext4 -L MOGSTORE /dev/myvg6/mogstore
 
 echo "LABEL=MARIA             /mydata                 ext4    defaults        0 0" >> /etc/fstab
 echo "LABEL=MOGSTORE          /mogstore                  ext4    defaults        0 0" >> /etc/fstab
 
 mount -a
 mount


 
不安装mariadb的节点上可以将少创建一个分区


(二)在node1上安装mariadb

 # lftp 172.16.0.1/pub/Sources/sources/mariadb
 lftp 172.16.0.1:/pub/Sources/sources/mariadb> get mariadb-5.5.43-linux-x86_64.tar.gz

# bash -x mariainstall.sh
脚本内容如下:
 

 #!/bin/bash
 #
 groupadd -r -g 306 mysql
 useradd -r -g mysql -u 306 mysql
 
 tar xf mariadb-5.5.43-linux-x86_64.tar.gz -C /usr/local
 cd /usr/local
 ln -s /usr/local/mariadb-5.5.43-linux-x86_64 mysql
 chown -R root:mysql /usr/local/mysql/*
 
 cd mysql
 mkdir /mydata/data
 ./scripts/mysql_install_db --datadir=/mydata/data  --skip-name-resolve --basedir=/usr/local/mysql --user=mysql
 chown -R mysql:mysql /mydata
 
 cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
 
 mkdir /etc/mysql
 cp ./support-files/my-large.cnf /etc/mysql/my.cnf
 
 echo "export PATH=/usr/local/mysql/bin:$PATH" > /etc/profile.d/mysqld.sh
 . /etc/profile.d/mysqld.sh
 
 ln -s /usr/local/mysql/include/ /usr/include/mysql
 
 vim /etc/mysql/my.cnf


  添加或修改下面4项:
  

thread_concurrency = 2
  datadir = /mydata/data
  skip_name_resolve = on
  innodb_file_per_table = on


  
# service mysqld start
# /usr/local/mysql/bin/mysql_secure_installation
根据提示操作,第一次是需要输入登录密码,但第一次是没有设置得,直接回车就OK了。


三、安装tracker和mogstored

安装mogilefs有两种方式:
一是自己寻找到mogilefs相应的rpm包安装;
二是连到perl.can网,直接通过“cpan> install module::name”形式自动编译安装。
此次采用rpm包安装。

在教室环境中,下载位置为:
# lftp 172.16.0.1:/pub/Sources/6.x86_64/mogilefs>
MogileFS-Server-2.46-2.el6.noarch.rpm    通行组件
MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm 提供tracker
MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm 提供mogstored
MogileFS-Utils-2.19-1.el6.noarch.rpm
perl-MogileFS-Client-1.14-1.el6.noarch.rpm  客户端调用API做开发时才需要的组件,被其他组件依赖
perl-Net-Netmask-1.9015-8.el6.noarch.rpm  实现机架感知能力组件
perl-Perlbal-1.78-1.el6.noarch.rpm  被依赖组件

下载后下面的程序包并全部安装:

[root@node1 mogilefs]# lsMogileFS-Server-2.46-2.el6.noarch.rpm  perl-MogileFS-Client-1.14-1.el6.noarch.rpm  MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm  perl-Net-Netmask-1.9015-8.el6.noarch.rpm  MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm  perl-Perlbal-1.78-1.el6.noarch.rpm  MogileFS-Utils-2.19-1.el6.noarch.rpm
[root@node1 mogilefs]# yum localinstall -y --nogpgcheck *.rpm
……
Installed:  MogileFS-Server.noarch 0:2.46-2.el6   MogileFS-Server-mogilefsd.noarch 0:2.46-2.el6      MogileFS-Server-mogstored.noarch 0:2.46-2.el6   MogileFS-Utils.noarch 0:2.19-1.el6      perl-MogileFS-Client.noarch 0:1.14-1.el6     perl-Net-Netmask.noarch 0:1.9015-8.el6    perl-Perlbal.noarch 0:1.78-1.el6                        
Dependency Installed:  perl-BSD-Resource.x86_64 0:1.29.03-3.el6      perl-DBD-MySQL.x86_64 0:4.013-3.el6      perl-Danga-Socket.noarch 0:1.61-5.el6     perl-IO-stringy.noarch 0:2.110-10.1.el6      perl-Sys-Syscall.noarch 0:0.23-1.el6                    
Complete!

在mogstored的节点上都需要安装上perl-IO-AIO程序包,这是被隐式依赖的包:
[root@node1 mogilefs]# yum install -y perl-IO-AIO

……
Installed:  perl-IO-AIO.x86_64 0:3.71-2.el6                                                                                      
Dependency Installed:  perl-common-sense.noarch 0:3.5-1.el6                                                                                 
Complete!

在node2和node3上也做 同样安装。
生成文件说明:
[root@node1 mogilefs]# rpm -ql MogileFS-Server

(contains no files)


[root@node1 mogilefs]# rpm -ql MogileFS-Server-mogilefsd

/etc/mogilefs/mogilefsd.conf  #tracker的配置文件
/etc/rc.d/init.d/mogilefsd #tracker服务脚本
/usr/bin/mogdbsetup # 初始化mariadb数据库的程序文件
/usr/bin/mogilefsd  #主程序文件
/usr/share/man/man1/mogilefsd.1.gz  #各种帮助文档文件
/usr/share/man/man3/MogileFS::Checksum.3pm.gz
……
/usr/share/perl5/vendor_perl/MogileFS/Checksum.pm  #各种相关的库文件
/usr/share/perl5/vendor_perl/MogileFS/Class.pm
……
/usr/share/perl5/vendor_perl/MogileFS/makedocs.pl
/var/run/mogilefsd   #运行时临时文件存放位置,如pid文件


[root@node1 mogilefs]# rpm -ql MogileFS-Utils

/usr/bin/mogadm # 对mogilefs做全面管理的程序,如健康检测、查看状态、主机管理、设备管理、domain管理、class管理、从节点管理、文件系统管理、数据均衡管理、设置mogilefs工作特性
/usr/bin/mogdelete #删除文件工具
/usr/bin/mogfetch #下载文件工具
/usr/bin/mogfiledebug
/usr/bin/mogfileinfo
/usr/bin/moglistfids # 列出所有fid文件工具
/usr/bin/moglistkeys
/usr/bin/mogrename #重命名工具
/usr/bin/mogstats # 
/usr/bin/mogtool
/usr/bin/mogupload #上传文件工具
/usr/share/man/man1/mogadm.1.gz # 各种帮助文档
……
/usr/share/man/man3/MogileFS::Utils.3pm.gz
/usr/share/perl5/MogileFS/Utils.pm # 所用到的模块文件

[root@node1 mogilefs]# rpm -ql MogileFS-Server-mogstored

/etc/mogilefs/mogstored.conf #配置文件
/etc/rc.d/init.d/mogstored  # 服务脚本
/usr/bin/mogautomount # 自动挂载程序
/usr/bin/mogstored #守护进程程序
/usr/share/man/man1/mogautomount.1.gz
/usr/share/man/man1/mogstored.1.gz
/usr/share/perl5/vendor_perl/Mogstored/ChildProcess #大量模块文件
/usr/share/perl5/vendor_perl/Mogstored/ChildProcess.pm
……
/usr/share/perl5/vendor_perl/Mogstored/TaskQueue.pm


[root@node1 mogilefs]# rpm -ql perl-MogileFS-Client

/usr/share/man #帮助文档
/usr/share/man/man3
/usr/share/man/man3/MogileFS::Client.3pm.gz
/usr/share/perl5/MogileFS/Admin.pm #提供所需的库文档
/usr/share/perl5/MogileFS/Backend.pm
/usr/share/perl5/MogileFS/Client.pm
/usr/share/perl5/MogileFS/ClientHTTPFile.pm
/usr/share/perl5/MogileFS/NewHTTPFile.pm

[root@node1 mogilefs]# rpm -ql perl-Perlbal

/usr/share/man/man3 # 提供大量帮助文档
……
/usr/share/man/man3/Perlbal::Util.3pm.gz
/usr/share/perl5/Perlbal.pm  # 提供大量模块文件
/usr/share/perl5/Perlbal/AIO.pm
……
/usr/share/perl5/Perlbal/ManageCommand.pm
/usr/share/perl5/Perlbal/Manual
/usr/share/perl5/Perlbal/Manual.pod
/usr/share/perl5/Perlbal/Manual/Configuration.pod
……
/usr/share/perl5/Perlbal/Manual/WebServer.pod
/usr/share/perl5/Perlbal/Plugin
/usr/share/perl5/Perlbal/Plugin/AccessControl.pm
……
/usr/share/perl5/Perlbal/Plugin/XFFExtras.pm
/usr/share/perl5/Perlbal/Pool.pm
/usr/share/perl5/Perlbal/ReproxyManager.pm
/usr/share/perl5/Perlbal/Service.pm
/usr/share/perl5/Perlbal/Socket.pm
/usr/share/perl5/Perlbal/SocketSSL.pm
/usr/share/perl5/Perlbal/TCPListener.pm
/usr/share/perl5/Perlbal/Test
/usr/share/perl5/Perlbal/Test.pm
/usr/share/perl5/Perlbal/Test/WebClient.pm
/usr/share/perl5/Perlbal/Test/WebServer.pm
/usr/share/perl5/Perlbal/UploadListener.pm
/usr/share/perl5/Perlbal/Util.pm

四、tracker配置


tracker配置之前需要先配置好mariadb的对用户的授权,然后对数据库做初始化。
(一)数据库授权

[root@node1 ~]# mysql -uroot -h127.0.0.1 -p

Enter password: 

MariaDB [(none)]> grant all on *.* to 'root'@'172.16.20.%' identified by '123' with grant option;
Query OK, 0 rows affected (0.42 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.07 sec)

MariaDB [(none)]> \q

(二)初始化数据库
    

     查看帮助说明
[root@node1 ~]# mogdbsetup --help


根据自己需要选择参数,初始化数据库:
[root@node1 ~]# mogdbsetup --dbhost=172.16.20.50 --dbrootuser=root --dbrootpass=123 --dbname=mogdb --dbuser=moguser --dbpass=mogpass --yes
其中dbhost是远程主机的IP地址(需要远程主机设定了skip-name-resolve),dbroot和dbrootpass是远程主机的授权的允许远程登录数据库的账号和密码(上面刚授权的),dbname、dbuserdbpass是我们这次初始化需要创建的存储元数据的新数据库名称、使用用户、使用密码。


查看初始化创建的数据库:

# mysql -umoguser -h172.16.20.50 -p


            wKiom1WOxqWA3aBCAAJ_IfLAfwM530.jpg


(三)修改配置文件


[root@node1 ~]# cp /etc/mogilefs/mogilefsd.conf{,.bak}
[root@node1 ~]# vim /etc/mogilefs/mogilefsd.conf
 

# Enable daemon mode to work in background and use syslog采用守护进程模式运行于后台并使用syslog:
 daemonize = 1
 # Where to store the pid of the daemon (must be the same in the init script)
 pidfile = /var/run/mogilefsd/mogilefsd.pid
 # Database connection information
 # db_dsn = DBI:数据库类型:元数据数据库名:所在主机IP
 db_dsn = DBI:mysql:mogdb:host=172.16.20.50
 db_user = moguser
 db_pass = mogpass
 # IP:PORT to listen on for mogilefs client requests
 listen = 172.16.20.50:7001
 # Optional, if you don't define the port above.
 conf_port = 7001
 # 默认启动时的查询线程数,根据需要修改
 query_jobs = 10
 # 默认启动时的删除线程数,根据需要修改
 delete_jobs = 2
 # 默认启动时的复制线程数,根据需要修改
 replicate_jobs = 5
 # 默认启动时的reaper线程数,这个数值是不需要修改的
 # (you don't usually need to increase this)
 reaper_jobs = 1
 ……
 # Allow replication to use the secondary node get port,
 # if you have apache or similar configured for GET's
 #repl_use_get_port = 1  这个是有主从复制时需要设置的参数


      启动服务:
 [root@node1 ~]# service mogilefsd start
 Starting mogilefsd                                         [  OK  ]
 [root@node1 ~]# ss -tnl | grep 7001
 LISTEN     0      128            172.16.20.50:7001                     *:*   

五、mogstored的配置


(一)三个mogstored节点提供dev目录


[root@node1 mogilefs]# mkdir /mogstore/dev1
[root@node2 mogilefs]# mkdir /mogstore/dev2
[root@node3 mogilefs]# mkdir /mogstore/dev3


(二)三个节点上都修改mogstored的配置文件:


        只需要修改最后一行的文件存储位置为新建分区即可
# vim /etc/mogilefs/mogstored.conf

maxconns = 10000
httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501
docroot = /mogstore


        修改好配置文件后,查看是否能正常启动服务:
# service mogstored start

Starting mogstored                                         [  OK  ]


# ss -tnl | grep "750"

LISTEN     0      128                       *:7500                     *:*     
LISTEN     0      128                       *:7501                     *:*





你可能感兴趣的:(nginx,linux,mariaDB,mogilefs)