莫问 发表于 2019-2-1 07:43:19

nginx反代mogilefs-Linux

  一、简介
  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>  (3)tracker(跟踪器)
  MogileFS的核心,是一个高度器,服务进程为mogilefsd。mogadm,mogtool的所有操作都要跟trackers打交道,Client的一些操作也需要定义好tracker,因此最好同时运行多个tracker来做负载均衡。
  (4)工具
  主要就是mogadm这个工具,用来在命令行下控制整个mogilefs系统以及查看状态等。
  (5)Client
  Client实际上是一个Perl的pm,可以写程序调用该pm来使用mogilefs系统,对整个系统进行读写操作。
  二、拓扑流程图
http://s3.运维网.com/wyfs02/M01/26/F0/wKioL1NvhAKg3yUJAABDXIpfeuM507.png
  三、说明
  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、实验拓扑:
http://s3.运维网.com/wyfs02/M00/26/F0/wKiom1NvhO3Rpeq_AAA6IAEMPAc838.png
  四、分布式文件系统的实现
  1、配置数据库(172.16.7.10)
1234MariaDB > grant all on *.* to 'root'@'172.16.7.10'; #授权root用户所有权限MariaDB >MariaDB > grant all on *.* to'moguser'@'172.16.%.%' identified by 'mogpass';    #授权mogilefs的tracker连接数据库的用户MariaDB > flush privileges;  2、安装配置mogilefs(三台主机)
  (1)安装
123456# lsanaconda-ks.cfg                        MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpmperl-Net-Netmask-1.9015-8.el6.noarch.rpminstall.log                            MogileFS-Server-mogstored-2.46-2.el6.noarch.rpmperl-Perlbal-1.78-1.el6.noarch.rpminstall.log.syslog                     MogileFS-Utils-2.19-1.el6.noarch.rpmMogileFS-Server-2.46-2.el6.noarch.rpmperl-MogileFS-Client-1.14-1.el6.noarch.rpm# yum -y install *.rpm perl-IO-AIO  (2)配置tracker
  ①、修改mogilefsd的配置文件
12345678910111213141516171819202122# vim /etc/mogilefs/mogilefsd.conf# Enable daemon mode to work in background and use syslogdaemonize = 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 informationdb_dsn = DBI:mysql:mogilefs:host=172.16.7.10    #数据库db_user = moguser      #数据库授权的用户db_pass = mogpass      #用户密码# IP:PORT to listen on for mogilefs client requestslisten = 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# mogdbsetup --dbhost=172.16.7.10 --dbname=mogilefs --dbrootuser=root --dbuser=moguser --dbpass=mogpass  ③、查看7001端口是否成功监听
1# service mogilefsd starthttp://s3.运维网.com/wyfs02/M02/26/F0/wKiom1Nvcc6zOOFAAAAwSHExtzA376.png
  ④、验证数据库
12345678910111213141516171819202122232425MariaDB [(none)]> use mogilefsDatabase changedMariaDB >MariaDB > show tables;+----------------------+| Tables_in_mogilefs   |+----------------------+| checksum             ||>| 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
12345678910# mkdir /www/mogdata/dev3 -pv## chown -R mogilefs.mogilefs /www/mogdata/dev1/ /var/run/mogilefsd//var/run/mogilefsd/##########配置mogstored########## vim /etc/mogilefs/mogstored.confmaxconns = 10000httplisten = 0.0.0.0:7500mgmtlisten = 0.0.0.0:7501docroot = /www/mogdata  (4)查看7500端口监听状态
http://s3.运维网.com/wyfs02/M01/26/F0/wKioL1NvdCLCQqesAAA5x_bCZpk533.png
  (5)添加主机
123# mogadm --trackers=172.16.7.200:7001 host add 172.16.7.200 --ip=172.16.7.200 --status=alive###查看添加主机命令# mogadm --trackers=172.16.7.200:7001 host list  (6)添加设备
123# mogadm --trackers=172.16.7.200:7001 device add 172.16.7.200 1###查看设备命令# mogadm --trackers=172.16.7.200:7001 device list  (7)添加domain
1234# mogadm --trackers=172.16.7.200:7001 domain add images# mogadm --trackers=172.16.7.200:7001 domain add files###列出domain#### mogadm --trackers=172.16.7.200:7001 domain list  (8)添加class
123# mogadm --trackers=172.16.7.200:7001># mogadm --trackers=172.16.7.200:7001># mogadm --trackers=172.16.7.200:7001>  (9)配置其它两台主机的mogilefsd和mogstored
  因为这三台主机的tracker区用一个数据库,所以在安装配置时,不需再重新设定数据库,只配置相应的mogilefsd和mogstored配置文件就可以了
  (10)查看最后的状态信息
  ①、列出所有主机
http://s3.运维网.com/wyfs02/M02/26/F0/wKiom1NveK-Sjks6AAAkYPlqeHY947.png
  ②、列出所有设备
http://s3.运维网.com/wyfs02/M00/26/F0/wKioL1NveKagXg9KAAA97ij9JFk145.png
  ③、列出所有domain
http://s3.运维网.com/wyfs02/M00/26/F0/wKiom1NveOWi69WrAAAyATxdCxY477.png
  (11)上传图片资源到mogilefs
1# mogupload --trackers=172.16.7.200:7001 --domain=images --key='linux.jpg' --file='/root/1.jpg'  (12)使用mogfileinfo获取上传图片的访问路径
http://s3.运维网.com/wyfs02/M02/26/F0/wKiom1Nve7PTN6G6AABWI0ArGu4600.png
http://s3.运维网.com/wyfs02/M02/26/F0/wKioL1Nve_3QBZBEAAiXLe59bQI945.png
  五、配置nginx服务器(172.16.7.10)
  1、解压nginx-mogilefs-module-master.zip模块
  2、先停止nginx服务器,编译安装第三方模块
123cd 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-mastermake && make install  3、修改nginx配置文件
123456789101112131415161718192021222324252627282930313233343536373839404142434445# vim /etc/nginx/nginx.confhttp {    include       mime.types;    default_typeapplication/octet-stream;    #log_formatmain'$remote_addr - $remote_user [$time_local] "$request" '    #                  '$status $body_bytes_sent "$http_referer" '    #                  '"$http_user_agent" "$http_x_forwarded_for"';    #access_loglogs/access.logmain;    sendfile      on;    #tcp_nopush   on;    #keepalive_timeout0;    keepalive_timeout65;    gzipon;    upstream mogcluster {                #定义upstream,做负载均衡轮调      server172.16.7.200:7001;      server172.16.7.201:7001;      server172.16.7.202:7001;    }    server {      listen       80;      server_namelocalhost;      #charset koi8-r;      #access_loglogs/host.access.logmain;      location / {            root   html;            indexindex.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做访问测试
http://s3.运维网.com/wyfs02/M00/26/F0/wKiom1Nvf4Dw3gsvAAjehl3goJc368.png

页: [1]
查看完整版本: nginx反代mogilefs-Linux