一.介绍
首先可以去看官方的wiki:http://mogilefs.pbwiki.com/。(有可能被GFW了,那么你就安装一个Firefox的gladder插件就可以看了)。偶简单记录一下对Mogilefs的理解,Mogilefs分为几部分。
0) 数据库(MySQL)部分
你可以用mogdbsetup程序来初始化数据库。数据库保存了Mogilefs的所有元数据,你可以单独拿数据库服务器来做,也可以跟其他程序跑在一起,数据库部分非常重要,类似邮件系统的认证中心那么重要,如果这儿挂了,那么整个Mogilefs将处于不可用状态。因此最好是HA结构。
1)存储节点
mogstored程序的启动将使本机成为一个存储节点。启动时默认去读/etc/mogilefs/mogstored.conf ,具体配置可以参考配置部分。mogstored启动后,便可以通过mogadm增加这台机器到cluster中。一台机器可以只运行一个mogstored作为存储节点即可,也可以同时运行其他程序。
2)trackers(跟踪器)
mogilefsd即trackers程序,类似mogilefs的wiki上介绍的,trackers做了很多工作,Replication ,Deletion,Query,Reaper,Monitor等等。mogadm,mogtool的所有操作都要跟trackers打交道,Client的一些操作也需要定义好trackers,因此最好同时运行多个trackers来做负载均衡。trackers也可以只运行在一台机器上,也可以跟其他程序运行在一起,只要你配置好他的配置文件即可,默认在/etc/mogilefs/mogilefsd.conf。
3)工具
主要就是mogadm,mogtool这两个工具了,用来在命令行下控制整个mogilefs系统以及查看状态等等。
4)Client
Client实际上是一个Perl的pm,可以写程序调用该pm来使用mogilefs系统,对整个系统进行读写操作。
概念定义
可以参考官方wiki的这儿,简单说一下
domain:最高域,在一个域下key是唯一的。
class:包含在domain中,可以针对每一个class定义保存的份数。
key:对文件的唯一标识。
file:文件。
适用性
由于Mogilefs不支持对一个文件的随机读写,因此注定了只适合做一部分应用。比如图片服务,静态HTML服务。即文件写入后基本上不需要修改的应用,当然你也可以生成一个新的文件覆盖上去。
二.下载安装perl相关包
安装环境:
Red Hat Enterprise Linux AS release 4 (Nahant Update 6)
Linux 6.28 2.6.9-67.ELsmp #1 SMP Wed Nov 7 13:58:04 EST 2007 i686 i686 i386 GNU/Linux
注意:首先要安装mysql,mysql安装就不说了,网上不少,最好用源码包.
在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 required)
Perlbal-1.70
—
String-CRC32-1.4.tar.gz
Gearman-1.07.tar.gz
Gearman-Client-Async-0.93.tar.gz
Gearman-Server-1.08.tar.gz
—
DBI-1.607.tar.gz
DBD-mysql-4.008.tar.gz
PS:
ln -s /usr/local/mysql/lib/libmysqlclient.so.15 /usr/lib/libmysqlclient.so.15
perl Makefile.PL –testhost=localhost –testuser=root –mysql_config=/usr/local/mysql/bin/mysql_config
(make test 有可能会有一个错误,不用管它)
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
PS:建议不是对PERL很熟悉,不要用SVN上的安装,不然会有莫名其妙的问题.
一定要按顺序安装,每个包解压缩,执行:
perl Makefile.PL
make
make test
make install
这样就安装成功了,注意make test的错误提示
三.配置
1)创建数据库
#mogdbsetup –dbhost=10.15.6.28 –dbname=mogilefs –dbuser=root
2)tracker配置
新建/etc/mogilefsd.conf文件内容:
db_dsn DBI:mysql:mogilefs
db_user mogile
db_pass 123123
conf_port 6001
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
2)Storage Server 配置
用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.
新建配置文件:/etc/mogstored.conf内容是
httplisten=0.0.0.0:7500
mgmtlisten=0.0.0.0:7501
docroot=/opt/mogdata
建个存放文件的目录 # mkdir /opt/mogdata
在存放文件的目录下面在建个目录:
#mkdir -p /opt/mogdata/dev1
PS:mogadm 参数的用法请参考http://search.cpan.org/~dormando/MogileFS-Utils/mogadm
3)运行MogileFS
启动 storage server
#mogstored -c /etc/mogstored.conf –daemon
启动 Trackers
su mogile
mogilefsd -c /etc/mogilefs/mogilefsd.conf –daemon
查看你所有的服务都起来没有
#ps -ef | grep mogilefsd
#ps -ef | grep mogstored
三.测试阶段
生成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.15.6.28:6001'], root=>’/opt/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 “@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”;
返回的内容是
8
SCALAR(0×9ddaaa8)
http://10.15.6.28:7500/dev1/0/000/000/0000000008.fid
数据库测试代码:
#!/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”;
# username and password to log onto db server
$config{’dbUser’} = “root”;
$config{’dbPass’} = “”;
# name of database
$config{’dbName’} = “test”;
# MySQL driver (shouldn’t need to change)
$config{’dataSource’} = “DBI:mysql:$config{’dbName’}:$config{’dbServer’}”;
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();