分布式文件系统 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和相关包】

[ 安装环境 ]
操作系统: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的包安装方式。
要下载包,请在http://search.cpan.org中输入包名,然后下载,一般提供的是最新版,如果版本跟下面不一致,请以最新版为准。

为方便使用,本文包下载地址列表:(不保证您阅读本文的时候有效)

http://search.cpan.org/CPAN/authors/id/J/JH/JHI/BSD-Resource-1.2901.tar.gz
http://search.cpan.org/CPAN/authors/id/B/BR/BRADFITZ/Sys-Syscall-0.22.tar.gz
http://search.cpan.org/CPAN/authors/id/J/JH/JHI/Time-HiRes-1.9715.tar.gz
http://search.cpan.org/CPAN/authors/id/M/MS/MSERGEANT/Danga-Socket-1.59.tar.gz
http://search.cpan.org/CPAN/authors/id/M/MU/MUIR/modules/Net-Netmask-1.9015.tar.gz
http://search.cpan.org/CPAN/authors/id/M/ML/MLEHMANN/IO-AIO-3.07.tar.gz
http://search.cpan.org/CPAN/authors/id/D/DO/DORMANDO/Perlbal-1.71.tar.gz
http://search.cpan.org/CPAN/authors/id/S/SO/SOENKE/String-CRC32-1.4.tar.gz
http://search.cpan.org/CPAN/authors/id/B/BR/BRADFITZ/Gearman-1.09.tar.gz
http://search.cpan.org/CPAN/authors/id/B/BR/BRADFITZ/Gearman-Client-Async-0.94.tar.gz
http://search.cpan.org/CPAN/authors/id/B/BR/BRADFITZ/Gearman-Server-1.09.tar.gz
http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.607.tar.gz
http://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.008.tar.gz
http://search.cpan.org/CPAN/authors/id/B/BR/BRADFITZ/MogileFS-Client-1.08.tar.gz
http://search.cpan.org/CPAN/authors/id/D/DO/DORMANDO/mogilefs-server-2.20.tar.gz
http://search.cpan.org/CPAN/authors/id/P/PM/PMQS/IO-Compress-Base-2.015.tar.gz
http://search.cpan.org/CPAN/authors/id/P/PM/PMQS/Compress-Raw-Zlib-2.015.tar.gz
http://search.cpan.org/CPAN/authors/id/P/PM/PMQS/IO-Compress-Zlib-2.015.tar.gz
http://search.cpan.org/CPAN/authors/id/P/PM/PMQS/Compress-Zlib-2.015.tar.gz
http://search.cpan.org/CPAN/authors/id/D/DS/DSKOLL/IO-stringy-2.110.tar.gz
http://search.cpan.org/CPAN/authors/id/P/PM/PMQS/Compress-Raw-Zlib-2.015.tar.gz

包安装次序:(务必按照本次序进行)

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 参数的用法请参考 http://search.cpan.org/~dormando/MogileFS-Utils/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

  1. #=======================================
  2. use MogileFS::Client;
  3. my $mogfs = MogileFS::Client->new(domain=>‘testdomain’, hosts=>['10.0.22.184:6001'], root=>‘/home/xiehl/mogdata’,);
  4. my $fh = $mogfs->new_file(“file_key”, “testclass”);
  5. die $fh unless $fh->print($mogfs->readonly);
  6. my $content = “file.txt”;
  7. @num = $mogfs->store_content(“file_key”,“testclass”,$content);
  8. print “@num /n”;
  9. my $file_contents = $mogfs->get_file_data(“file_key”);
  10. print “$file_contents /n”;
  11. #$mogfs->delete(”file_key”);
  12. $fh->print($file_contents);
  13. @urls = $mogfs->get_paths(“file_key”);
  14. print “@urls /n”;
  15. #=======================================

执行脚本
# 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:

  1. #=======================================
  2. #!/usr/bin/perl
  3. # DBI is perl module used to connect to the database
  4. use DBI;
  5. # hostname or ip of server (for local testing, localhost should work)
  6. $config{’dbServer’} = “localhost”;
  7. $config{’dbUser’} = “root”;
  8. $config{’dbPass’} = “”;
  9. $config{’dbName’} = “test”;
  10. $config{’dataSource’} = “DBI:mysql:$config{’dbName’}:$config{’dbServer’}”;
  11. # Connect to MySQL
  12. my $dbh = DBI->connect($config{’dataSource’},$config{’dbUser’},$config{’dbPass’}) or
  13. die “Can’t connect to $config{’dataSource’}<br>$DBI::errstr”;
  14. print “Connected successfully<br>”;
  15. $dbh->disconnect();
  16. #=======================================

[ 相关参考 ]
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

你可能感兴趣的:(数据库,mysql,File,perl,domain,数据库服务器)