Mogilefs使用Nginx实现代理访问

MogileFS介绍:

 MogileFS是一个开源的分布式文件存储系统,由LiveJournal旗下的DangaInteracitve公司研发。可支持文件自动备非的功能,提供高可用性和高可扩展性。

MogileFS组件:

 trackers:

  MoglieFS的调度器,是mogileFS的核心,访问入口。

 功能:1、replication:节点之间文件复制

     2、deletion:空间数据删除

     3、queryworker:响应客户端请求

     4、reaper:在存储失败后将文件复制请求重新放到队列中

     5、monitor:检测主机和设备dev的健康和状态

 database: 

  功能:1、保存mogilefs的元数据,一般使用mysql,建议使用冗余方案以保证其可用性

      2、mogilefs有专门组件mogdbsetup,可用于实现初始化数据库

 storage:

  功能:1、mogstored(进程名),一个准备好的mogstored节点,可通过mogadm加入到现有的集群中;

      2、存储节点需要定义"设备"(dev),每个dev都有其唯一的ID号;

 客户端:client

  功能:客户端用于mogilefs建立通信的接口

MogileFS的特点:

  1、工作于应用层

  2、无单点

  3、自动文件复制

  4、传输中立,无线特殊协议(http和nfs)

  5、名称空间

  6、无须RAID,具有比RAID更好的可靠性

  7、不共享任何数据

实验环境:

2.png

 node1: 172.16.2.12 

 node2: 172.16.2.13

 node3:172.16.2.14

 node4:172.16.2.15

所需软件:

3.png

一、安装mogilefs-server

1、安装trakcers

[root@node1 mogilefs]# yum -y install MogileFS-* perl-MogileFS-Client-1.14-1.el6.noarch.rpm perl-Net-Netmask-1.9015-8.el6.noarch.rpm perl-Perlbal-1.78-1.el6.noarch.rpm  Perlbal-1.78-1.el6.noarch.rpm

2、数据库用户授权

MariaDB [(none)]> GRANT ALL  ON *.* TO  'root'@'172.16.2.1%' IDENTIFIED BY '123456' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;

3、初始化数据库

[root@node1 ~]# mogdbsetup  --dbhost=172.16.2.12 --dbport=3306 --dbname=mogilefs --dbrootuser=root --dbrootpass=123456 --dbuser=mogile --dbpass=mogpass --type=MySQL --yes
相关选择解释:
 --dbhost: mysql服务器地址
 --dbport:mysql服务器的监听端口
 --dbname: 创建用于mogilefs的数据的名称
 --dbrootuser:root用户
 --dbrootpass:root用户的密码
 --dbuser:新创建的mogilefs数据库的管理用户
 --dbpass:新创建的mogilefs的数据的管理用户密码
 --type:指明数据库类型为mysql
 --yes:自动回答yes

4、修改mogilefs的配置文件

[root@node1 mogilefs]# 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  \\pid文件存放路径
# Database connection information
db_dsn = DBI:mysql:mogilefs:host=172.16.2.12  \\数据库地址
db_user = mogile   \\mogilefs所授权的用户
db_pass = mogpass   \\mogilfs所授权的用户密码
# IP:PORT to listen on for mogilefs client requests
listen = 0.0.0.0:7001   \\修改为监听在所有地址
# Optional, if you don't define the port above.
conf_port = 7001    \\定义监听端口,默认为7001
# Number of query workers to start by default.
query_jobs = 10   \\默认启动10个查询线程
# Number of delete workers to start by default.
delete_jobs = 1   \\默认求启动1个删除线程
# Number of replicate workers to start by default.
replicate_jobs = 5  \\默认启动5个复制线程
# Number of reaper workers to start by default.
# (you don't usually need to increase this)
reaper_jobs = 1  \\响应客户端请求,在磁盘失败后将文件复制请求重新放到队列中
# Number of fsck workers to start by default.
# (these can cause a lot of load when fsck'ing)
#fsck_jobs = 1  \\检查磁盘设备是否损坏,默认没有启用
# Minimum amount of space to reserve in megabytes
# default: 100  \\默认保留100M空间
# Consider setting this to be larger than the largest file you
# would normally be uploading.
#min_free_space = 200      \\最小空闲空间200M
# Number of seconds to wait for a storage node to respond.
# default: 2 \\等待存储节点响应的时间,默认为2s
# Keep this low, so busy storage nodes are quickly ignored.
#node_timeout = 2 \\等待节点超时时长
# Number of seconds to wait to connect to a storage node.
# default: 2 \\连接存储节点的超时时长
# Keep this low so overloaded nodes get skipped.
#conn_timeout = 2  
# Allow replication to use the secondary node get port,
# if you have apache or similar configured for GET's
#repl_use_get_port = 1

