Nginx反代Mogilefs分布式储存示例详解

一、分布式存储系统简介

随着信息技术不断的发展,给我们带来便利的同时,不断增加的数据量级、信息之间的连接关联越来越复杂、数据访问的并发量日益增加对I/O的要求越来越高、数据类型越来越复杂等难题也成为信息技术继续高速发展亟需解决的难题。分布式存储系统的出现在很大程度上解决了以上大部分难题。

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

分布式存储系统在接口类型上可分为通用分布式储存和专用分布式储存。通用分布式储存是指没有文件系统接口,需要通过API接口进行访问;专用分布式储存也称为分布式文件系统,它们一般都会有文件系统接口,可以直接挂载。通用分布式储存有mogilefs、fastdfs等,专用分布式储存系统有moosefs等。

二、Mogilefs

MogileFS是一个开源的分布式文件存储系统,MogileFS适用于存储海量小文件的工作场景,由LiveJournal旗下的Danga Interactive公司开发,该团队开发了包括 Memcached、MogileFS、Perlbal 等多个知名的开源项目。

1.Mogilefs架构图:

Nginx反代Mogilefs分布式储存示例详解

2.组成Mogliefs的组件:

1.Trackers(mogilefsd):Mogliefs的核心组件,主要功能是(Replication)节点文件复制、(Deletion)文件删除、(Query)元数据查询、(Monitor)健康监测、(Reaper)储存失败重置等等。它通常称为元数据服务器,但它不会去储存元数据,而是将元数据储存在如MySQL这一类的数据库中。为保证架构的可靠性,Trackers一般有多个。Trackers可看作是一个旁挂式代理,只负责处理元数据信息。

2.数据库:数据库用来存放Mogliefs的元数据,而由Trackers来管理数据。因此通常建议做HA。

3.mogstored(储存节点):实际文件存放的地方。通常会将实际文件保存至少两份副本。

3.示例演示拓扑图

在三个节点同时安装Trackers和mogstored,选择其中一个节点安装MySQL。在生产环境最好是能单独将MySQL部署并且做主从复制。Trackers和mogstored也可以分开部署在不同节点上,这些都需要根据实际的生产环境来决定。这里主要是演示mogilefs,不做MySQL主从复制演示。若想要Mogilefs能挂载,可以用FUSE来实现。

需要注意的是:mogilefs存储的文件URL很特殊(后面会解释mogilefs文件名生产的过程),如存储一张时文件URL可能会是类似6060/0000/0000/0000/00000021.jpg这样的格式,对用户来讲就不太友好,用户可能需要直观的类似image.hello.com/21.jpg这样的URL。所以通常会使用Nginx来反代Mogilefs。

Nginx反代Mogilefs分布式储存示例详解

4.系统环境与安装

Mogilefs是一个相对较年代较久但成熟的分布式储存,考虑到可能在Centos7上会出现兼容问题,这里Centos6来演示。

操作系统:CentOS release 6.6

Mogilefs:2.46

nginx:1.10

mysql:5.1

IP分配:

n1:192.168.29.111,n2:192.168.29.112,n3:192.168.29.113,n4:192.168.29.114

结构如上图所示。

1.在n1节点上安装MySQL、mogilefsd、mogstored,并将n1配置为Trackers、Storage Node

MySQL直接用yum安装。

?

安装Mogilefs的Trackers和Storage Node组件,安装时一定要安装Perl相关的依赖包,依赖包有:

?

上述依赖包一定要安装后才能安装Mogilefs。安装组件:

?

配置MogileFS-Server-mogilefsd:

? ?

修改完配置后,进入数据库创建一个可以远程连接的root用户,或者使用mogdbsetup初始化数据库:

? ?

初始化完成后可以在MySQL中看到创建好的mogilefs库以及里面的表:

Nginx反代Mogilefs分布式储存示例详解

启动mogilefs并确认7001端口处于监听状态:

