MogileFS基于Nginx反向代理实现分布式存储与访问

Posted 马哥Linux运维

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MogileFS基于Nginx反向代理实现分布式存储与访问相关的知识,希望对你有一定的参考价值。

前言

随着信息社会的发展,越来越多的信息被数据化,尤其是伴随着大数据时代的来临,数据呈爆炸式增长。传统存储在面对海量数据存储表现出的力不从心已经是不争的事实,例如:纵向扩展受阵列空间限制,横向扩展受交换设备限制,节点受文件系统限制等。而分布式存储的出现在一定程度上有效的缓解了这一问题,目前比较流行的分布式文件系统有:GFS、HDFS、GlusterFS、MooseFS、Lustre、TFS、MogileFS和FastDFS等,本文带来的是MogileFS基于nginx反向代理实现分布式存储与访问

相关介绍

分布式文件系统

分布式文件系统,顾名思义,就是分布式+文件系统。它包含这两个方面的内涵,从文件系统的客户使用的角度来看,它就是一个标准的文件系统,提供了一系列API,由此进行文件或目录的创建、移动、删除,以及对文件的读写等操作。从内部实现来看,分布式的系统则不再和普通文件系统一样负责管理本地磁盘,它的文件内容和目录结构都不是存储在本地磁盘上,而是通过网络传输到远端系统上。并且,同一个文件存储不只是在一台机器上,而是在一簇机器上分布式存储,协同提供服务。


MogileFS

MogileFS是一个开源的分布式文件系统,用于组建分布式文件集群,目前使用MogileFS的公司非常多,就国内而言如yupoo,digg,土豆,豆瓣,1号店, 大众点评,搜狗,安居客等。

MogileFS组成部分


server端:包括mogilefsd和mogstored两个程序。mogilefsd即tracker,它将一些全局信息保存在数据库里,例如:站点domain,class,host等。mogstored即存储节点,默认侦听在7500端口,接受客户端的文件备份请求。在安装完后,要运行mogadm工具将所有的存储节点注册到mogilefsd的数据库里,mogilefsd会对这些节点进行管理和监控。


utils(工具集):主要是MogileFS的一些管理工具,例如mogadm等。

客户端API:目前只有Perl API(MogileFS.pm)、php,用这个模块可以编写客户端程序,实现文件的备份管理功能,提供MogileFS.pm。


实现过程

理想架构

说明:因资源有限,本文主要讲解单点nginx和mariadb实现


实验拓扑

MogileFS基于Nginx反向代理实现分布式存储与访问

#系统环境:CentOS6.6

工作流程

①客户端向服务器端发送请求

②nginx通过调度将请求转达给其中一个mogilefs的tracker

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

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


mariadb配置

数据库安装不再赘述

授权准备


MariaDB [(none)]> grant all on *.* to 'root'@'172.16.%.%' identified by 'scholar';

Query OK, 0 rows affected (0.18 sec)

 

MariaDB [(none)]> grant all on mogilefs.* to 'moguser'@'172.16.%.%' identified by 'mogpass';

Query OK, 0 rows affected (0.09 sec)

 

MariaDB [(none)]> flush privileges;

Query OK, 0 rows affected (0.10 sec)


mogilefs配置

安装所需软件包

[root@node1 ~]# cd mogilefs/

[root@node1 mogilefs]# ls

MogileFS-Server-2.46-2.el6.noarch.rpm            Perlbal-1.78-1.el6.noarch.rpm

MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm  perl-MogileFS-Client-1.14-1.el6.noarch.rpm

MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm  perl-Net-Netmask-1.9015-8.el6.noarch.rpm

MogileFS-Utils-2.19-1.el6.noarch.rpm             perl-Perlbal-1.78-1.el6.noarch.rpm

[root@node1 mogilefs]# yum install MogileFS-* Perlbal-1.78-1.el6.noarch.rpm perl-* perl-IO-AIO -y


tracker配置

[root@node1 ~]# vim /etc/mogilefs/mogilefsd.conf

 

daemonize = 1

pidfile = /var/run/mogilefsd/mogilefsd.pid

db_dsn = DBI:mysql:mogilefs:host=172.16.10.211  #定义数据库名及主机

db_user = moguser                               #数据库用户名

db_pass = mogpass                               #数据库用户密码

conf_port = 7001

query_jobs = 10

delete_jobs = 1

replicate_jobs = 5

reaper_jobs = 1


mogstored配置

[root@node1 ~]# vim /etc/mogilefs/mogstored.conf 

 

maxconns = 10000                                #最大连接数

docroot = /mogdata                              #数据存放位置


将配置文件同步至另一节点

[root@node1 ~]# scp /etc/mogilefs/* node2:/etc/mogilefs/

mogilefsd.conf                                     100% 1463     1.4KB/s   00:00    

mogstored.conf                                     100%   88     0.1KB/s   00:00


创建设备挂载点

#最好将数据存放在独立磁盘设备中,这里就直接存放在本地了

[root@node1 ~]# mkdir /mogdata/dev1 -pv   #另一节点创建dev2

[root@node1 ~]# chown -R mogilefs.mogilefs /mogdata/

 

#两个节点都执行以上操作,另一节点创建为dev2


初始化数据库

[root@node1 ~]# mogdbsetup  --dbhost=172.16.10.211 --dbrootuser=root --dbrootpass=scholar 

--dbuser=moguser --dbpass=mogpass --dbname=mogilefs --yes

#在一个节点执行即可


查看是否执行成功

MogileFS基于Nginx反向代理实现分布式存储与访问


启动服务

[root@node1 ~]# service mogilefsd start

