nginx反代mogilefs实现海量小文件存储

  • 一、简介

    1、介绍

    MogileFS 是一个开源的分布式文件系统,用于组建分布式文件集群,由 LiveJournal 旗下 Danga Interactive 公司开发,Danga 团队开发了包括 Memcached、MogileFS、Perlbal 等不错的开源项目:(注:Perlbal 是一个强大的 Perl 写的反向代理服务器)

    2、MogileFS的特性

    (1)工作在应用层提供服务

    (2)无单点(至少存在两份副本在不同的节点上)

    (3)自动文件复制

    mogilefs将多个文件组织成一个单位进行复制,复制的最小单元是class

    (4)传输中立,无特殊协议,可通过NFS或HTTP进行通信

    (5)简单的命名空间

    mogilefs是基于域(domain)来访问的,没有目录,所有的数据都直接存储在各存储空间中

    3、MogileFS的几个部分

    (1)database 使用mogdbsetup程序来初始化数据库。数据库保存了Mogilefs的所有元数据,因此数据库部分非常重要,如果这儿挂了,那么整个Mogilefs将处于不可用状态。所以最好是HA结构。

    (2)mogstored(存储节点) mogstored是数据存储的位置,用来数据的创建、删除、获取等,每一个节点必须向tracker注册,然后才能使用device id,可以通过mogadm增加这台机器到cluster中。

    (3)tracker(跟踪器) MogileFS的核心,是一个高度器,服务进程为mogilefsd。mogadm,mogtool的所有操作都要跟trackers打交道,Client的一些操作也需要定义好tracker,因此最好同时运行多个tracker来做负载均衡。

    (4)工具 主要就是mogadm这个工具,用来在命令行下控制整个mogilefs系统以及查看状态等。

    (5)Client Client实际上是一个Perl的pm,可以写程序调用该pm来使用mogilefs系统,对整个系统进行读写操作。

    二、拓扑流程图

    <img alt="wKioL1NvhAKg3yUJAABDXIpfeuM507.png" src="http://www.it165.net/uploadfile/files/2014/0512/201405120826133.png" title="拓扑.Z喎�" http:="" www.it165.net="" pro="" pkqt="" "="" target="_blank" class="keylink" style="border: 1px solid rgb(204, 204, 204); padding: 5px; margin: 0px; list-style: none; width: 563px; height: 445px; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;">QTkc=" />

    三、说明

    1、规划说明

    实验共有5台主机,nginx做为前端反向代理接收用户请求;mariadb作为存储mogilefs元数据的数据库;剩下的三台主机分别安装tracker+mogstore。

    2、nginx反代流程

    为了能够基于URL进行(而非fid),nginx需要安装一个第三方的mogilefs模块(nginx-mogilfes就是利用mogilefs的API开发的一个应用程序)来自动转换fid到URL的映射;当用户请求来的时候,nginx通过location的判定明确知道这是一个存储在后端mogilefs应用的话,将会启用反向代理机制,nginx把自己扮演为mogilefs的客户端,此时把URL当作键直接向后端发起文件查询请求,tracker就会返回一个地址;nginx再次扮演成客户端到对应的mogstored进程上取,当nginx拿到后就去响应前端的http请求

    3、实验拓扑:

    加载中...QTZJQUVNUEFjODM4LnBuZw==" src="http://www.it165.net/uploadfile/files/2014/0512/201405120826134.png" title="实验拓扑.PNG" />

    四、分布式文件系统的实现

    1、配置数据库(172.16.7.10)

    1. MariaDB [mogilefs]&gt; grant all on *.* to 'root'@'172.16.7.10'; #授权root用户所有权限
    2. MariaDB [mogilefs]&gt;
    3. MariaDB [mogilefs]&gt; grant all on *.* to  'moguser'@'172.16.%.%' identified by 'mogpass';    #授权mogilefs的tracker连接数据库的用户
    4. MariaDB [mogilefs]&gt; flush privileges;

    2、安装配置mogilefs(三台主机)

    (1)安装

    1. [root@shuishui ~]# ls
    2. anaconda-ks.cfg                        MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm  perl-Net-Netmask-1.9015-8.el6.noarch.rpm
    3. install.log                            MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm  perl-Perlbal-1.78-1.el6.noarch.rpm
    4. install.log.syslog                     MogileFS-Utils-2.19-1.el6.noarch.rpm
    5. MogileFS-Server-2.46-2.el6.noarch.rpm  perl-MogileFS-Client-1.14-1.el6.noarch.rpm
    6. [root@shuishui ~]# yum -y install *.rpm perl-IO-AIO

    (2)配置tracker

    ①、修改mogilefsd的配置文件

    01. [root@shuishui ~]# vim /etc/mogilefs/mogilefsd.conf
    02. # Enable daemon mode to work in background and use syslog
    03. daemonize = 1
    04. # Where to store the pid of the daemon (must be the same in the init script)
    05. pidfile = /var/run/mogilefsd/mogilefsd.pid
    06. # Database connection information
    07. db_dsn = DBI:mysql:mogilefs:host=172.16.7.10    #数据库
    08. db_user = moguser        #数据库授权的用户
    09. db_pass = mogpass        #用户密码
    10. # IP:PORT to listen on for mogilefs client requests
    11. listen = 172.16.7.200:7001    #监听的端口及IP
    12. # Optional, if you don't define the port above.
    13. conf_port = 7001
    14. # Number of query workers to start by default.
    15. query_jobs = 10
    16. # Number of delete workers to start by default.
    17. delete_jobs = 1
    18. # Number of replicate workers to start by default.
    19. replicate_jobs = 5
    20. # Number of reaper workers to start by default.
    21. # (you don't usually need to increase this)
    22. reaper_jobs = 1

    ②、为mogilefsd设定数据库

    1. [root@nmshuishui ~]# mogdbsetup --dbhost=172.16.7.10 --dbname=mogilefs --dbrootuser=root --dbuser=moguser --dbpass=mogpass

    ③、查看7001端口是否成功监听

    1. [root@nmshuishui ~]# service mogilefsd start

    wKiom1Nvcc6zOOFAAAAwSHExtzA376.png

    ④、验证数据库

    01. MariaDB [(none)]&gt; use mogilefs
    02. Database changed
    03. MariaDB [mogilefs]&gt;
    04. MariaDB [mogilefs]&gt; show tables;
    05. +----------------------+
    06. | Tables_in_mogilefs   |
    07. +----------------------+
    08. | checksum             |
    09. | class                |
    10. | device               |
    11. | domain               |
    12. file                 |
    13. | file_on              |
    14. | file_on_corrupt      |
    15. | file_to_delete       |
    16. | file_to_delete2      |
    17. | file_to_delete_later |
    18. | file_to_queue        |
    19. | file_to_replicate    |
    20. | fsck_log             |
    21. | host                 |
    22. | server_settings      |
    23. | tempfile             |
    24. | unreachable_fids     |
    25. +----------------------+

    (3)配置mogstored

    01. [root@shuishui ~]# mkdir /www/mogdata/dev3 -pv
    02. [root@shuishui ~]#
    03. [root@shuishui ~]# chown -R mogilefs.mogilefs /www/mogdata/dev1/ /var/run/mogilefsd//var/run/mogilefsd/
    04. [root@shuishui ~]#
    05. #########配置mogstored#########
    06. [root@shuishui ~]# vim /etc/mogilefs/mogstored.conf
    07. maxconns = 10000
    08. httplisten = 0.0.0.0:7500
    09. mgmtlisten = 0.0.0.0:7501
    10. docroot = /www/mogdata

    (4)查看7500端口监听状态

    wKioL1NvdCLCQqesAAA5x_bCZpk533.png

    (5)添加主机

    1. [root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 host add 172.16.7.200 --ip=172.16.7.200 --status=alive
    2. ###查看添加主机命令
    3. [root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 host list

    (6)添加设备

    1. [root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 device add 172.16.7.200 1
    2. ###查看设备命令
    3. [root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 device list

    (7)添加domain

    1. [root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 domain add images
    2. [root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 domain add files
    3. ###列出domain###
    4. [root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 domain list

    (8)添加class

    1. [root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 class add images class1
    2. [root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 class add images class2
    3. [root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 class list

    (9)配置其它两台主机的mogilefsd和mogstored

    因为这三台主机的tracker区用一个数据库,所以在安装配置时,不需再重新设定数据库,只配置相应的mogilefsd和mogstored配置文件就可以了

    (10)查看最后的状态信息

    ①、列出所有主机

    wKiom1NveK-Sjks6AAAkYPlqeHY947.png

    ②、列出所有设备

    wKioL1NveKagXg9KAAA97ij9JFk145.png

    ③、列出所有domain

    wKiom1NveOWi69WrAAAyATxdCxY477.png

    (11)上传图片资源到mogilefs

    1. [root@nmshuishui ~]# mogupload --trackers=172.16.7.200:7001 --domain=images --key='linux.jpg' --file='/root/1.jpg'

    (12)使用mogfileinfo获取上传图片的访问路径

    wKiom1Nve7PTN6G6AABWI0ArGu4600.png

    wKioL1Nve_3QBZBEAAiXLe59bQI945.png

    五、配置nginx服务器(172.16.7.10)

    1、解压nginx-mogilefs-module-master.zip模块

    2、先停止nginx服务器,编译安装第三方模块

    1. cd nginx-1.4.7
    2. ./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/nginx --conf-path=/etc/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-pcre --add-module=/root/mogilefs/nginx-mogilefs-module-master
    3. make && make install

    3、修改nginx配置文件

    01. [root@shuishui ~]# vim /etc/nginx/nginx.conf
    02. http {
    03. include       mime.types;
    04. default_type  application/octet-stream;
    05. #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    06. #                  '$status $body_bytes_sent "$http_referer" '
    07. #                  '"$http_user_agent" "$http_x_forwarded_for"';
    08. #access_log  logs/access.log  main;
    09. sendfile        on;
    10. #tcp_nopush     on;
    11. #keepalive_timeout  0;
    12. keepalive_timeout  65;
    13. gzip  on;
    14. upstream mogcluster {                #定义upstream,做负载均衡轮调
    15. server  172.16.7.200:7001;
    16. server  172.16.7.201:7001;
    17. server  172.16.7.202:7001;
    18. }
    19. server {
    20. listen       80;
    21. server_name  localhost;
    22. #charset koi8-r;
    23. #access_log  logs/host.access.log  main;
    24. location / {
    25. root   html;
    26. index  index.html index.htm;
    27. }
    28. location /images/ {                    #增加此location
    29. mogilefs_tracker mogcluster;
    30. mogilefs_domain images;
    31. mogilefs_methods GET PUT DELETE;
    32. mogilefs_pass {
    33. proxy_pass $mogilefs_path;
    34. proxy_hide_header Content-Type;
    35. proxy_buffering off;
    36. }
    37. }
    38. # redirect server error pages to the static page /50x.html
    39. #
    40. error_page   500 502 503 504  /50x.html;
    41. location = /50x.html {
    42. root   html;
    43. }
    44. }
    45. }

    六、基于key做访问测试

    wKiom1Nvf4Dw3gsvAAjehl3goJc368.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值