一、简介
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 | MariaDB [mogilefs]> grant all on *.* to ‘root‘ @ ‘172.16.7.10‘ ; #授权root用户所有权限 MariaDB [mogilefs]> MariaDB [mogilefs]> grant all on *.* to ‘moguser‘ @ ‘172.16.%.%‘ identified by ‘mogpass‘ ; #授权mogilefs的tracker连接数据库的用户 MariaDB [mogilefs]> flush privileges; |
2、安装配置mogilefs(三台主机)
(1)安装
1 2 3 4 5 6 | [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的配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | [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设定数据库
1 | [root@nmshuishui ~] # mogdbsetup --dbhost=172.16.7.10 --dbname=mogilefs --dbrootuser=root --dbuser=moguser --dbpass=mogpass |
③、查看7001端口是否成功监听
1 | [root@nmshuishui ~] # service mogilefsd start |
④、验证数据库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | MariaDB [(none)]> use mogilefs Database changed MariaDB [mogilefs]> MariaDB [mogilefs]> show tables; +----------------------+ | Tables_in_mogilefs | +----------------------+ | checksum | | class | | 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
1 2 3 4 5 6 7 8 9 10 | [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端口监听状态
(5)添加主机
1 2 3 | [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)添加设备
1 2 3 | [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
1 2 3 4 | [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
1 2 3 | [root@nmshuishui ~] # mogadm --trackers=172.16.7.200:7001 class add images class1 [root@nmshuishui ~] # mogadm --trackers=172.16.7.200:7001 class add images class2 [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 2 3 | 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配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | [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做访问测试
nginx反代mogilefs,布布扣,bubuko.com
原文:http://songoo.blog.51cto.com/8620619/1416751