?

注:可以在n2、n3节点都安装Trackers服务,从而消除单点故障风险也能平均I/O压力。

3.在n1上配置Storage Node

Storage Node配置文件路径为/etc/mogilefs/mogstored.conf:

?

创建数据存储目录并修改属组和属主为mogilefs:

?

启动mogstored,查看进程是否正常启动端口是否监听:

?

4.按照n1的步骤在节点n2、n3上安装Mogilefs,并将n1上的配置文件复制到n2、n3。

?

启动mogstored服务并确认监听:

?

5.用在n1上用mogadm命令将所有节点整合成集群。

添加存储节点,并检查:

? ?

Nginx反代Mogilefs分布式储存示例详解

若想让mogilefs集群中的存储被识别成不同设备,需要在创建的/mogliefs/mogdata目录下再创建名为dev*的目录,使每个节点被当做存储设备使用。mogilefs是将冗余存储在不同设备中的,每一个节点都应该被识别为不同的设备。

在n1、n2、n3上的/mogliefs/mogdata/目录下分别创建dev1,dev2,dev3目录,并在Trackers上添加设备:

?

Nginx反代Mogilefs分布式储存示例详解

6.创建Domain和Class

在Mogilefs中,在多个节点上为了方便文件副本管理,通常在设备中不会以文件为单位进行管理,而是以class(类)做管理,复制删除等操作都是以class为最小单位进行的。每个class中可以放很多文件,class的容积也不是固定的。

在Mogilefs的存储空间中,所有数据文件都在同一平面,所以不能有同名的情况发生,这样会影响Mogilefs的灵活性,所以引入了Domain(名称空间)的概念。Domain包含Class,在不同的Domain中可以有相同的文件名。

Nginx反代Mogilefs分布式储存示例详解

?

Nginx反代Mogilefs分布式储存示例详解

可以自定义Class的属性,格式为:mogadm class add <domain> <class> [opts]

?

Nginx反代Mogilefs分布式储存示例详解

7.使用Mogilefs做上传下载测试

Mogilefs可以用自建的API接口进行交互,其中有很多用于管理存储数据的命令。例如上传数据命令为mogupload,查看数据命令为mogfileinfo等。

例:测试将文件/test/123.png上传至Mogilefs集群(文件事先在本地准备好):

?

Nginx反代Mogilefs分布式储存示例详解

Nginx反代Mogilefs分布式储存示例详解

至此,Mogilefs分布式储存集群就搭建完成了,但若想要使客户端能与之通信,就需要在接口上进行编程,这样就很麻烦了,好在我们能用Nginx做反代进行通信。下面来演示Nginx反代Mogilefs的步骤。

5.Nginx反代Mogilefs

1.打开n2,n3的mogilefsd服务,将3个节点全部设置为Trackers(保证配置文件与n1相同):

?

2.在n4节点编译安装Nginx

安装依赖包:

?

下载Nginx编译安装包nginx-1.10.3.tar.gz与Nginx_Mogilefs模块nginx_mogilefs_module-1.0.4.tar.gz并展开:

? ? ?

  添加nginx用户并启动nginx:

?

3.配置Nginx

单Trackers示例:

?

多Trackers示例:

在nginx配置中的http配置段添加调度模块:

?

在nginx配置中的server配置段添:

?

重新启动nginx,并通过nginx访问之前上传的图片:

Nginx反代Mogilefs分布式储存示例详解

总结:

在上传文件时遇到一个错误提示MogileFS::Backend: couldn't connect to mogilefsdbackend at /usr/local/share/perl/5.8.4/Client.pm line 282,这是由于mogilefsd服务于MySQL无法连接造成的,检查它们之间的连接情况就能发现错误所在。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。

原文链接:http://www.cnblogs.com/readygood/p/9899230.html



相关文章
推荐文章
热门文章

微信公众号推荐

相关推荐