MogileFS分布式文件系统

内容概述

1、分布式文件系统介绍

2、CAP理论

3、常见分布式文件系统介绍

4、MogileFS详细介绍

4、1MogileFS组成

4、2MogileFS特性

5、MogileFS实现

5、1 node1配置Mariadb(过程略)

5、2 node1配置tracker

5、3 node2配置storage

5、4  node3配置storage

5、5 配置分布式集群

5、5、1 添加主机

5、5、2 添加设备

5、5、3 定义domain和class

5、6  验证分布式集群

6、MogileFS高可用

6、1 node1配置storage

6、2 node2配置tracker

6、3 node3配置tracker

6、4 验证MogileFS高可用

7、nginx反向代理MogileFS

7、1 安装nginx

7、2 设置反向代理

7、3 设置负载均衡

1、分布式文件系统介绍

定义:分布式存储系统是大量普通PC服务器通过Internet互联,对外作为一个整体提供存储服务

特性

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

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

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

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

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

 2、CAP理论

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

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

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

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

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

3、常见的分布式文件系统介绍

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

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

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

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

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

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

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

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

备注:此处介绍不是很详细,如果需要详细了解,可以参考百度百科

4、MogileFS详细介绍

4、1 MogileFS组成

MogileFS组成的三个组件:

tracker:追踪元数据   元数据访问路由器

database:存储元数据

storage:存储数据

traker:

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

replication:节点间文件的复制;

deletion:删除文件

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

reaper:在存储失败后将文件复制请求重新放置于队列中

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

database:

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

mogilefs专门提供了数据结构管理工具mogdbsetup;

storage:

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

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

client:

客户端用于与mogilefs建立通信,完成数据存取;

架构拓扑如下所示:

4、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:最小复制单元

文件属性管理器

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

5、MogileFS实现

环境拓扑

IP地址配置情况:

Node1:IP172.16.4.100

Node2:IP172.16.4.101

Node3:IP172.16.4.102

系统环境:

[[email protected] ~]# cat/etc/redhat-release
CentOS release 6.6 (Final)
[[email protected] ~]# uname -r
2.6.32-504.el6.x86_64
[[email protected] ~]# uname -m
x86_64

5、1 Node1配置Mariadb(过程略)

Mariadb配置root用户允许远程连接

MariaDB [(none)]> GRANT ALL ON *.* TO‘root‘@‘172.16.%.%‘ IDENTIFIED BY ‘mogilefs‘ WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;

5、2 Node1配置tracker

安装如下软件包,虽然只是配置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             #工具包
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               #依赖包

安装命令如下

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

由于node1是做tracker的,用到的主要程序包是MogileFS-Server-mogilefsd,其他和配置tracker没有太大关系,MogileFS-Server-mogilefsd生成的主要文件

[[email protected] ~]# rpm -ql MogileFS-Server-mogilefsd
/etc/mogilefs/mogilefsd.conf    #主配置文件
/etc/rc.d/init.d/mogilefsd      #启动脚本
/usr/bin/mogdbsetup              #数据库初始化工具
/usr/bin/mogilefsd               #mogilefsd主进程

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

 [[email protected]~]# mogdbsetup --dbhost=172.16.4.100 --dbrootuser=root --dbrootpass=mogilefs  --dbname=mogdb --dbuser=moguser--dbpass=mogpass
 
This will attempt to setup or upgrade your MogileFSdatabase.
It won‘t destroy existing data.
Run with --help for more information.  Run with --yes to shut up these prompts.
 
Continue? [N/y]: y
 
Create/Upgrade database name ‘mogdb‘? [Y/n]: y
 
Grant all privileges to user ‘moguser‘, connectingfrom anywhere, to the mogilefs database ‘mogdb‘? [Y/n]: y

补充:可以使用 --yes选项回答各种询问为yes。

验证初始化Mariadb:登录数据库查看mogdb数据库自动创建,而且库中自动创建了一些表

MariaDB [(none)]> show databases;
+--------------------+
| Database          |
+--------------------+
| information_schema |
| mogdb             |
| mysql             |
| performance_schema |
| test              |
+--------------------+
5 rows in set (0.01 sec)
 
