分布式文件系统mogileFS
内容: 一、【理论知识】 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相关推荐
- 深入浅出分布式文件系统MogileFS集群
一,简介 MogileFS是一款开源的分布式文件存储系统,由LiveJournal旗下的Danga Interactive公司开发.Danga团队开发了包括 Memcached.Mogi ...
- [转]分布式文件系统 MogileFS 安装手册
一.[理论知识] MogileFS 是一个分布式文件存储的解决方案,它能够做到不需要特殊的核心组件.无单点失败.自动的文件复制.比RAID好多了.传输中立,无特殊协议(客户端可以通过NFS或HTTP来 ...
- nginx 文件服务器 开源,在开源分布式文件系统MogileFS 中使用 Nginx
然后修改你的 mogstored.conf 这个文件,关掉原来的 Perlbal 的监听.但注意了 mogstored 这个服务还是必须启动的,因为他会监控硬盘的好坏和 IO 的性能,只要给 serv ...
- 分布式文件系统之MogileFS的使用
一.mogilefs简介 MogileFS 是一个开源的分布式文件系统,用于组建分布式文件集群,由 LiveJournal 旗下 Danga Interactive 公司开发,Danga 团队开发了包 ...
- [转]Unix下针对邮件,搜索,网络硬盘等海量存储的分布式文件系统项目(关于GFS、MogileFS分布式文件系统邮件列表)
Unix下针对邮件,搜索,网络硬盘等海量存储的分布式文件系统项目 :Google是当前最有影响的Web搜索引擎,它利用一万多台廉价PC机构造了一个高性能.超大存储容量.稳定.实用的巨型Linux集群. ...
- SHELL脚本自动化部署MFS分布式文件系统
前言:在我们运维中,最常见的文件存储系统大概就是NFS了,但是随着网站压力不断增加,NFS渐渐不能满足企业数据增长需求,有木有自动扩展.高效.部署.实施方便快捷的分布式存储供我们使用呢?那我们来看一下 ...
- 分布式文件系统Fastdfs 详细安装笔记
简介 FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实现,支持Linux.FreeBSD.AIX等UNIX系统.它只能通过专有API对文件进行存取访问,不支持POSIX接口 ...
- 多种分布式文件系统简介
2019独角兽企业重金招聘Python工程师标准>>> 分布式文件系统 GFS以及 FastDFS.mogileFS.HDFS.TFS等类GFS系统都不是系统级的分布式文件系统,而是 ...
- 分布式文件系统FastDFS架构剖析
文/余庆 FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实现,支持Linux.FreeBSD.AIX等UNIX系统.它只能通过专有API对文件进行存取访问,不支持POSIX ...
最新文章
- 深度学习与计算机视觉:基于Python的神经网络的实现
- 批处理 探测在线计算机,批处理(bat)用来监测Windows网络状态脚本
- GridView、Repeater合并单元格
- python人脸识别opencv_Python与OpenCV实时人脸识别
- 二分查找(对半搜索)
- 连接驱动_在jdbc中完成对于jdbc参数、jdbc变量,加载驱动,创建连接的封装
- PHP操作MongoDB学习笔记
- 大数据学习笔记38:Hive - 内置函数(1)
- swift 自定义TabBarItem
- 你以为用了 BigDecimal 后,计算结果就一定精确了?
- install openni2 on ubuntu
- Java继承_JAVA的三大特性
- http://www.cnblogs.com/qianmojing/p/6142178.html
- 微信群发工具,纯Python编写~
- 海外服务器租用主要要看三个方面
- 投票动态代理proxy案例(java)
- 2021年抖音0粉丝无货源直播带货最新技巧
- Python: PS 图像调整--饱和度调整
- java腰间盘终结者_大枣加大葱竟是腰椎间盘突出的终结者,一用一个好,腰不好不要错过...
- 你所不知道的OneNote骚操作 | 告别枯燥 OneNote让数学教学更有趣