内容: 一、【理论知识】 MogileFS 是一个分布式文件存储的 解决方案,它能够做到 不需要特殊的核心组件、无单点失败、自动的文件复制、比RAID好多了、传输中立,无特殊协议(客户端可以通过NFS或HTTP来和MogileFS通 信)、简单的命名空间、不用共享任何东西、不需要RAID、不会碰到文件系统本身的不可知情况 等等优点。 相关知识和安装方面的问题可以去看官方的wiki:http://mogilefs.pbwiki.com/。(有可能被GFW了,请使用代理或者安装一个Firefox的gladder插件来访问) [ Mogilefs分为几部分 ] 1. 数据库(MySQL)部分 你可以用 mogdbsetup程序来初始化数据库。数据库保存了Mogilefs的所有元数据,你可以单独拿数据库服务器来做,也可以跟其他程序跑在一起,数据库 部分非常重要,类似邮件系统的认证中心那么重要,如果这儿挂了,那么整个Mogilefs将处于不可用状态。因此最好是HA结构。 2. 存储节点 mogstored 程序的启动将使本机成为一个存储节点。启动时默认去读/etc/mogilefs/mogstored.conf ,具体配置可以参考配置部分。mogstored启动后,便可以通过mogadm增加这台机器到cluster中。一台机器可以只运行一个 mogstored作为存储节点即可,也可以同时运行其他程序。 3. trackers(跟踪器) mogilefsd即 trackers程序,类似mogilefs的wiki上介绍的,trackers做了很多工作,Replication ,Deletion,Query,Reaper,Monitor等等。mogadm,mogtool的所有操作都要跟trackers打交 道,Client的一些操作也需要定义好trackers,因此最好同时运行多个trackers来做负载均衡。trackers也可以只运行在一台机器 上,也可以跟其他程序运行在一起,只要你配置好他的配置文件即可,默认在/etc/mogilefs/mogilefsd.conf。 4. 工具 主要就是mogadm,mogtool这两个工具了,用来在命令行下控制整个mogilefs系统以及查看状态等等。 5. Client Client实际上是一个Perl的pm,可以写程序调用该pm来使用mogilefs系统,对整个系统进行读写操作。 [ 概念定义 ] 可以参考官方wiki的这儿,简单说一下 domain:最高域,在一个域下key是唯一的。 class:包含在domain中,可以针对每一个class定义保存的份数。 key:对文件的唯一标识。 file:文件。 [ 适用性 ] 由于Mogilefs不支持对一个文件的随机读写,因此注定了只适合做一部分应用。比如图片服务,静态HTML服务。 即文件写入后基本上不需要修改的应用,当然你也可以生成一个新的文件覆盖上去。 二、【安装Perl和相关包】 操作系统:Centos 4.6 Perl版本:最低5.8.8,本例5.10.0 注意:请确保你的Perl版本为大于 v5.8.8,不然可能安装会有问题,由于entos 4.6 yum方式安装的最高版本是5.8.5的,所以下载源代码安装 wget http://www.cpan.org/src/perl-5.10.0.tar.gz tar zcvf perl-5.10.0.tar.gz cd perl-5.10.0 ./Configure -des -Dprefix=/usr //覆盖原来yum的安装 make test make install [ MySQL] 安装前请安装好MySQL,如果MySQL Server和MogileFS不是一台机器,请在MogileFS机器安装好MySQL Client,本文使用5.0.6 mysql安装在:/usr/local/mysql 目录,安装完 echo "/usr/local/mysql/lib/mysql" >> /etc/ld.so.conf ldconfig [ Perl包安装] MogileFS需要使用很多相关的Perl包,本例大部分使用cpan在线安装方式,部分无法安装的通过载安装包方式进行 在线安装perl相关模块 perl -MCPAN -e shell cpan>install YAML cpan>install BSD::Resource cpan>install Sys::Syscall cpan>install Time::HiRes cpan>install Danga::Socket cpan>install Net::Netmask cpan>install IO::AIO cpan>install Perlbal cpan>install String::CRC32 cpan>install Gearman::Worker cpan>install Gearman::Server cpan>install Gearman::Client::Async cpan>install DBI cpan>install DBD::mysql --mysql_config=/usr/local/mysql/bin/mysql_config 这里安装不成功,需要使用包安装 cd /root/.cpan/build/DBD-mysql-4.010-Dueh3B perl Makefile.PL --mysql_config=/usr/local/mysql/bin/mysql_config make make instal cpan>install IO::Compress::Zlib::Constantsye cpan>install Compress::Zlib cpan>install IO::stringy //这里安装不成功,需要使用包安装 wget http://search.cpan.org/CPAN/authors/id/D/DS/DSKOLL/IO-stringy-2.110.tar.gz tar zxvf IO-stringy-2.110.tar.gz cd IO-stringy-2.110 perl Makefile.PL make make test make install cpan>install MogileFS::Client cpan>install MogileFS::Server cpan>install MogileFS::Utils 三、【配置MogileFS】 以下操作除非明确指定,不然是以root用户来运行,当然,你也可以使用自己的帐户来执行(除了一些特权操作),另外 10.15.6.28 是本机IP,本试验只使用了一台机器。如果配置过程不太顺利,请反复检查后反复试验。 1. 创建数据库(初始化) 可以预先在数据库服务器上建立好一个叫做 mogilefs 的数据库,便于进行下面的步骤. mogdbsetup --dbhost=localhost --dbname=mogilefs --dbuser=root --dbpass='XXXXXX' --dbhost 是数据库主机地址, --dbname是数据库名,--dbuser是访问该数据库的用户,如果有密码请加上--dbpass选项,最好访问数据库的是超级用户root或者具有很高权限的新建数据库用户,因为MogileFS需要一些比较高权限的初始化操作。 第一次: mogdbsetup --dbhost=localhost --dbname=mogilefs --dbuser=root --dbpass='XXXXXX' 出现以下错误: This will attempt to setup or upgrade your MogileFS database. It won't destroy existing data. Run with --help for more information. Run with --yes to shut up these prompts. Continue? [N/y]: y Failed to connect to DBI:mysql:mysql;host=localhost as specified root user (root): Access denied for user 'root'@'localhost' (using password: NO) 使用root登入mysql创建mogilefs库后再次运行 mogdbsetup --dbhost=localhost --dbname=mogilefs --dbuser=root --dbpass='XXXXXX' 以下提示: his will attempt to setup or upgrade your MogileFS database. It won't destroy existing data. Run with --help for more information. Run with --yes to shut up these prompts. Continue? [N/y]: y InnoDB backend is unavailable for use, force creation of tables by setting USE_UNSAFE_MYSQL=1 in your environment and run this command again. at /usr/lib/perl5/site_perl/5.10.0/MogileFS/Store/MySQL.pm line 224, <STDIN> line 1. 原来mogilefs要使用innodb,编辑my.cnf把skin-innodb 注释,再次运行,成功! mogdbsetup --dbhost=localhost --dbname=mogilefs --dbuser=root --dbpass='XXXXXX' This will attempt to setup or upgrade your MogileFS database. It won't destroy existing data. Run with --help for more information. Run with --yes to shut up these prompts. Continue? [N/y]: y 登入mysql查看创建的库情况 mysql -p Enter password: Welcome to the MySQL monitor. Commands end with ; or /g. Your MySQL connection id is 3 Server version: 5.0.60-enterprise-gpl-log Source Type 'help;' or '/h' for help. Type '/c' to clear the buffer. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mogilefs | | mysql | +--------------------+ 3 rows in set (0.00 sec) mysql> use mogilefs Database changed mysql> show tables; +----------------------+ | Tables_in_mogilefs | +----------------------+ | class | | device | | domain | | file | | file_on | | file_on_corrupt | | file_to_delete | | file_to_delete_later | | file_to_replicate | | fsck_log | | host | | server_settings | | tempfile | | unreachable_fids | +----------------------+ 14 rows in set (0.00 sec) mysql> 创建mysql授权用户: mysql>grant all on mogilefs.* to mogile@locahost identified by "XXXXX" 2. tracker配置 新建tracker配置文件 /etc/mogilefsd.conf ,写入以下文件内容:(请去掉#后面的注意信息) db_dsn DBI:mysql:mogilefs #数据库配置 db_user mogile #数据库用户 db_pass xxxxx #数据库密码 conf_port 6001 #tracker端口 listener_jobs 5 # UPDATE::原先老版本使用NFS,当前版本已经不再使用,可以忽略 # [strike]mog_root = /usr/local/mogilefs/mnt[/strike] #query_jobs = 2 #delete_jobs = 1 #replicate_jobs = 1 #monitor_jobs = 1 #reaper_jobs = 1 #min_free_space = 100 #max_disk_age = 5 #node_timeout = 2 #old_repl_compat = 1 #default_mindevcount = 2 db_dsn指向的是你数据库的位置,如果你数据库不在同一个机器上,请改为: db_dsn DBI:mysql:mogilefs:IP *_jobs用于定义各自工作线程数量, 上面是适合我的MBP的值,仅供测试而已 3、由于mogilefsd不能用root用户启动.所以添加mogile用户 adduser mogilefs 在配置下面以前先启动 trackers server su mogilefs mogilefsd -c /etc/mogilefsd.conf --daemon 4. Storage Server 配置 说明:本例 Perl 的包文件都在 /usr/lib/perl5/5.10.0 目录,如果不是,请自行修改。 用mogadm工具将storage server加到数据库中: mogadm --lib=/usr/lib/perl5/5.10.0 --trackers=localhost:6001 host add mogilestorage --ip=localhost --port=7500 --status=alive (由于本文是在一台机器上配,故trackers的地址和ip地址是一样的) 用下面命令来检测是否成功: mogadm --lib=/usr/lib/perl5/5.10.0 --trackers=localhost:6001 host list 加入一个设备到你的storage server: mogadm -lib=/usr/lib/perl5/5.10.0 -trackers=localhost:6001 device add mogilestorage 1 用下面命令来检测是否成功: mogadm --lib=/usr/lib/perl5/5.10.0 --trackers=localhost:6001 device list Device ID 是唯一的,一旦创建将无法删除,只能mark为dead. 所以,如果你某个磁盘坏了,你mark为dead, 后来又修好了, 那么你必须重新格式化并命名为新的device id, 不支持将device从dead变为alive. 5、新建Storage配置文件: /etc/mogstored.conf 内容是: (请去掉#后面的注意信息) httplisten=0.0.0.0:7500 #HTTP监听端口 mgmtlisten=0.0.0.0:7501 #MongileFS监听端口 docroot=/data/mogilefs #数据存储物理路径 # Server type # Perlbal is the default #server = perlbal # But lighttpd is supported too #server = lighttpd #serverbin = /usr/sbin/lighttpd # Tuning knobs #max_conns = 10000 #opt_iostat 1 建立存放数据的路径:(必须使用root权限才能创建) mkdir -p /data/mogilefs/dev1 说明:mogadm 参数的用法请参考 http://search.cpan.org/~dormando/MogileFS-Utils/mogadm 5. 运行MogileFS 启动 Storage Server mogstored -c /etc/mogstored.conf --daemon 如果没有启动Trackers,请启动 Trackers su mogilefs $ mogilefsd -c /etc/mogilefsd.conf --daemon 查看你所有的服务都起来没有 # ps -ef | grep mogilefsd # ps -ef | grep mogstored 四、【MogileFS使用测试】 生成domain mogadm --lib=/usr/lib/perl5/5.10.0 --trackers=localhost:6001 domain add 91linuxcn 加一个 class 到domain mogadm --lib=/usr/lib/perl5/5.10.0 --trackers=localhost:6001 class add 91linuxcn 91testclass 写一个perl文件试一下test.pl #======================================= use MogileFS::Client; my $mogfs = MogileFS::Client->new(domain=>'91linuxcn', hosts=>['192.168.9.69:6001'], root=>'/home/mogdata',); my $fh = $mogfs->new_file("file_key", "91testclass"); die $fh unless $fh->print($mogfs->readonly); my $content = "file.txt"; @num = $mogfs->store_content("file_key","91testclass",$content); print "@num /n"; my $file_contents = $mogfs->get_file_data("file_key"); print "$file_contents /n"; #$mogfs->delete("file_key"); $fh->print($file_contents); @urls = $mogfs->get_paths("file_key"); print "@urls /n"; #======================================= 执行脚本 # perl test.pl 文返回的内容是:(可能你返回的内容会不同,格式类似就行) 8 SCALAR(0×9ddaaa8) http://localhsot:7500/dev1/0/000/000/0000000008.fid 在浏览器里输入:http://IP:7500/dev1/0/000/000/0000000008.fid,将会看到输出: file.txt 能够访问我们存储的数据,配置成功! 五、【附加内容】 [ MySQL检测代码 ] 如果需要检测你的DBI和MySQL Client是否安装正常,可以使用一下数据库测试代码来检测能否正常连接到MySQL: #======================================= #!/usr/bin/perl # DBI is perl module used to connect to the database use DBI; # hostname or ip of server (for local testing, localhost should work) $config{’dbServer’} = "localhost"; $config{’dbUser’} = "root"; $config{’dbPass’} = ""; $config{’dbName’} = "test"; $config{’dataSource’} = "DBI:mysql:$config{’dbName’}:$config{’dbServer’}"; # Connect to MySQL my $dbh = DBI->connect($config{’dataSource’},$config{’dbUser’},$config{’dbPass’}) or die "Can’t connect to $config{’dataSource’}<br>$DBI::errstr"; print "Connected successfully<br>"; $dbh->disconnect(); #======================================= 六、安装mogilefs 的PHP扩展 PHP扩展官方站:http://capoune.net/mogilefs/ wget http://capoune.net/mogilefs/dist/mogilefs-php-0.7.4.tar.gz tar zxvf mogilefs-php-0.7.4.tar.gz cd mogilefs /usr/local/php/bin/phpize ./configure --with-mogilefs --with-php-config=/usr/local/php/bin/php-config make 出现: /usr/local/src/mogilefs/mogilefs.c:32:23: error: ne_socket.h: No such file or directory /usr/local/src/mogilefs/mogilefs.c:33:24: error: ne_session.h: No such file or directory /usr/local/src/mogilefs/mogilefs.c:34:22: error: ne_utils.h: No such file or directory /usr/local/src/mogilefs/mogilefs.c:35:21: error: ne_auth.h: No such file or directory /usr/local/src/mogilefs/mogilefs.c:36:22: error: ne_basic.h: No such file or directory /usr/local/src/mogilefs/mogilefs.c: In function 'zif_mogilefs_put': /usr/local/src/mogilefs/mogilefs.c:590: error: 'ne_session' undeclared (first use in this function) /usr/local/src/mogilefs/mogilefs.c:590: error: (Each undeclared identifier is reported only once /usr/local/src/mogilefs/mogilefs.c:590: error: for each function it appears in.) /usr/local/src/mogilefs/mogilefs.c:590: error: 'sess' undeclared (first use in this function) /usr/local/src/mogilefs/mogilefs.c:591: error: 'ne_request' undeclared (first use in this function) /usr/local/src/mogilefs/mogilefs.c:591: error: 'req' undeclared (first use in this function) /usr/local/src/mogilefs/mogilefs.c:661: error: 'NE_OK' undeclared (first use in this function) make: *** [mogilefs.lo] Error 1 原来是没有安装 neon 动态库开发包,这里使用yum直接安装,也可以下载包安装,下载地址:http://www.webdav.org/neon/ yum -y install neon-devel.i386 make clean //如果没有做这个,错误照旧 ./configure --with-mogilefs --with-php-config=/usr/local/php/bin/php-config make make install 编译成功,注意这里的路径信息 编辑php.ini 找到: extension_dir = "./" 改成 extension_dir = "/usr/local/php-fcgi-5.2.6/lib/php/extensions/no-debug-zts-20060613/" extension = mogilefs.so 写个phpinfo探针查看,如果看到以下信息,恭喜,成功了 mogilefs mogilefs support enabled 之后就是写个程序测试了 本文安装全过程参考: http://blog.csdn.net/heiyeshuwu/archive/2008/09/18/2948782.aspx [ 相关参考 ] mogilefs 最新版本安装: http://www.wuei.net/?p=33 Mogilefs学习: http://blog.chifeng.name/?p=220 mogileFS的工作方式: http://www.sunnyu.com/?p=32 mogileFS分布式文件存储解决方案: http://www.sunnyu.com/?p=10 [ 扩展阅读 ] 编译mogileFS的php模块: http://www.sunnyu.com/?p=78 mogileFS体系结构分析: http://www.sunnyu.com/?p=31 mogileFS体系结构分析: http://www.sunnyu.com/?p=30 http://night9.cn/2008/06/09/270.html