MariaDB [(none)]> use mogdb;
Database changed
MariaDB [mogdb]> show tables;
+----------------------+
| Tables_in_mogdb      |
+----------------------+
| checksum             |
| class                |
| device               |
| domain               |
| file                 |
| file_on              |
| file_on_corrupt      |
| file_to_delete       |
| file_to_delete2      |
| file_to_delete_later |
| file_to_queue        |
| file_to_replicate    |
| fsck_log             |
| host                 |
| server_settings      |
| tempfile             |
| unreachable_fids     |
+----------------------+

修改mogilefsd.conf文件设置连接Mariadb的用户名和密码,mogilefsd监听的地址和端口,启用的一些线程

[[email protected] ~]# vim /etc/mogilefs/mogilefsd.conf
db_dsn = DBI:mysql:mogdb:host=172.16.4.100         #DBI:perl连接mysql的驱动,mysql数据库类型,mogdb连接的数据库,host不解释
db_user = moguser                                      #连接数据库的用户
db_pass = mogpass                                      #连接数据库的密码
listen = 172.16.4.100:7001                            #mogilefsd监听的地址
conf_port = 7001                                       #监听的端口
query_jobs = 10                                        #启用的请求线程,为10表示只能并发10个客户端;注意客户端不是用户访问量,而是连接使用mogilefsd的服务器
delete_jobs = 1                                        #用于删除的线程
replicate_jobs = 5                                     #用于作复制的线程数量
reaper_jobs = 1                                        #在存储失败后将文件复制请求重新放置于队列中的线程

设置完成启动服务并验证7001端口已经启动

[[email protected] ~]# service mogilefsd start
[[email protected] ~]# netstat -lntp | grep 7001
tcp       0      0 172.16.4.100:7001           0.0.0.0:*                   LISTEN      39558/mogilefsd

5、3 node2配置storage

安装如下软件包,配置storage主要用到的软件包是MogileFS-Server-mogstored

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  #storage
MogileFS-Utils-2.19-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               #依赖包

安装命令如下

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

Mogstored依赖与perl-IO-AIO这个包,需要额外安装,否则mogstored无法正常启动

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

MogileFS-Server-mogstored生成的文件

[[email protected] ~]# rpm -ql MogileFS-Server-mogstored
/etc/mogilefs/mogstored.conf    #主配置文件
/etc/rc.d/init.d/mogstored      #脚本文件
/usr/bin/mogautomount            #自动挂载的工具
/usr/bin/mogstored                #主程序

创建一个目录准备存储文件,并且设置属主和属组为mogilefs,否则tracker节点会无法读取数据

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

将存储目录挂载到单独的分区

[[email protected] ~]# vim /etc/fstab
/dev/sda4               /mogstore               ext4    defaults        0 0
[[email protected] ~]# mount -a
[[email protected] ~]# mount
/dev/sda4 on /mogstore type ext4 (rw)

在存储目录创建设备编号目录,注意此目录各个节点不能重名

[[email protected] ~]# mkdir /mogstore/dev2

修改配置文件

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

设置完成启动服务,并验证端口是否正常启动

[[email protected] ~]# service mogstored start
[[email protected] ~]# netstat -lntp | egrep"7500|7501"
tcp       0      0 0.0.0.0:7500                0.0.0.0:*                   LISTEN      37119/mogstored    
tcp       0      0 0.0.0.0:7501                0.0.0.0:*                   LISTEN      37119/mogstored

5、4 node3配置storage

安装如下软件包

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  #storage
MogileFS-Utils-2.19-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               #依赖包

安装命令如下

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

Mogstored依赖与perl-IO-AIO这个包,所以需要额外安装

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

创建一个目录准备存储文件,并设置属主和属组为mogilefs

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

将存储目录挂载到单独的分区

[[email protected] ~]# vim /etc/fstab
/dev/sda4               /mogstore               ext4    defaults        0 0
[[email protected] ~]# mount -a
[[email protected] ~]# mount
/dev/sda4 on /mogstore type ext4 (rw)

在存储目录创建设备编号目录,注意此目录各个节点不能重名

[[email protected] ~]# mkdir /mogstore/dev3

修改配置文件

[[email protected] ~]# vim /etc/mogilefs/mogstored.conf
maxconns = 10000
httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501
docroot = /mogstore

设置完成启动服务,并验证端口是否正常启动

