Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2477403
  • 博文数量: 225
  • 博客积分: 11622
  • 博客等级: 上将
  • 技术积分: 7358
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-18 10:05
个人简介

我们的生活是多么美好呀!!!!

文章存档

2013年(2)

2012年(9)

2011年(59)

2010年(8)

2009年(35)

2008年(112)

分类: LINUX

2010-09-17 14:34:10

一、【理论知识】
MogileFS 是一个分布式文件存储的 解决方案,它能够做到 不需要特殊的核心组件、无单点失败、自动的文件复制、比RAID好多了、传输中立,无特殊协议(客户端可以通过NFS或HTTP来和MogileFS通 信)、简单的命名空间、不用共享任何东西、不需要RAID、不会碰到文件系统本身的不可知情况 等等优点。
相关知识和安装方面的问题可以去看官方的wiki:

。(有可能被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和相关包】
[ 安装环境 ]
操作系统:RHEL 4 (AS 4)
Perl版本:Perl v5.8.8
注意:请确保你的Perl版本为大于 v5.8.8,不然可能安装会有问题,另外,本文所有操作都是在一台机器上完成,可能多台机器上稍微有些不同,请自行调整
[ MySQL ]
安装前请安装好MySQL,如果MySQL Server和MogileFS不是一台机器,请在MogileFS机器安装好MySQL Client,本文假设MySQL Client安装在:/usr/local/mysql 目录,安装完客户端后请建立一个软链接:
ln -s /usr/local/mysql/lib/libmysqlclient.so.15 /usr/lib/libmysqlclient.so.15
[ Perl包安装 ]
因为MogileFS需要使用很多相关的Perl包,请逐一按照一下次序安装,本文采用的是比较笨,比较简单的安装方法,逐个把包下载回来本机手工安装,没有使用cpan的包安装方式。
要下载包,请在

中输入包名,然后下载,一般提供的是最新版,如果版本跟下面不一致,请以最新版为准。
为方便使用,本文包下载地址列表:(不保证您阅读本文的时候有效)






















包安装次序:(务必按照本次序进行)
BSD-Resource-1.2901.tar.gz
Sys-Syscall-0.22.tar.gz

Time-HiRes-1.9715.tar.gz
Danga-Socket-1.57.tar.gz

Net-Netmask-1.9015.tar.gz
IO-AIO-3.07.tar.gz (本包要求Perl v5.8.8以上)
Perlbal-1.71.tar.gz

String-CRC32-1.4.tar.gz
Gearman-1.07.tar.gz
Gearman-Client-Async-0.93.tar.gz
Gearman-Server-1.08.tar.gz

#make test 有可能会有一个错误,不用管它
DBI-1.607.tar.gz
DBD-mysql-4.008.tar.gz
#以下命令假设MySQL服务器是在本机
perl Makefile.PL  –testhost=localhost –testuser=root –mysql_config=/usr/local/mysql/bin/mysql_config

IO-Compress-Base-2.015.tar.gz
IO-Compress-Zlib-2.015.tar.gz
Compress-Raw-Zlib-2.015.tar.gz
Compress-Zlib-2.015.tar.gz
IO-stringy-2.110.tar.gz

MogileFS-Client-1.08.tar.gz
mogilefs-server-2.20.tar.gz
MogileFS-Utils-2.13.tar.gz

一定要按以上顺序安装,解压缩,生成Makefile,测试,安装 这样的步骤来执行,命令是:
# tar zxvf xxxxx.tar.gz
# cd xxxxx
# perl Makefile.PL
# make
# make test
# make install
这样就安装成功了,注意make test的错误提示,如果不是很严重的错误提示,基本可以忽略继续下一步。
三、【配置MogileFS】
以下操作除非明确指定,不然是以root用户来运行,当然,你也可以使用自己的帐户来执行(除了一些特权操作),另外 10.15.6.28 是本机IP,本试验只使用了一台机器。如果配置过程不太顺利,请反复检查后反复试验。
1. 创建数据库(初始化)
可以预先在数据库服务器上建立好一个叫做 mogilefs 的数据库,便于进行下面的步骤.
#mogdbsetup –dbhost=10.15.6.28 –dbname=mogilefs –dbuser=root
–dbhost 是数据库主机地址, –dbname是数据库名,–dbuser是访问该数据库的用户,如果有密码请加上–dbpass选项,最好访问数据库的是超级用户root或者具 有很高权限的新建数据库用户,因为MogileFS需要一些比较高权限的初始化操作。
2. tracker配置
新建tracker配置文件 /etc/mogilefsd.conf ,写入以下文件内容:(请去掉#后面的注意信息)
db_dsn DBI:mysql:mogilefs #数据库配置
db_user mogile #数据库用户
db_pass 123123 #数据库密码
conf_port 6001 #tracker端口
listener_jobs 5
db_dsn指向的是你数据库的位置,如果你数据库不在同一个机器上,请改为:
db_dsn DBI:mysql:mogilefs:127.0.0.1
由于mogilefsd不能用root用户启动.所以添加mogile用户
# adduser mogile
在配置下面以前先启动 trackers server
# su mogile
# mogilefsd -c /etc/mogilefsd.conf –daemon
3. Storage Server 配置
说明:以下命令假设你的 Perl 的包文件都在 /usr/lib/perl5/5.8.8 目录,如果不是,请自行修改。
用mogadm工具将storage server加到数据库中:
# mogadm –lib=/usr/lib/perl5/5.8.8 –trackers=10.15.6.28:6001 host add mogilestorage –ip=10.15.6.28 –port=7500 –status=alive
(由于本文是在一台机器上配,故trackers的地址和ip地址是一样的)
用下面命令来检测是否成功:
# mogadm –lib=/usr/lib/perl5/5.8.8 –trackers=10.15.6.28:6001 host list
加入一个设备到你的storage server:
# mogadm -lib=/usr/lib/perl5/5.8.8 -trackers=10.15.6.28:6001 device add mogilestorage 1
用下面命令来检测是否成功:
# mogadm –lib=/usr/lib/perl5/5.8.8 –trackers=10.15.6.28:6001 device list
Device ID 是唯一的,一旦创建将无法删除,只能mark为dead. 所以,如果你某个磁盘坏了,你mark为dead, 后来又修好了,
那么你必须重新格式化并命名为新的device id, 不支持将device从dead变为alive.
新建Storage配置文件: /etc/mogstored.conf 内容是: (请去掉#后面的注意信息)
httplisten=0.0.0.0:7500 #HTTP监听端口
mgmtlisten=0.0.0.0:7501 #MongileFS监听端口
docroot=/opt/mogdata #数据存储物理路径
建立存放数据的路径:(必须使用root权限才能创建)
# mkdir -p /opt/mogdata/dev1
说明:mogadm 参数的用法请参考

4. 运行MogileFS
启动 Storage Server
# mogstored -c /etc/mogstored.conf –daemon
如果没有启动Trackers,请启动 Trackers
# su mogile
$ mogilefsd -c /etc/mogilefsd.conf –daemon
查看你所有的服务都起来没有
# ps -ef | grep mogilefsd
# ps -ef | grep mogstored
四、【MogileFS使用测试】
生成domain
# mogadm –lib=/usr/lib/perl5/5.8.8 –trackers=10.15.6.28:6001 domain add testdomain
加一个 class 到domain
# mogadm –lib=/usr/lib/perl5/5.8.8 –trackers=10.15.6.28:6001 class add testdomain testclass
写一个perl文件试一下test.pl
#=======================================
use MogileFS::Client;
my $mogfs = MogileFS::Client->new(domain=>‘testdomain’, hosts=>['10.0.22.184:6001'], root=>‘/home/xiehl/mogdata’,);
my $fh = $mogfs->new_file(“file_key”, “testclass”);
die $fh unless $fh->print($mogfs->readonly);
my $content = “file.txt”;
@num = $mogfs->store_content(“file_key”,“testclass”,$content);
print
[email=“@num]“@num[/email]
\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
[email=“@urls]“@urls[/email]
\n”;
#=======================================
执行脚本
# perl test.pl
本文返回的内容是:(可能你返回的内容会不同,格式类似就行)
8
SCALAR(0×9ddaaa8)
http://10.15.6.28:7500/dev1/0/000/000/0000000008.fid
在浏览器里输入:
http://10.15.6.28: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’}
$DBI::errstr”;
print “Connected successfully
”;
$dbh->disconnect();
#=======================================
[ 相关参考 ]
mogilefs 最新版本安装:

Mogilefs学习:
http://blog.chifeng.name/?p=220
mogileFS的工作方式:

mogileFS分布式文件存储解决方案:

[ 扩展阅读 ]
编译mogileFS的php模块:

mogileFS体系结构分析:

mogileFS体系结构分析:

阅读(1157) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-09-21 07:39:21

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com