5、启动mogilefs

[root@node1 ~]# /etc/init.d/mogilefsd start

6、查看监听端口:默认为7001

[root@node1 ~]# netstat -tpln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      977/sshd            
tcp        0      0 0.0.0.0:7001                0.0.0.0:*                   LISTEN      4773/mogilefsd

二、安装配置mogilefs-client

1、安装mogilefs-client

[root@node2 mogilefs]# yum -y install MogileFS-* Perlbal-1.78-1.el6.noarch.rpm perl-MogileFS-Client-1.14-1.el6.noarch.rpm perl-Net-Netmask-1.9015-8.el6.noarch.rpm perl-Perlbal-1.78-1.el6.noarch.rpm  perl-IO-AIO

2、各存储节点准备好存储块设备,然后分区格式化

[root@node2 ~]# fdisk  -l | grep "/dev/sdb1"
/dev/sdb1               1        1306    10490413+  83  Linux
[root@node3 ~]#  fdisk  -l | grep "/dev/sdb1"
/dev/sdb1               1        1306    10490413+  83  Linux

3、创建挂载点

[root@node2 mogilefs]# mkdir /mogilefs;chown -R mogilefs.mogilefs /mogilefs

4、设置自动挂载设备

[root@node2 mogilefs]# cat /etc/fstab  | grep "^/dev/sdb1"
/dev/sdb1              /mogilefs                ext4    defaults        0 0
[root@node2 mogilefs]# mount -a

5、修改mogstored的配置文件

[root@node2 mogilefs]# cat  /etc/mogilefs/mogstored.conf 
maxconns = 10000   \\定义最大连接数
httplisten = 0.0.0.0:7500 \\定义httpd监听端口
mgmtlisten = 0.0.0.0:7501  \\定义mgm的监听端口
docroot = /mogilefs  \\修改为存储设备的挂载点

6、启动mogstorage服务

[root@node2 mogilefs]# netstat -tpln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name          
tcp        0      0 0.0.0.0:7500                0.0.0.0:*                   LISTEN      1512/mogstored      
tcp        0      0 0.0.0.0:7501                0.0.0.0:*                   LISTEN      1512/mogstored

7、配置node3节点

mode3与node2节点的配置一样,这里就不在描述了

三、在trackers节点添加存储节点

1、在存储节点创建共享块设备

[root@node2 ~]# mkdir /mogilefs/dev1;chown -R  mogilefs.mogilefs /mogilefs/
[root@node3 ~]#  mkdir /mogilefs/dev2;chown -R  mogilefs.mogilefs /mogilefs/

2、将存储节点添加到trackers

[root@node1 ~]# mogadm --trackers=172.16.2.12:7001 host add node2.linux.com --ip=172.16.2.13 --status=alive
[root@node1 ~]# mogadm --trackers=172.16.2.12:7001 host add node3.linux.com --ip=172.16.2.14 --status=alive

3、查看添加的主机状态

[root@node1 ~]# mogadm --trackers=172.16.2.12:7001  host list
node2.linux.com [1]: alive
  IP:       172.16.2.13:7500

node3.linux.com [2]: alive
  IP:       172.16.2.14:7500

4、添加块设备到trackers

[root@node1 ~]# mogadm --trackers=172.16.2.12:7001  device  add node2.linux.com 1
[root@node1 ~]# mogadm --trackers=172.16.2.12:7001  device  add node3.linux.com 2 
注意:1或者2要与存储节点创建的dev#(dev1,dev2)一致

5、查看添加的块设备信息

