深入浅出分布式文件系统MogileFS集群

    一,简介   

MogileFS是一款开源的分布式文件存储系统,由LiveJournal旗下的Danga Interactive公司开发。Danga团队开发了包括 Memcached、MogileFS、Perlbal 等多个知名的开源项目。目前MogileFS的日益成熟使用此解决方法的公司越来越多,例如日本的又拍、digg、中国的豆瓣、1号店、大众点评、搜狗和安居客等,分别为所在的组织或公司管理着海量的图片。和传统网络存储不一样的是分布式文件系统是将数据分散存储至多台服务器上,而网络文件系统往往是将所有的数据存放在一起,存储服务器将成为系统可用性的瓶颈,不能满足大规模的存放所有数据需求。分布式文件系统采用可扩展的系统结构,利用多台存储设备分别存储,分担服务器负荷,利用位置服务器定位存储信息,因此不仅能够提升系统性能同时还易于扩展。

    二、实现组件

MogileFS主要有三个部分组成:

①server端,包括两个部分,mogilefsd和mogstored两个应用程序,tracker是mogilefsd的实现方式,它通过数据库来保证元数据信息,比如站点的domian、class、host等,mogstored则为存储节点,默认监听7500端口,接受客服端的文件存储请求,在MogileFS安装完后,要运行mogadm工具将所有的store node注册到mogilefsd的数据库里,mogilefsd会对这些节点进行管理和监控。

②utils工具集,主要是MogileFS的一些管理工具如mogadm等。

③客服端API,MogileFS的API接口很多,常用的的时间方式有php,perl,python,java等,使用这些语言可进行编写客服端程序,实现文件的备份管理功能。

 三、MogileFS的特性及原理

MogileFS特性:

1.应用层服务,不需要使用和兴组件

2.无单点故障,tracker为跟踪点,mogstored为存储节点,mysql为储存元数据节点,建议使用MySQL做高可用

3.传输中立,无特殊协议,可用通过nfs和http实现通信

4.简单的命名空间,没有目录,直接存储在存储空间上,通过域来实现,不共享任何数据

  MogileFS工作原理:MogileFS主要由mogilefsd和mogstored两应用程序提供服务,tracker节点借助数据库保存各个节点文件的元数据信息,保存每个域中所哟的存储位置分布,用于实现快速定位同时监控各个节点,通知客户端存储区域位置并指挥storaged节点复制数据副本,进程名为mogilefsd监听与7001端口。storage节点为实际存放文件的地方,存储节点可以是http服务器,及其其他web服务,storage节点可自动维护键值的对应关系,storage节点前端可使用nginx进行反代,此时需要nginx-mogilefs-module-master模块,此服务监听与7501端口,进程名为mogstored.一个域中的键值是唯一的,一个mogilefs可以有多个域,域可以有多个存储设备,每个设备都有数据的容器,称之为domain.每个存储节点为一个主机(host),一个主机上可以有多个存储设备,每个设备有id号,用来定位。复制的最小单元为class,文件属性管理,定义文件存储在不同的设备上的份数。

    四、MogileFS安装及其配置实现

    安装说明:此实验可以仅适用两台服务进行,一台服务即当做server端,又当做存储节点同时还是mysql服务器,在每台服务器上部署tracker管理并监控节点。

#在两服务器上均安装如下rpm包
yum -y install per-IO-AIO    #mogilefsd和mogstored依赖于此包,先解决依赖关系。
yum -y install MogileFS-Server-2.46-2.el6.noarch.rpm  #安装sever端
yum -y install MogileFS-server-mogilefsd-2.46-2.el6.noarch.rpm #安装mogilefsd 
yum -y install MogileFS-Server-mogstored-2.46-2.rl6.noarch.rpm #安装mogstored

创建数据库及授权修改相应的配置文件

grant all privileges on mogdb.* to ‘moguser‘@‘127.0.0.1‘ identified by ‘pass‘; 
grant all privileges on mogdb.* to ‘moguser‘@‘localhost‘ identified by ‘pass‘; 
flush privileges; 
#修改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:mogdb:host=127.0.0.1 #修改为上面授权的账号密码及其主机
db_user = moguser #修改为上面授权的账号密码及其主机
db_pass = pass  #修改为上面授权的账号密码及其主机
# 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
# 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
# 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
# Consider setting this to be larger than the largest file you
# would normally be uploading.
#min_free_space = 200
# Number of seconds to wait for a storage node to respond.
# default: 2
# 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
#mogstored配置文件,一般无需修改,自行根据业务需求做决定 
maxconns = 10000
httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501
docroot = /data/mogstored

