设为首页 收藏本站
查看: 679|回复: 0

[经验分享] nginx反代mogilefs实现海量小文件存储

[复制链接]

尚未签到

发表于 2018-11-9 11:10:36 | 显示全部楼层 |阅读模式
  一、简介
  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系统,对整个系统进行读写操作。
  二、拓扑流程图
DSC0000.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、实验拓扑:
DSC0001.png

  四、分布式文件系统的实现
  1、配置数据库(172.16.7.10)
MariaDB [mogilefs]> grant all on *.* to 'root'@'172.16.7.10'; #授权root用户所有权限  
MariaDB [mogilefs]>

  
MariaDB [mogilefs]> grant all on *.* to  'moguser'@'172.16.%.%'>  
MariaDB [mogilefs]> flush privileges;
  2、安装配置mogilefs(三台主机)
  (1)安装
[root@shuishui ~]# 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
  
[root@shuishui ~]# yum -y install *.rpm perl-IO-AIO
  (2)配置tracker
  ①、修改mogilefsd的配置文件
[root@shuishui ~]# 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设定数据库
[root@nmshuishui ~]# mogdbsetup --dbhost=172.16.7.10 --dbname=mogilefs --dbrootuser=root --dbuser=moguser --dbpass=mogpass  ③、查看7001端口是否成功监听
[root@nmshuishui ~]# service mogilefsd start
DSC0002.png

  ④、验证数据库
MariaDB [(none)]> use mogilefs  
Database changed
  
MariaDB [mogilefs]>
  
MariaDB [mogilefs]> 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
[root@shuishui ~]# mkdir /www/mogdata/dev3 -pv  
[root@shuishui ~]#
  
[root@shuishui ~]# chown -R mogilefs.mogilefs /www/mogdata/dev1/ /var/run/mogilefsd//var/run/mogilefsd/
  
[root@shuishui ~]#
  
#########配置mogstored#########
  
[root@shuishui ~]# vim /etc/mogilefs/mogstored.conf
  
maxconns = 10000
  
httplisten = 0.0.0.0:7500
  
mgmtlisten = 0.0.0.0:7501
  
docroot = /www/mogdata
  (4)查看7500端口监听状态
DSC0003.png

  (5)添加主机
[root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 host add 172.16.7.200 --ip=172.16.7.200 --status=alive  
###查看添加主机命令
  
[root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 host list
  (6)添加设备
[root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 device add 172.16.7.200 1  
###查看设备命令
  
[root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 device list
  (7)添加domain
[root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 domain add images  
[root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 domain add files
  
###列出domain###
  
[root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 domain list
  (8)添加class
[root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001>
[root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001>
  
[root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001>  (9)配置其它两台主机的mogilefsd和mogstored
  因为这三台主机的tracker区用一个数据库,所以在安装配置时,不需再重新设定数据库,只配置相应的mogilefsd和mogstored配置文件就可以了
  (10)查看最后的状态信息
  ①、列出所有主机
DSC0004.png

  ②、列出所有设备
DSC0005.png

  ③、列出所有domain
DSC0006.png

  (11)上传图片资源到mogilefs
[root@nmshuishui ~]# mogupload --trackers=172.16.7.200:7001 --domain=images --key='linux.jpg' --file='/root/1.jpg'  (12)使用mogfileinfo获取上传图片的访问路径
DSC0007.png

DSC0008.png

  五、配置nginx服务器(172.16.7.10)
  1、解压nginx-mogilefs-module-master.zip模块
  2、先停止nginx服务器,编译安装第三方模块
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配置文件
[root@shuishui ~]# 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做访问测试
DSC0009.png




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-632781-1-1.html 上篇帖子: nginx 域名跳转一例~~~(rewrite、proxy) 下篇帖子: 利用nginx的proxy_next_upstream实现线路容灾
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表