[root@node1 ~]# mogadm --trackers=172.16.2.12:7001  device  list
node2.linux.com [1]: alive
                    used(G)    free(G)   total(G)  weight(%)
   dev1:   alive      0.021      9.200      9.222        100

node3.linux.com [2]: alive
                    used(G)    free(G)   total(G)  weight(%)
   dev2:   alive      2.162     32.931     35.093        100

6、创建domain

[root@node1 ~]# mogadm --trackers=172.16.2.12:7001  domain add mylinux  \\新添加mylinxu域
[root@node1 ~]# mogadm --trackers=172.16.2.12:7001  domain list  \\查看域信息
 domain               class                mindevcount   replpolicy   hashtype
-------------------- -------------------- ------------- ------------ -------
 mylinux              default                   2        MultipleHosts() NONE

7、添加class

[root@node1 ~]# mogadm --trackers=172.16.2.12:7001   class add  mylinux  linux  \\在mylinux中添加linux 类
[root@node1 ~]# mogadm --trackers=172.16.2.12:7001   class list \\查看类信息
 domain               class                mindevcount   replpolicy   hashtype
-------------------- -------------------- ------------- ------------ -------
 mylinux              default                   2        MultipleHosts() NONE   
 mylinux              linux                     2        MultipleHosts() NONE

8、上传图片到存储节点

[root@node1 ~]# mogupload --trackers=172.16.2.12:7001  --domain=mylinux --key='/1.jpg' --file='./1.jpg'

9、查看图片上传之后的信息

[root@node1 ~]# mogfileinfo --trackers=172.16.2.12:7001  --domain=mylinux --key='/1.jpg' 
- file: /1.jpg
     class:              default
  devcount:                    2
    domain:              mylinux
       fid:                    2
       key:               /1.jpg
    length:                13224
 - http://172.16.2.13:7500/dev1/0/000/000/0000000002.fid  
 - http://172.16.2.13:7500/dev1/0/000/000/0000000002.fid
 \\在浏览器中访问上面路径可以浏览到上传的图

访问测试:

21.png

四、编译配置Nginx

1、编译安装Nginx

[root@node4 mogile]# tar xf nginx-1.8.0.tar.gz -C /usr/src
[root@node4 mogile]# tar xf nginx_mogilefs_module-1.0.4.tar.gz  -C /usr/src
[root@node4 src]# cd nginx-1.8.0/
[root@node4 nginx-1.8.0]# useradd  nginx
[root@node4 nginx-1.8.0]#./configure \
  --prefix=/usr \
  --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=/var/tmp/nginx/client/ \
  --http-proxy-temp-path=/var/tmp/nginx/proxy/ \
  --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
  --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
  --http-scgi-temp-path=/var/tmp/nginx/scgi \
  --with-pcre \
  --with-debug \
  --add-module=..//nginx_mogilefs_module-1.0.4/
  [root@node4 nginx-1.8.0]# make;make install

2、nginx启动脚本:

Mogilefs使用Nginx实现代理访问nginx.zip

3、编辑nginx配置文件,使其支持mogilefs

[root@node4 ~]# vim /etc/nginx/nginx.conf
   location /image {
          mogilefs_tracker 172.16.2.12:7001;
          mogilefs_domain  mylinux;
          mogilefs_pass {
            proxy_pass $mogilefs_path;
            proxy_hide_header Content-Type;
            proxy_buffering off;
          }
         }

4、测试nginx配置语法,并启动nginx

[root@node4 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@node4 ~]# /etc/init.d/nginx start

5、打开浏览器访问测试:

22.png

知识扩展:

MogileFS-Utils相关命令介绍:
mogupload:用于上传文件的命令
mogfileinfo:用于查看上传文件的信息
mogadm管理命令:
    check:检查主机信息
    stats:查看主机信息
    host:添加、修改trackers中的主机
    device:添加、修改存储节点
    domain:添加、修改域信息
    class:填写、修改类等信息
    slave:从节点的信息
    fsck:检查修复提供的存储节点
    rebalance:调整节点之间存储不平衡等信息
    setting:mogilefs的设置信息

nginx的mogilefs的第三方模块使用地址:

http://www.grid.net.ru/nginx/mogilefs.en.html

原创文章,作者:马行空,如若转载,请注明出处:http://www.178linux.com/6812