[[email protected] ~]# service mogstored start
[[email protected] ~]# netstat -lntp | egrep"7500|7501"
tcp       0      0 0.0.0.0:7500                0.0.0.0:*                   LISTEN      37119/mogstored    
tcp       0      0 0.0.0.0:7501                0.0.0.0:*                   LISTEN      37119/mogstored

5、5 配置分布式集群

查看MogileFS-Utils生成的命令,只列出常用的命令

[[email protected] ~]# rpm -ql MogileFS-Utils
/usr/bin/mogadm            #MogileFS管理工具,可以实现将mogstored加入到mogilefsd
/usr/bin/mogdelete        #删除文件
/usr/bin/mogfetch         #获取文件
/usr/bin/mogfileinfo      #查看文件
/usr/bin/mogupload         #上传文件

Mogadm命令的常用功能:

mogadm check             #状态检测

mogadm stats             #显示MogileFS的状态统计信息

mogadm host ...         #管理主机

mogadm device ...       #管理设备

mogadm domain ...       #管理域

mogadm class ...        #管理类

mogadm slave ...        #管理复制

mogadm fsck ...         #文件系统检查和修复

mogadm rebalance ...   #重新均衡(MogileFS运行时间久了mogstored存储的数据量可能不一样,重新均衡一下各个节点的数据就差不多了)

mogadm settings ...    #设置文件复制数

说明:使用mogadm –help或者man mogadm可以查看mogadm命令的详细使用说明

5、5、1 添加主机

向集群中添加主机,将node2和node3添加到集群中

[[email protected] ~]# mogadm --trackers=172.16.4.100:7001host add node2 --ip=172.16.4.101 --status=alive
[[email protected] ~]# mogadm --trackers=172.16.4.100:7001host add node3 --ip=172.16.4.102 --status=alive

add:表示添加主机

node2:表示主机名,这个可以随便写

--ip:表示添加的主机地址

--status=alive:表示添加之后的状态为上线

添加完成查看主机列表已经有了主机

[[email protected] ~]# mogadm --trackers=172.16.4.100:7001host list
node2 [1]: alive
  IP:       172.16.4.101:7500
 
node3 [2]: alive
  IP:       172.16.4.102:7500

5、5、2 添加设备

节点虽然添加完成了,但是还不能存储数据,如果想存储数据需要追踪存储节点上面的设备

[[email protected] ~]# mogadm --trackers=172.16.4.100:7001device add node2 2
[[email protected] ~]# mogadm --trackers=172.16.4.100:7001device add node3 3

add:表示添加设备

Node2:节点名称,必须和添加主机时保持一致

2:添加的dev设备编号

添加完成查看device列表就已经出现了设备

[[email protected] ~]# mogadm --trackers=172.16.4.100:7001device list
node2 [1]: alive
                   used(G)    free(G)   total(G) weight(%)
   dev2:   alive     0.042     27.866     27.908        100
 
node3 [2]: alive
                   used(G)    free(G)   total(G) weight(%)
   dev3:   alive     0.042     27.866     27.908        100

补充:一开始不小心将node3节点的设备,添加为了dev4,然后由添加了dev3,结果node3就出现了dev3和dev4两个设备

[[email protected] ~]# mogadm --trackers=172.16.4.100:7001device add node3 4
[[email protected] ~]# mogadm --trackers=172.16.4.100:7001device list
node2 [1]: alive
                   used(G)    free(G)   total(G) weight(%)
   dev2:   alive     0.000      0.000      0.000        100
 
node3 [2]: alive
                   used(G)    free(G)   total(G) weight(%)
   dev3:   alive     0.042      27.866      27.908        100
   dev4:   alive     0.042      27.866     27.908        100

删除方法:这里没有deleted命令,需要使用mark将dev4标记为dead状态就删除了

[[email protected] ~]# mogadm --trackers=172.16.4.100:7001device mark node3 4 dead

5、5、3 定义domain和class

定义名称空间(domain):

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

domain:domain的名字

class:domain创建完成之后会自动创建一个class,所有的文件都存放在class中

mindevcount:最小复制单元;为2表示上传的文件最少存储两个副本

replpolicy:复制策略,MultipleHosts()表示多主机实现复制,这里不用管为默认即可

