您的位置:首页 > 运维架构 > Nginx

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

2016-03-31 11:27 731 查看
一、简介

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

二、拓扑流程图


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




④、验证数据库

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端口监听状态



(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)查看最后的状态信息

①、列出所有主机



②、列出所有设备



③、列出所有domain



(11)上传图片资源到mogilefs

1.
[root@nmshuishui ~]
# 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.
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做访问测试

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息