分布式文件系统mogileFS相关推荐

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

        一,简介    MogileFS是一款开源的分布式文件存储系统,由LiveJournal旗下的Danga Interactive公司开发.Danga团队开发了包括 Memcached.Mogi ...

  2. [转]分布式文件系统 MogileFS 安装手册

    一.[理论知识] MogileFS 是一个分布式文件存储的解决方案,它能够做到不需要特殊的核心组件.无单点失败.自动的文件复制.比RAID好多了.传输中立,无特殊协议(客户端可以通过NFS或HTTP来 ...

  3. nginx 文件服务器 开源,在开源分布式文件系统MogileFS 中使用 Nginx

    然后修改你的 mogstored.conf 这个文件,关掉原来的 Perlbal 的监听.但注意了 mogstored 这个服务还是必须启动的,因为他会监控硬盘的好坏和 IO 的性能,只要给 serv ...

  4. 分布式文件系统之MogileFS的使用

    一.mogilefs简介 MogileFS 是一个开源的分布式文件系统,用于组建分布式文件集群,由 LiveJournal 旗下 Danga Interactive 公司开发,Danga 团队开发了包 ...

  5. [转]Unix下针对邮件,搜索,网络硬盘等海量存储的分布式文件系统项目(关于GFS、MogileFS分布式文件系统邮件列表)

    Unix下针对邮件,搜索,网络硬盘等海量存储的分布式文件系统项目 :Google是当前最有影响的Web搜索引擎,它利用一万多台廉价PC机构造了一个高性能.超大存储容量.稳定.实用的巨型Linux集群. ...

  6. SHELL脚本自动化部署MFS分布式文件系统

    前言:在我们运维中,最常见的文件存储系统大概就是NFS了,但是随着网站压力不断增加,NFS渐渐不能满足企业数据增长需求,有木有自动扩展.高效.部署.实施方便快捷的分布式存储供我们使用呢?那我们来看一下 ...

  7. 分布式文件系统Fastdfs 详细安装笔记

    简介 FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实现,支持Linux.FreeBSD.AIX等UNIX系统.它只能通过专有API对文件进行存取访问,不支持POSIX接口 ...

  8. 多种分布式文件系统简介

    2019独角兽企业重金招聘Python工程师标准>>> 分布式文件系统 GFS以及 FastDFS.mogileFS.HDFS.TFS等类GFS系统都不是系统级的分布式文件系统,而是 ...

  9. 分布式文件系统FastDFS架构剖析

    文/余庆 FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实现,支持Linux.FreeBSD.AIX等UNIX系统.它只能通过专有API对文件进行存取访问,不支持POSIX ...

最新文章

  1. 深度学习与计算机视觉:基于Python的神经网络的实现
  2. 批处理 探测在线计算机,批处理(bat)用来监测Windows网络状态脚本
  3. GridView、Repeater合并单元格
  4. python人脸识别opencv_Python与OpenCV实时人脸识别
  5. 二分查找(对半搜索)
  6. 连接驱动_在jdbc中完成对于jdbc参数、jdbc变量,加载驱动,创建连接的封装
  7. PHP操作MongoDB学习笔记
  8. 大数据学习笔记38:Hive - 内置函数(1)
  9. swift 自定义TabBarItem
  10. 你以为用了 BigDecimal 后,计算结果就一定精确了?
  11. install openni2 on ubuntu
  12. Java继承_JAVA的三大特性
  13. http://www.cnblogs.com/qianmojing/p/6142178.html
  14. 微信群发工具,纯Python编写~
  15. 海外服务器租用主要要看三个方面
  16. 投票动态代理proxy案例(java)
  17. 2021年抖音0粉丝无货源直播带货最新技巧
  18. Python: PS 图像调整--饱和度调整
  19. java腰间盘终结者_大枣加大葱竟是腰椎间盘突出的终结者,一用一个好,腰不好不要错过...
  20. 你所不知道的OneNote骚操作 | 告别枯燥 OneNote让数学教学更有趣

热门文章

  1. C++上机报告(示例)
  2. C语言游戏必备:光标定位和颜色设置
  3. 叮咚谁呀我是送信的邮递员呀_幼师必备|幼儿园冬季室内游戏
  4. 2021年新西兰经济发展研究报告
  5. 车载测试——工作中常用到的adb 命令
  6. c++项目 基于(多态,封装、继承类)——RPG小游戏 勇闯地下城
  7. jmeter安装与介绍
  8. 平面设计培训需要学习多久
  9. CSAI首席顾问教你:如何成为更合格的架构师
  10. c++——vc++中的六种Runtime Library的类型