hashtype:class在命名时是使用哈希进行计算的,这里表示哈希算法,NONE表示没有使用哈希算法

定义class:

由于创建domain会自动创建class,所以会出现class

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

新添加一个class

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

5、6 验证分布式系统

这个时候分布式文件系统就搭建好了,可以使用mogupload命令上传文件测试

[[email protected] ~]# mogupload--trackers=172.16.4.100:7001 --domain=images --key=‘/1.jpg‘--file=‘/usr/share/backgrounds/centos_1920x1200_logoonly.jpg‘

--domain=images:表示存储到images这个domain中

--key=‘/1.jpg‘:访问文件的URL地址

--file:本地上传的文件

查看上传文件的信息,在node1和node2这两个节点都有了文件

[[email protected] ~]# mogfileinfo--trackers=172.16.4.100: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.4.102:7500/dev3/0/000/000/0000000002.fid
 -http://172.16.4.101:7500/dev2/0/000/000/0000000002.fid

这个时候分别访问下面的两个URL就可以出现刚刚上传的图片了

- http://172.16.4.102:7500/dev3/0/000/000/0000000002.fid

-http://172.16.4.101:7500/dev2/0/000/000/0000000002.fid

刚刚上传了一个图片,这次上传一个文本文件试试

[[email protected] ~]# mogupload--trackers=172.16.4.100:7001 --domain=conffiles --key=‘/configures/fstab‘--file=‘/etc/fstab‘
[[email protected] ~]# mogfileinfo --trackers=172.16.4.100:7001--domain=conffiles --key=‘/configures/fstab‘
- file: /configures/fstab
    class:              default
 devcount:                    2
   domain:            conffiles
      fid:                    3
      key:    /configures/fstab
   length:                  921
 -http://172.16.4.102:7500/dev3/0/000/000/0000000003.fid
 -http://172.16.4.101:7500/dev2/0/000/000/0000000003.fid

分别访问两个URL路径,查看文件都可以正常显示

不光可以上传文件,还可以下载文件,使用mogfetch指明domain是那个,key路径,使用file在指明下载之后存储到本地的那里即可

[[email protected] ~]# mogfetch--trackers=172.16.4.100:7001 --domain=conffiles --key=‘/configures/fstab‘--file=‘/root/fstab‘
[[email protected] ~]# ll /root/fstab
-rw-r--r-- 1 root root 921 May 27 06:34 /root/fstab

6、Mogilefsd高可用

Node1,node2,node3这三个节点否启动mogilefsd和mogstored,使客户端无论访问那一个节点都可以获取到数据,而且replpolicy设置最少2份,计算是一台节点故障下线其他节点也可以继续提供服务。

6、1 Node1配置mogstored

手动安装mogstored的依赖包,如果不安装此包,启动mogstroed时端口不会正常启动

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

创建存储目录并挂载

[[email protected] ~]# mkdir /mogstore
[[email protected] ~]# vim /etc/fstab
/dev/sda4               /mogstore               ext4    defaults        0 0
[[email protected] ~]# mount -a
[[email protected] ~]# mount
/dev/sda4 on /mogstore type ext4 (rw)

创建设备目录并授权mogilefs用户

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

修改配置文件,指定存储目录位置

[[email protected] ~]# vim /etc/mogilefs/mogstored.conf
maxconns = 10000
httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501
docroot = /mogstore

启动服务

[[email protected] ~]# service mogstored start
[[email protected] ~]# netstat -lntp | egrep"7500|7501"
tcp       0      0 0.0.0.0:7500                0.0.0.0:*                   LISTEN      41087/mogstored    
tcp       0      0 0.0.0.0:7501                0.0.0.0:*                   LISTEN      41087/mogstored

配置完成之后使用mogadm命令将自己也添加到集群中

[[email protected] ~]# mogadm --trackers=172.16.4.100:7001host add node1 --ip=172.16.4.100 --status=alive
[[email protected] ~]# mogadm --trackers=172.16.4.100:7001host list
node2 [1]: alive
  IP:       172.16.4.101:7500
 
node3 [2]: alive
  IP:       172.16.4.102:7500
 
node1 [3]: alive
  IP:       172.16.4.100:7500

添加node1的设备到集群中