Starting mogilefsd                                         [  OK  ]

[root@node1 ~]# service mogstored start

Starting mogstored                                         [  OK  ]

 

#两个节点都启动


查看监听端口

MogileFS基于Nginx反向代理实现分布式存储与访问


添加节点

#在任一节点上执行

[root@node1 ~]# mogadm --trackers=172.16.10.123:7001 host add node1 --ip=172.16.10.123 --status=alive

[root@node1 ~]# mogadm --trackers=172.16.10.123:7001 host add node2 --ip=172.16.10.124 --status=alive


添加设备

[root@node1 ~]# mogadm --trackers=172.16.10.123:7001 device add node1 1

[root@node1 ~]# mogadm --trackers=172.16.10.123:7001 device add node2 2

 

#添加设备时所使用的设备ID号必须要/mogdata中的dev编号一致


进行状态检查

MogileFS基于Nginx反向代理实现分布式存储与访问


创建domain

[root@node1 ~]# mogadm --trackers=172.16.10.123:7001 domain add files

[root@node1 ~]# mogadm --trackers=172.16.10.123:7001 domain add html

[root@node1 ~]# mogadm --trackers=172.16.10.123:7001 domain add images


查看domain信息

MogileFS基于Nginx反向代理实现分布式存储与访问


上传测试

[root@node1 ~]# mogupload --trackers=172.16.10.123:7001 --domain=html --key='fstab.html' --file='/etc/fstab'

[root@node1 ~]# mogupload --trackers=172.16.10.123:7001 --domain=images --key='test.jpg' --file='/root/test.jpg'


查看是否上传成功

[root@node1 ~]# moglistkeys --trackers=172.16.10.123:7001 --domain=html

fstab.html

[root@node1 ~]# moglistkeys --trackers=172.16.10.123:7001 --domain=images

test.jpg


获取数据

MogileFS基于Nginx反向代理实现分布式存储与访问


客户端通过fid查看数据

MogileFS基于Nginx反向代理实现分布式存储与访问


MogileFS基于Nginx反向代理实现分布式存储与访问

mogilefs集群配置完成,接下来需要配置nginx反向代理

nginx配置

编译安装nginx及mogilefs拓展模块

#解决依赖关系

[root@scholar ~]# yum groupinstall "Development Tools" "Server Platform Development" -y

[root@scholar ~]# yum install openssl-devel pcre-devel -y

[root@scholar ~]# groupadd -r nginx

[root@scholar ~]# useradd -r -g nginx nginx

[root@scholar ~]# tar xf nginx_mogilefs_module-1.0.4.tar.gz 

[root@scholar ~]# tar xf nginx-1.6.3.tar.gz 

[root@scholar ~]# cd nginx-1.6.3

[root@scholar nginx-1.6.3]# ./configure \

> --prefix=/usr/local/nginx \

> --sbin-path=/usr/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=/usr/local/nginx/client/ \

> --http-proxy-temp-path=/usr/local/nginx/proxy/ \

> --http-fastcgi-temp-path=/usr/local/nginx/fcgi/ \

> --http-uwsgi-temp-path=/usr/local/nginx/uwsgi \

> --http-scgi-temp-path=/usr/local/nginx/scgi \

> --with-pcre \

> --with-debug \

> --add-module=../nginx_mogilefs_module-1.0.4

[root@scholar nginx-1.6.3]# make && make install


提供脚本

MogileFS基于Nginx反向代理实现分布式存储与访问

34    user=`nginx -V 2>&1 | grep "configure arguments:" sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`

MogileFS基于Nginx反向代理实现分布式存储与访问
MogileFS基于Nginx反向代理实现分布式存储与访问
MogileFS基于Nginx反向代理实现分布式存储与访问

125 echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"

126        exit 2

127    esac


为脚本赋予执行权限

[root@scholar ~]# chmod +x /etc/rc.d/init.d/nginx


添加至服务管理列表,并让其开机自动启动

[root@scholar ~]# chkconfig --add nginx

[root@scholar ~]# chkconfig nginx on


配置nginx

MogileFS基于Nginx反向代理实现分布式存储与访问


测试语法,启动服务

MogileFS基于Nginx反向代理实现分布式存储与访问


访问测试

MogileFS基于Nginx反向代理实现分布式存储与访问


MogileFS基于Nginx反向代理实现分布式存储与访问

由于版本bug上传功能并不能实现,但是删除功能是可以实现的,这里就不再演示,实际生产环境中应用程序都是通过调用API直接联系mogilefs上传的,故此处不必过于纠结


将其中一个mogilefs节点模拟故障

MogileFS基于Nginx反向代理实现分布式存储与访问


再次访问测试

MogileFS基于Nginx反向代理实现分布式存储与访问

可见还是可以访问的,至此,基于nginx反向代理实现mogilefs分布式文件系统访问已实现

The end

好了,MogileFS基于Nginx反向代理实现小文件海量存储实验就先说到这里了,有余力的朋友可以实现nginx节点和mariadb节点的高可用。



马哥教育

MogileFS基于Nginx反向代理实现分布式存储与访问   

点击“阅读原文” 咨询网络班26期(25期已满)

以上是关于MogileFS基于Nginx反向代理实现分布式存储与访问的主要内容,如果未能解决你的问题,请参考以下文章

MogileFS + Nginx 实现基于CentOS7平台的分布式文件存储与访问

分布式存储之MogileFS基于Nginx实现负载均衡(Nginx+MogileFS)

nginx代理mogilefs集群实现

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

Nginx反代Mogilefs分布式储存示例

分布式文件系统MogileFS