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系统,对整个系统进行读写操作。

二、拓扑流程图

三、说明

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、实验拓扑:

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

1、配置数据库(172.16.7.10)


1

2

3

4


MariaDB [mogilefs]> grant all on *.* to ‘root‘@‘172.16.7.10‘; #授权root用户所有权限

MariaDB [mogilefs]>

MariaDB [mogilefs]> grant all on *.* to  ‘moguser‘@‘172.16.%.%‘ identified by ‘mogpass‘;    #授权mogilefs的tracker连接数据库的用户

MariaDB [mogilefs]> flush privileges;

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

(1)安装


1

2

3

4

5

6


[[email protected] ~]# ls

anaconda-ks.cfg                        MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm  perl-Net-Netmask-1.9015-8.el6.noarch.rpm

install.log                            MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm  perl-Perlbal-1.78-1.el6.noarch.rpm

install.log.syslog                     MogileFS-Utils-2.19-1.el6.noarch.rpm

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

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

(2)配置tracker

①、修改mogilefsd的配置文件


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22


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

# Enable daemon mode to work in background and use 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:mysql:mogilefs:host=172.16.7.10    #数据库

db_user = moguser        #数据库授权的用户

db_pass = mogpass        #用户密码

# IP:PORT to listen on for mogilefs client requests

listen = 172.16.7.200:7001    #监听的端口及IP

# Optional, if you don‘t define the port above.

conf_port = 7001

# Number of query workers to start by default.

query_jobs = 10

# Number of delete workers to start by default.

delete_jobs = 1

# Number of replicate workers to start by default.

replicate_jobs = 5

# Number of reaper workers to start by default.

# (you don‘t usually need to increase this)

reaper_jobs = 1

②、为mogilefsd设定数据库


1

[[email protected] ~]# mogdbsetup --dbhost=172.16.7.10 --dbname=mogilefs --dbrootuser=root --dbuser=moguser --dbpass=mogpass

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


1

[[email protected] ~]# service mogilefsd start

④、验证数据库


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25


MariaDB [(none)]> use mogilefs

Database changed

MariaDB [mogilefs]>

MariaDB [mogilefs]> show tables;

+----------------------+

| Tables_in_mogilefs   |

+----------------------+

| 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     |

+----------------------+

(3)配置mogstored


1

2

3

4

5

6

7

8

9

10


[[email protected] ~]# mkdir /www/mogdata/dev3 -pv

[[email protected] ~]#

[[email protected] ~]# chown -R mogilefs.mogilefs /www/mogdata/dev1/ /var/run/mogilefsd//var/run/mogilefsd/

[[email protected] ~]#

#########配置mogstored#########

[[email protected] ~]# vim /etc/mogilefs/mogstored.conf

maxconns = 10000

httplisten = 0.0.0.0:7500

mgmtlisten = 0.0.0.0:7501

docroot = /www/mogdata

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

(5)添加主机


1

2

3


[[email protected] ~]# mogadm --trackers=172.16.7.200:7001 host add 172.16.7.200 --ip=172.16.7.200 --status=alive

###查看添加主机命令

[[email protected] ~]# mogadm --trackers=172.16.7.200:7001 host list

(6)添加设备


1

2

3


[[email protected] ~]# mogadm --trackers=172.16.7.200:7001 device add 172.16.7.200 1

###查看设备命令

[[email protected] ~]# mogadm --trackers=172.16.7.200:7001 device list

(7)添加domain


1

2

3

4


[[email protected] ~]# mogadm --trackers=172.16.7.200:7001 domain add images

[[email protected] ~]# mogadm --trackers=172.16.7.200:7001 domain add files

###列出domain###

[[email protected] ~]# mogadm --trackers=172.16.7.200:7001 domain list

(8)添加class


1

2

3


[[email protected] ~]# mogadm --trackers=172.16.7.200:7001 class add images class1

[[email protected] ~]# mogadm --trackers=172.16.7.200:7001 class add images class2

[[email protected] ~]# mogadm --trackers=172.16.7.200:7001 class list

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

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

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

①、列出所有主机

②、列出所有设备

③、列出所有domain

(11)上传图片资源到mogilefs


1

[[email protected] ~]# mogupload --trackers=172.16.7.200:7001 --domain=images --key=‘linux.jpg‘ --file=‘/root/1.jpg‘

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

五、配置nginx服务器(172.16.7.10)

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

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


1

2

3


cd nginx-1.4.7

./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

make && make install

3、修改nginx配置文件


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45


[[email protected] ~]# vim /etc/nginx/nginx.conf

http {

    include       mime.types;

    default_type  application/octet-stream;

    #log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘

    #                  ‘$status $body_bytes_sent "$http_referer" ‘

    #                  ‘"$http_user_agent" "$http_x_forwarded_for"‘;

    #access_log  logs/access.log  main;

    sendfile        on;

    #tcp_nopush     on;

    #keepalive_timeout  0;

    keepalive_timeout  65;

    gzip  on;

    upstream mogcluster {                #定义upstream,做负载均衡轮调

        server  172.16.7.200:7001;

        server  172.16.7.201:7001;

        server  172.16.7.202:7001;

    }

    server {

        listen       80;

        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {

            root   html;

            index  index.html index.htm;

        }

        location /images/ {                    #增加此location

            mogilefs_tracker mogcluster;

            mogilefs_domain images;

            mogilefs_methods GET PUT DELETE;

            mogilefs_pass {

                proxy_pass $mogilefs_path;

                proxy_hide_header Content-Type;

                proxy_buffering off;

            }

        }

        # redirect server error pages to the static page /50x.html

        #

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

    }

}