[[email protected] ~]# mogadm --trackers=172.16.4.100:7001device add node1 1
[[email protected] ~]# mogadm --trackers=172.16.4.100:7001device list
node2 [1]: alive
                   used(G)    free(G)   total(G) weight(%)
   dev2:   alive     0.043     27.865     27.908        100
 
node3 [2]: alive
                   used(G)    free(G)   total(G) weight(%)
   dev3:   alive     0.043     27.865     27.908        100
 
node1 [3]: alive
                   used(G)    free(G)   total(G) weight(%)
   dev1:   alive     0.042     27.866     27.908        100

由于node2和node3节点需要配置mogilefsd需要把node1上面的配置文件直接拷贝过去,省的node2和node3节点修改

[[email protected] ~]# scp /etc/mogilefs/mogilefsd.conf172.16.4.101:/etc/mogilefs/
[[email protected] ~]# scp /etc/mogilefs/mogilefsd.conf 172.16.4.102:/etc/mogilefs/

6、2 Node2配置mogilefsd

由于node1节点已经将配置文件拷贝过来了,所以直接修改配置文件的监听地址即可,其他选项无需修改

[[email protected] ~]# vim /etc/mogilefs/mogilefsd.conf
listen = 172.16.4.101

设置完成启动服务即可

[[email protected] ~]# service mogilefsd start
[[email protected] ~]# netstat -lnt | grep 7001
tcp       0      0 172.16.4.101:7001           0.0.0.0:*                   LISTEN

6、3 Node3配置mogilefsd

同node2只需要修改监听地址

[[email protected] ~]# vim /etc/mogilefs/mogilefsd.conf
listen = 172.16.4.102

启动服务即可

[[email protected] ~]# service mogilefsd start
[[email protected] ~]# netstat -lnt | grep 7001
tcp       0      0 172.16.4.102:7001           0.0.0.0:*                   LISTEN

6、4 验证MogileFS的高可用

在三个节点各自配置好了tracker和storage之后高可用的MogileFS就配置完成了。

验证方法如下:无论使用mogadm连接那一个节点,都可以看到节点中包含了三个主机

[[email protected] ~]# mogadm --trackers=172.16.4.100:7001host list
node2 [1]: alive
  IP:       172.16.4.101:7500
 
node3 [2]: alive
  IP:       172.16.4.102:7500
 
node1 [3]: alive
  IP:       172.16.4.100:7500
 
[[email protected] ~]# mogadm --trackers=172.16.4.101:7001host list
node2 [1]: alive
  IP:       172.16.4.101:7500
 
node3 [2]: alive
  IP:       172.16.4.102:7500
 
node1 [3]: alive
  IP:       172.16.4.100:7500
 
[[email protected] ~]# mogadm --trackers=172.16.4.102:7001host list
node2 [1]: alive
  IP:       172.16.4.101:7500
 
node3 [2]: alive
  IP:       172.16.4.102:7500
 
node1 [3]: alive
  IP:       172.16.4.100:7500

上传文件验证,由于只是设置两个复制份数,所以上传的文件会随机出现在两个节点中。

[[email protected] ~]# mogupload--trackers=172.16.4.100:7001,172.16.4.101:7001,172.16.4.102:7001--domain=conffiles --key=‘/issue‘ --file=‘/etc/issue‘
[[email protected] ~]# mogfileinfo --trackers=172.16.4.100:7001,172.16.4.101:7001,172.16.4.102:7001--domain=conffiles --key=‘/issue‘
- file: /issue
    class:              default
 devcount:                    2
   domain:            conffiles
      fid:                    7
      key:               /issue
   length:                  103
 -http://172.16.4.100:7500/dev1/0/000/000/0000000007.fid
 -http://172.16.4.101:7500/dev2/0/000/000/0000000007.fid

7、使用nginx反向代理MogileFS

拓扑图:

Nginx IP地址:172.16.4.10

系统环境和node节点一致

7、1 安装nginx

Nginx默认不支持MogileFS的配置,需要在编译nginx时指定nginx_mogilefs_module模块才可以代理MogileFS

nginx的mogilefs模块官方配置地址

http://www.grid.net.ru/nginx/mogilefs.en.html

编译安装nginx

