天天看点

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

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

<code>MariaDB [mogilefs]&gt;</code>

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

<code>MariaDB [mogilefs]&gt; flush privileges;</code>

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

(1)安装

5

6

<code>[root@shuishui ~]</code><code># ls</code>

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

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

<code>install</code><code>.log.syslog                     MogileFS-Utils-2.19-1.el6.noarch.rpm</code>

<code>MogileFS-Server-2.46-2.el6.noarch.rpm  perl-MogileFS-Client-1.14-1.el6.noarch.rpm</code>

<code>[root@shuishui ~]</code><code># yum -y install *.rpm perl-IO-AIO</code>

(2)配置tracker

   ①、修改mogilefsd的配置文件

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

<code>[root@shuishui ~]</code><code># vim /etc/mogilefs/mogilefsd.conf</code>

<code># Enable daemon mode to work in background and use syslog</code>

<code>daemonize = 1</code>

<code># Where to store the pid of the daemon (must be the same in the init script)</code>

<code>pidfile =</code><code>/var/run/mogilefsd/mogilefsd</code><code>.pid</code>

<code># Database connection information</code>

<code>db_dsn = DBI:mysql:mogilefs:host=172.16.7.10   </code><code>#数据库</code>

<code>db_user = moguser       </code><code>#数据库授权的用户</code>

<code>db_pass = mogpass       </code><code>#用户密码</code>

<code># IP:PORT to listen on for mogilefs client requests</code>

<code>listen = 172.16.7.200:7001   </code><code>#监听的端口及IP</code>

<code># Optional, if you don‘t define the port above.</code>

<code>conf_port = 7001</code>

<code># Number of query workers to start by default.</code>

<code>query_jobs = 10</code>

<code># Number of delete workers to start by default.</code>

<code>delete_jobs = 1</code>

<code># Number of replicate workers to start by default.</code>

<code>replicate_jobs = 5</code>

<code># Number of reaper workers to start by default.</code>

<code># (you don‘t usually need to increase this)</code>

<code>reaper_jobs = 1</code>

   ②、为mogilefsd设定数据库

<code>[root@nmshuishui ~]</code><code># mogdbsetup --dbhost=172.16.7.10 --dbname=mogilefs --dbrootuser=root --dbuser=moguser --dbpass=mogpass</code>

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

<code>[root@nmshuishui ~]</code><code># service mogilefsd start</code>

   ④、验证数据库

23

24

25

<code>MariaDB [(none)]&gt; use mogilefs</code>

<code>Database changed</code>

<code>MariaDB [mogilefs]&gt; show tables;</code>

<code>+----------------------+</code>

<code>| Tables_in_mogilefs   |</code>

<code>| checksum             |</code>

<code>| class                |</code>

<code>| device               |</code>

<code>| domain               |</code>

<code>|</code><code>file</code>                 <code>|</code>

<code>| file_on              |</code>

<code>| file_on_corrupt      |</code>

<code>| file_to_delete       |</code>

<code>| file_to_delete2      |</code>

<code>| file_to_delete_later |</code>

<code>| file_to_queue        |</code>

<code>| file_to_replicate    |</code>

<code>| fsck_log             |</code>

<code>| host                 |</code>

<code>| server_settings      |</code>

<code>| tempfile             |</code>

<code>| unreachable_fids     |</code>

(3)配置mogstored

<code>[root@shuishui ~]</code><code># mkdir /www/mogdata/dev3 -pv</code>

<code>[root@shuishui ~]</code><code>#</code>

<code>[root@shuishui ~]</code><code># chown -R mogilefs.mogilefs /www/mogdata/dev1/ /var/run/mogilefsd//var/run/mogilefsd/</code>

<code>#########配置mogstored#########</code>

<code>[root@shuishui ~]</code><code># vim /etc/mogilefs/mogstored.conf</code>

<code>maxconns = 10000</code>

<code>httplisten = 0.0.0.0:7500</code>

<code>mgmtlisten = 0.0.0.0:7501</code>

<code>docroot =</code><code>/www/mogdata</code>

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

(5)添加主机

<code>[root@nmshuishui ~]</code><code># mogadm --trackers=172.16.7.200:7001 host add 172.16.7.200 --ip=172.16.7.200 --status=alive</code>

<code>###查看添加主机命令</code>

<code>[root@nmshuishui ~]</code><code># mogadm --trackers=172.16.7.200:7001 host list</code>

(6)添加设备