六、基于key做访问测试


时间: 2024-10-12 10:54:36

nginx反代mogilefs的相关文章

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

一.简介 1.介绍 MogileFS 是一个开源的分布式文件系统,用于组建分布式文件集群,由 LiveJournal 旗下 Danga Interactive 公司开发,Danga 团队开发了包括 Memcached.MogileFS.Perlbal 等不错的开源项目:(注:Perlbal 是一个强大的 Perl 写的反向代理服务器) 2.MogileFS的特性 (1)工作在应用层提供服务 (2)无单点(至少存在两份副本在不同的节点上) (3)自动文件复制 mogilefs将多个文件组织成一个单

Http和Nginx反代至Tomcat(LNMT、LAMT)

Http和Nginx反代至Tomcat(LNMT.LAMT) ================================================================================ 概述: 本章将主要介绍Http和Nginx反代至Tomcat,具体内容如下: LNMT部署并实现动静分离 LAMT部署的实现方式: ·proxy_http_module代理配置 ·proxy_ajp_module代理配置 Tomcat脚本(启动.停止.重启) ========

Nginx反代超详细教程:加速网站Google、Gravatar和Hostloc

VPS教程 » Nginx反代超详细教程:加速网站Google.Gravatar和Hostloc Nginx反代超详细教程:加速网站Google.Gravatar和Hostloc December 31st , 2015•Edit•访问: 672 次 nginx 这个轻量级.高性能的 web server 主要可以干两件事情: 1.直接作为http server(需要Fastcgi配合): 2.作为反代服务器(进一步可以实现均衡负载). 这里主要利用一下反功能来方便一下日常生活.选择Gravat

Tomcat集群session复制,httpd/nginx反代Tomcat集群

   一个大型站点都会涉及到动态应用,动态应用都需要做会话保持,常见的会话保持方式就三种,一是session stick,二是session replication,三是session share,对于小型规模的tomcat集群,大多者会采用session replication方式,但阅读官方文档也好,查询大牛博客也罢,发现均有不准确之处,所以亲测成功实现之后得出如下文档,还望高人指点. 实验环境: 操作系统:CentOS 7.2 tomcat版本:tomcat-7.0.54(yum安装方式)

nginx反代httpd,实现三种tomcat代理模型至后端的tomcat服务器,会话绑定的三种方式

构建tomcat集群,实现前端一台nginx反代,到后端的apache服务器,由apache负责向后端的tomcat服务器进行资源调度,这样的模式比直接用nginx反代到后端主机,tomcat服务器所受到的压力会更小,服务将会更加稳定,这样的模式是经过实践检验出来的.如果nginx直接调度到后端tomcat服务器,则只支持http和https,而不支持ajp,http与https模式的设定,可以让外来客户直接访问tomcat服务器,而不需要经过我们设置好的前端nginx的端口,这样是十分不安全的

Nginx反代配置

一.ngx_http_proxy_module模块     ngx_http_proxy_module模块可根据用户请求的uri传递至后端服务器,实现反向代理 命令: 1.proxy_pass 设置一个代理服务器的地址,协议,和一个可选的URI的位置应该映射.作为一个协议,"HTTP"或"https"可以指定.地址可以被指定为一个域名或IP地址,和一个可选的端口 语法:proxy_pass URL; 可用的上下文:location, if in location,

Nginx反代Tomcat项目

需求背景: 直接访问Tomcat项目路径如下: http://10.8.1.5:8080/erp 要求使用www.erp.com访问是可以访问至http://10.8.1.5:8080/erp 需求分析: 这里不可以使用简单的反向代理,因为后端服务器有目录(erp)存在,而为了访问友好www.erp.com后端不能加目录,所以不能纯粹的使用nginx根据目录来匹配后端服务器,最终实现效果nginx配置如下: server {     listen      80;     server_name

nginx反代

需求:同一主机上跑多个web站点,使用httpd+php-fpm无法满足需要: 解决方案:加一个nginx,接入所有用户访问,根据用户访问的主页不同,反代后端不同站点: 前端:nginx 后端: 同一主机多个web站点 www.bbtw.net www.shxinsheng.wang new.khcm.net 安装过程略,主要描述反代过程: nginx主配置文件: ]# egrep -v '^[[:space:]]*#|^$' /etc/nginx/nginx.conf user nginx;

Django Nginx反代 获取真实ip

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Andale Mono"; color: #28fe14; background-color: rgba(0, 0, 0, 0.9) } span.s1 { } 非反代情况下Django 中 ip = request.META['REMOTE_ADDR'] 即可拿到对应ip地址 Nginx.fcgi.uwsgi等反代情况下 p.p1 { margin: 0.0px 0.0px 0