[[email protected] ~]# useradd nginx
[[email protected] ~]# mkdir /var/tmp/nginx/client -p
[[email protected] ~]# yum -y install pcre-devel
[[email protected] ~]# tar xf nginx-1.6.2.tar.gz    
[[email protected] ~]# tar xf nginx_mogilefs_module-1.0.4.tar.gz   #编译nginx之前需要先解压出来,编译nginx的时候需要用
[[email protected] ~]# cd nginx-1.6.2

编译配置,这里需要指定MogileFS的模块位置

./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/    #编译时一定要使用这一项指明mogilefs模块的解压目录位置
make && make install

编译完成提供nginx启动脚本

[[email protected] ~]# cat /etc/init.d/nginx
#!/bin/sh
#
# nginx - this script starts and stops the nginxdaemon
#
# chkconfig:  - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse #              proxy and IMAP/POP3 proxy server
# processname: nginx
# config:     /etc/nginx/nginx.conf
# config:     /etc/sysconfig/nginx
# pidfile:    /var/run/nginx.pid
 
# Source function library.
. /etc/rc.d/init.d/functions
 
# Source networking configuration.
. /etc/sysconfig/network
 
# Check that networking is up.
[ "$NETWORKING" = "no" ]&& exit 0
 
nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)
 
NGINX_CONF_FILE="/etc/nginx/nginx.conf"
 
[ -f /etc/sysconfig/nginx ] && ./etc/sysconfig/nginx
 
lockfile=/var/lock/subsys/nginx
 
make_dirs() {
   # make required directories
  user=`nginx -V 2>&1 | grep "configure arguments:" | sed‘s/[^*]*--user=\([^ ]*\).*/\1/g‘ -`
  options=`$nginx -V 2>&1 | grep ‘configure arguments:‘`
   for opt in$options; do
       if [`echo $opt | grep ‘.*-temp-path‘` ]; then
          value=`echo $opt | cut -d "=" -f 2`
           if[ ! -d "$value" ]; then
              # echo "creating" $value
              mkdir -p $value && chown -R $user $value
           fi
       fi
   done
}
 
start() {
    [ -x$nginx ] || exit 5
    [ -f$NGINX_CONF_FILE ] || exit 6
    make_dirs
    echo -n$"Starting $prog: "
    daemon$nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval-eq 0 ] && touch $lockfile
    return$retval
}
 
stop() {
    echo -n$"Stopping $prog: "
    killproc$prog -QUIT
    retval=$?
    echo
    [ $retval-eq 0 ] && rm -f $lockfile
    return$retval
}
 
restart() {
   configtest || return $?
    stop
    sleep 1
    start
}
 
reload() {
   configtest || return $?
    echo -n$"Reloading $prog: "
    killproc$nginx -HUP
    RETVAL=$?
    echo
}
 
force_reload() {
    restart
}
 
configtest() {
  $nginx -t-c $NGINX_CONF_FILE
}
 
rh_status() {
    status$prog
}
 
rh_status_q() {
    rh_status>/dev/null 2>&1
}
 
case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
       rh_status_q || exit 0
        $1
        ;;
   restart|configtest)
        $1
        ;;
    reload)
       rh_status_q || exit 7
        $1
        ;;
   force-reload)
       force_reload
        ;;
    status)
       rh_status
        ;;
   condrestart|try-restart)
       rh_status_q || exit 0
           ;;
    *)
        echo$"Usage: $0{start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit2
esac

设置执行权限,并加入服务列表

[[email protected] ~]# chmod +x /etc/rc.d/init.d/nginx
[[email protected] ~]# chkconfig --add nginx

启动nginx服务

[[email protected] ~]# service nginx start
[[email protected] ~]# netstat -lntp | grep 80
tcp       0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      8841/nginx

7、2 设置反向代理