<code>[root@nmshuishui ~]</code><code># mogadm --trackers=172.16.7.200:7001 device add 172.16.7.200 1</code>

<code>###查看设备命令</code>

<code>[root@nmshuishui ~]</code><code># mogadm --trackers=172.16.7.200:7001 device list</code>

(7)添加domain

<code>[root@nmshuishui ~]</code><code># mogadm --trackers=172.16.7.200:7001 domain add images</code>

<code>[root@nmshuishui ~]</code><code># mogadm --trackers=172.16.7.200:7001 domain add files</code>

<code>###列出domain###</code>

<code>[root@nmshuishui ~]</code><code># mogadm --trackers=172.16.7.200:7001 domain list</code>

(8)添加class

<code>[root@nmshuishui ~]</code><code># mogadm --trackers=172.16.7.200:7001 class add images class1</code>

<code>[root@nmshuishui ~]</code><code># mogadm --trackers=172.16.7.200:7001 class add images class2</code>

<code>[root@nmshuishui ~]</code><code># mogadm --trackers=172.16.7.200:7001 class list</code>

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

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

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

   ①、列出所有主机

   ②、列出所有设备

   ③、列出所有domain

(11)上传图片资源到mogilefs

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

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

五、配置nginx服务器(172.16.7.10)

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

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

<code>cd</code> <code>nginx-1.4.7</code>

<code>.</code><code>/configure</code> <code>--prefix=</code><code>/usr/local/nginx</code> <code>--sbin-path=</code><code>/usr/local/nginx/nginx</code> <code>--conf-path=</code><code>/etc/nginx/nginx</code><code>.conf --pid-path=</code><code>/usr/local/nginx/nginx</code><code>.pid --with-pcre --add-module=</code><code>/root/mogilefs/nginx-mogilefs-module-master</code>

<code>make</code> <code>&amp;&amp;</code><code>make</code> <code>install</code>

3、修改nginx配置文件

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

<code>[root@shuishui ~]</code><code># vim /etc/nginx/nginx.conf</code>

<code>http {</code>

<code>    </code><code>include       mime.types;</code>

<code>    </code><code>default_type  application</code><code>/octet-stream</code><code>;</code>

<code>    </code><code>#log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘</code>

<code>    </code><code>#                  ‘$status $body_bytes_sent "$http_referer" ‘</code>

<code>    </code><code>#                  ‘"$http_user_agent" "$http_x_forwarded_for"‘;</code>

<code>    </code><code>#access_log  logs/access.log  main;</code>

<code>    </code><code>sendfile        on;</code>

<code>    </code><code>#tcp_nopush     on;</code>

<code>    </code><code>#keepalive_timeout  0;</code>

<code>    </code><code>keepalive_timeout  65;</code>

<code>    </code><code>gzip</code>  <code>on;</code>

<code>    </code><code>upstream mogcluster {               </code><code>#定义upstream,做负载均衡轮调</code>

<code>        </code><code>server  172.16.7.200:7001;</code>

<code>        </code><code>server  172.16.7.201:7001;</code>

<code>        </code><code>server  172.16.7.202:7001;</code>

<code>    </code><code>}</code>

<code>    </code><code>server {</code>

<code>        </code><code>listen       80;</code>

<code>        </code><code>server_name  localhost;</code>

<code>        </code><code>#charset koi8-r;</code>

<code>        </code><code>#access_log  logs/host.access.log  main;</code>

<code>        </code><code>location / {</code>

<code>            </code><code>root   html;</code>

<code>            </code><code>index  index.html index.htm;</code>

<code>        </code><code>}</code>

<code>        </code><code>location</code><code>/images/</code> <code>{                   </code><code>#增加此location</code>

<code>            </code><code>mogilefs_tracker mogcluster;</code>

<code>            </code><code>mogilefs_domain images;</code>

<code>            </code><code>mogilefs_methods GET PUT DELETE;</code>

<code>            </code><code>mogilefs_pass {</code>

<code>                </code><code>proxy_pass $mogilefs_path;</code>

<code>                </code><code>proxy_hide_header Content-Type;</code>

<code>                </code><code>proxy_buffering off;</code>

<code>            </code><code>}</code>

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

<code>        </code><code>#</code>

<code>        </code><code>error_page   500 502 503 504 </code><code>/50x</code><code>.html;</code>

<code>        </code><code>location =</code><code>/50x</code><code>.html {</code>

<code>}</code>

六、基于key做访问测试