#将上诉配置考别一份至其他主机,并且启动服务,安装后默认在Init.d下有启动脚本
service mogilefsd start   
service mogstored start 
[[email protected] mogilefs]# ss -tnl |grep *.7.* #默认mogilefsd监听7001,mogstored监听7501及其7501
LISTEN     0      128                       *:7500                     *:*
LISTEN     0      128                       *:7501                     *:*
LISTEN     0      128                       *:7001                     *:*
[[email protected] mogilefs]#
#设置数据库,存储元数据
mogdbsetup --dbhost=127.0.0.1 --dbpass=pass 
mogdbsetup --dbname=mogdb --dbuser=moguser --dbhost=127.0.0.1 --dbpass=pass 
mogadm host add 10.1.100.1 --ip=10.1.100.1 --port=7500 --status=alive #添加host,storaged
mogadm domain add files #添加域
mogadm domain add images 

[[email protected] ~]# mogstats --db_dsn="DBI:mysql:mogdb:host=localhost" --db_user="moguser" --db_pass="pass" --stats="all"
Fetching statistics... (all)

Statistics for devices...  #表示此storage设备存活 
  device     host                   files     status
  ---------- ---------------- ------------ ----------
  dev1       10.1.100.1          2      alive 
  dev3       10.1.100.2          1      alive
  dev4       10.1.100.2          1      alive
  ---------- ---------------- ------------ ----------

Statistics for file ids...
  Max file id: 9

Statistics for files...  #添加的域显示结果
  domain               class           files    size (m)  fullsize (m)
  -------------------- ----------- ---------- ----------- -------------
  files                default             1           0             0
  images               default             1           0             0
  -------------------- ----------- ---------- ----------- -------------

Statistics for replication... #默认的类示结果
  domain               class        devcount      files
  -------------------- ----------- ---------- ----------
  files                default             2          1
  images               default             2          1
  -------------------- ----------- ---------- ----------

Statistics for replication queue...
  status                      count
  -------------------- ------------
  -------------------- ------------

Statistics for delete queue...
  status                      count
  -------------------- ------------
  -------------------- ------------

Statistics for general queues...
  queue           status                      count
  --------------- -------------------- ------------
  --------------- -------------------- ------------

done
[[email protected] ~]#
[[email protected]~]# mogupload --trackers=10.1.100.1 --domain=files --key=‘/issue‘ --file=‘/etc/issue‘ #上传文件至files域内,指明可Key和上传的文件目录
[[email protected] ~]# moglistkeys --trackers=10.1.100.1 --domain=files #显示域内文件
/fstab.txt
/issue
[[email protected] ~]# mogfetch --trackers=10.1.100.1 --domain=files --key=‘/issue‘ --file=‘/tmp/issue‘ #下载域内文件至某目录 
[[email protected] ~]# ll /tmp/issue
-rw-r--r--. 1 root root 47 11月 25 16:48 /tmp/issue
-bash: ogfileinfo: command not found
[[email protected] ~]# mogfileinfo --tracker=10.1.100.1 --domain=files --key=‘/fstab.txt‘
- file: /fstab.txt
     class:              default
  devcount:                    2
    domain:                files
       fid:                    5
       key:           /fstab.txt
    length:                 1115
 -http://10.1.100.2:7500/dev4/0/000/000/0000000005.fid        #可通过此URL访问到相应的资源
 -http://10.1.100.1:7500/dev1/0/000/000/0000000005.fid        #可通过此URL访问到相应的资源
[[email protected] ~]#

    实验结果图示:

    五、实战nginx前端反代mogfilefs及负载均衡

    要求说明:在前期那配置nginx做反代将用户的请求调度至后端的MogileFS,此实验依赖于nginx-mogilefs-module模块,需在编译时加上此模块。