修改nginx配置文件添加一个location

        location /images/ {
            mogilefs_tracker172.16.4.100:7001;
            mogilefs_domainimages;
 
            mogilefs_pass {
                proxy_pass$mogilefs_path;
               proxy_hide_header Content-Type;
               proxy_buffering off;
            }

设置完成重启服务,配置生效

向存储中上传文件

[[email protected] ~]# mogupload --trackers=172.16.4.100:7001 --domain=images--key="2.jpg" --file="/root/2.jpg"
[[email protected] ~]# mogfileinfo --trackers=172.16.4.100:7001--domain=images --key="2.jpg"
- file: 2.jpg
     class:              default
  devcount:                    2
    domain:               images
       fid:                    8
       key:                2.jpg
    length:               150255
 -http://172.16.4.100:7500/dev1/0/000/000/0000000008.fid
 -http://172.16.4.102:7500/dev3/0/000/000/0000000008.fid

使用nginx访问/images/下的2.jpg,就可以看到刚刚上传的2.jpg文件

7、3 设置负载均衡

由于后端有3个tracker服务器,所以可以使用nginx的upstream实现负载均衡,配置方法如下所示:

  upstream mogtrackers {
      server 172.16.4.100:7001;
      server172.16.4.101:7001;
      server172.16.4.102:7001;
    }
 
server {
 省略内容……
       location /images/ {
           mogilefs_tracker mogtrackers;
           mogilefs_domain images;
 
           mogilefs_pass {
                proxy_pass $mogilefs_path;
               proxy_hide_header Content-Type;
               proxy_buffering off;
            }
        }
时间: 2024-10-19 22:46:16

MogileFS分布式文件系统的相关文章

Nginx+MogileFS分布式文件系统部署实验

实验要求 1.  部署mogilefs分布式文件系统 2.  nginx代理 实验环境 1.拓扑 2.网络地址规划 node1:172.16.76.10 nginx (centos6.8) node2:172.16.76.20 Trackers .storage Node   (centos7.2) node3:172.16.76.30 storage Node                   (centos7.2) node4:172.16.76.40 storage Node  (Mar

Mogilefs分布式文件系统-Keepalived+Nginx双主模型实现图片分布式存储、访问

一.分布式文件系统: 分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连.计算机通过文件系统管理.存储数据,单纯通过增加硬盘个数来扩展计算机文件系统的存储容量的方式,在容量大小.容量增长速度.数据备份.数据安全等方面的表现都差强人意. 分布式文件系统可以有效解决数据的存储和管理难题:将固定于某个地点的某个文件系统,扩展到任意多个地点/多个文件系统,众多的节点组成一个文件系统网络.每个节点可以分布在

分布式存储之MogileFS分布式文件系统简单应用

一.分布式存储原理: 分布式存储系统,是将数据分散存储在多台独立的设备上.传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系统性能的瓶颈,也是可靠性和安全性的焦点,不能满足大规模存储应用的需要.分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可靠性.可用性和存取效率,还易于扩展. 1.分布式文件系统的特点: • 节点间能相互通信 • 同一数据存储在多个节点上 • 数据空间平衡 • 具有容错能力 • 文件系统的

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

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

Linux之使用MogileFS分布式文件系统并使用nginx实现反向代理

MogileFS是一套高效的文件自动备份组件,由Six Apart开发,广泛应用在包括LiveJournal等web2.0站点上. MogileFS的特性: 工作在应用层,无单点,自动文件复制(复制的最小单位是class,而不是文件),传输中立且使用nfs或者http协议进行传输. MogileFS的结构组成: tracker:是mogilefs的核心,是一个调度器,通过数据库来保存元信息,包括daemon,class,host等信息,主要职责:监控后端mogstore节点,并指示store节点

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:是一套分布式文件存储的解决方案,它不需要特殊的核心组件.无单点失败.自动的文件复制.比RAID好多了.传输中立,无特殊协议(客户端可以通过NFS或HTTP来和MogileFS通信).简单的命名空间.不用共享任何东西.不需要RAID.不会碰到文件系统本身的不可知情况 等等优点. server端由mogilefsd和mogstored两个程序组成,mogilefsd既tracker,用来存数全局元数据放在数据库中,mogstored既存储节点. 实验目的: 实现mogilefs分布

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

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

分布式文件系统 ~MogileFS~

  一.分布式文件系统 分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连,也就是集群文件系统,可以支持大数量的节点以及PB级的数量存储.相对地,在一个分享的磁盘文件系统中,所有节点对数据存储区块都有相同的访问权,在这样的系统中,访问权限就必须由客户端程序来控制.分布式文件系统可能包含的功能有:透通的数据复制与容错.也就是说,即使系统中有一小部份的节点脱机,整体来说系统仍然可以持续运作而不会有数据