#实战配置如下所示:
#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

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 mogtrackers { #定义一个upstream组
		server 10.1.100.1:7001;
		server 10.1.100.2: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/ {
			mogilefs_tracker mogtrackers; #在此调用此mogtrackers即可实现反代至mogilefs后端
		        mogilefs_domain images; #域为images域 
			mogilefs_methods get;   #请求的方法为get

			mogilefs_pass {
				proxy_pass $mogilefs_path;
				proxy_hide_header Content-Type;
				proxy_buffering off;
			}
			expires 1h;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache‘s document root
        # concurs with nginx‘s one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

图示:此时可通过http://uri/images/aqua.jpg进行访问,而不是原来很长的路径名进行访问。


总结:在大型站点中,mogilefs的重要性不言而喻,尤其是图片存储量很大的网站例如:某宝,某东等,此配置过程中,mysql易于成为单点故障,所以可将其做主从复制,同时结合MySQL半同步复制,可降低数据的丢失风险。在配置nginx做反向代理时,大部分步骤和其他反代类是不同的是,需将模块编译进nginx中才能使用此模块功能。

时间: 2024-12-07 09:33:25

深入浅出分布式文件系统MogileFS集群的相关文章

分布式文件系统FastDFS集群部署

1.源码开放下载地址:https://github.com/happyfish100 早期源码开放下载地址:https://sourceforge.net/projects/fastdfs/files/ 官网论坛:http://bbs.chinaunix.net/forum-240-1.html 2.系统架构如下 文件上传流程 1.client询问tracker上传到的storage,不需要附加参数: 2.tracker返回一台可用的storage: 3.client直接和storage通讯完成

nginx代理mogilefs集群实现

nginx代理mogilefs集群实现 一.实验拓扑 二.实验环境 三.实验步骤 1.节点部署 192.168.0.3 node1 [Nginx,Tracker,Storage,Mariadb] 192.168.0.4 node2 [Tracker,Storage] 192.168.0.5 node3 [Tracker,Storage] 2.初始化工作 配置好三台服务器IP,hosts文件等网络环境,时间同步以及以下的rpm包安装 注:以下操作在三个节点都执行 #下载rpm包(附件有提供) Mo

高可用结合gfs2,,实现集群文件系统以及集群逻辑卷。

为什么要集群文件系统,在什么场景中适用我就用一句话来概括,当多个节点需要读写同一个文件系统时,需要使用集群文件系统,它可以将文件系统持有的锁信息传递到各个节点. 实验一.将iSCSI共享出来的磁盘,做成gfs2文件系统,实现多个节点可挂载同一个文件系统,保证数据同步 实验平台:RHEL6 环境拓扑: ansible配置前面文章有讲到    略 iSCSI服务器配置    略 用控制端让三个节点安装需要的程序包. ansible all -m shell -a 'yum install cman

分布式文件系统mogilefs的简单应用

简介 MogileFS是一个开源的分布式文件存储系统,由LiveJournal旗下的DangaInteractive公司开发.Danga团队开发了包括Memcached.MogileFS.Perlbal等多个知名的开源项目. 特性 1.应用层:用户空间文件系统,无须特殊的核心组件 2.无单点:(tracker, mogstore, database(MySQL)) 3.自动文件复制:复制的最小单位不是文件,而class: 4.传输中立,无特殊协议:可以通过NFS或HTTP进行通信: 5.简单的命

分布式文件系统MogileFS

MogileFS 是一个开源的分布式文件系统,用于组建分布式文件集群,由 LiveJournal 旗下 Danga Interactive 公司开发,Danga 团队开发了包括 Memcached.MogileFS.Perlbal 等不错的开源项目:(注:Perlbal 是一个强大的 Perl 写的反向代理服务器).目前国内使用 MogileFS 的有图片托管网站 yupoo 等. MogileFS 特性 1. 应用层 – 不需要特殊的核心组件 2. 无单点失败 - MogileFS分布式文件存

分布式文件系统 ~MogileFS~

  一.分布式文件系统 分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连,也就是集群文件系统,可以支持大数量的节点以及PB级的数量存储.相对地,在一个分享的磁盘文件系统中,所有节点对数据存储区块都有相同的访问权,在这样的系统中,访问权限就必须由客户端程序来控制.分布式文件系统可能包含的功能有:透通的数据复制与容错.也就是说,即使系统中有一小部份的节点脱机,整体来说系统仍然可以持续运作而不会有数据

分布式文件系统MogileFS的使用

MogileFS简介 MogileFS是一套开源的分布式存储组件,由LiveJournal旗下的Danga Interactive研发,主要应用于存储海量的小文件. MogileFS有3个组件: 1)Tracker Nodes:是文件系统集群的核心节点,借助数据库节点保存元数据,主要功能包括监控后端Storage节点,及指示Storage节点完成数据的添加.删除.查询,及节点之间数据的复制等,该节点上运行的进程为mogilefsd.往往Tracker节点有多个,以实现负载均衡和高可用: 2)St

分布式机器学习的集群方案介绍之HPC实现

机器学习的基本概念 机器学习方法是计算机利用已有的数据(经验),得出了某种模型(迟到的规律),并利用此模型预测未来(是否迟到)的一种方法.目前机器学习广泛应用于广告投放.趋势预测.图像识别.语音识别.自动驾驶和产品推荐等众多领域. 在确定了问题模型之后,根据已知数据寻找模型参数的过程就是训练,训练过程就是不断依据训练数据来调整参数的迭代,从而使依据模型作出的预测结果更加准确. HPC的基本概念 HPC就是高性能计算或高性能计算集群的简写.为了追求高性能,HPC的工作负载一般直接运行在Linux系

EhCache 分布式缓存/缓存集群

开发环境: System:Windows JavaEE Server:tomcat5.0.2.8.tomcat6 JavaSDK: jdk6+ IDE:eclipse.MyEclipse 6.6 开发依赖库: JDK6. JavaEE5.ehcache-core-2.5.2.jar Email:[email protected] Blog:http://blog.csdn.net/IBM_hoojo http://hoojo.cnblogs.com/ http://hoojo.blogjava.