Posts Tagged ‘MogileFS’

MogileFS 安装配置


31 5月
官网:http://danga.com/mogilefs/ 与memcached一样,同为danga出品的一套分布式存储解决方案。貌似不少大网站有在用? mogilefs的文档貌似挺烂的,官网有一部分,Google code上的wiki有一部分(http://code.google.com/p/mogilefs/) 整理下我安装的过程,以备今后查看。 正版的安装文档应该是看这里:http://code.google.com/p/mogilefs/wiki/InstallHowTo (英文的而且有点乱- -) 首先下载3个东东,都必须要下:
  • http://search.cpan.org/dist/mogilefs-server/
  • http://search.cpan.org/dist/MogileFS-Utils/
  • http://search.cpan.org/dist/MogileFS-Client/
  • 或者通过svn checkout http://code.sixapart.com/svn/mogilefs/trunk (不推荐) 安装之前,先建立数据库: # mysql mysql> CREATE DATABASE mogilefs; mysql> GRANT ALL ON mogilefs.* TO 'mogile'@'%'; mysql> SET PASSWORD FOR 'mogile'@'%' = OLD_PASSWORD( 'sekrit' ); mysql> FLUSH PRIVILEGES; mysql> quit 然后就进入安装阶段,所有刚才下载的3个都需要安装,安装方法都一样,类似: # tar -xvf mogilefs-server-2.32.tar.gz # cd mogilefs-server-2.32 # perl Makefile.PL # make # make test # make install 这里是特别需要注意的,在perl Makefile.PL的时候,可能会提示缺少各种各样的perl包(至少我提示缺少了很多),这个时候,请到CPAN (http://cpan.org/)去搜索(可以直接到http://search.cpan.org/搜那些not found的模块),反正把你看到not found的警告中的关键字打进去搜,之后把搜到的模块下下来安装,安装方法和上面的一样。直到没有警告缺少任何东西为止。才可以继续make等后续动作,否则可能装好了也无法用哦。 ok,等你排除万难,把上面3个包需要的东西都装完,3个都无错安装完成后。用server的那个安装包里面的mogdbsetup这个方便的程序进行mysql db初始化,命令类似: # ./mogdbsetup --dbhost=mogiledb.yourdomain.com --dbname=mogilefs --dbuser=mogile --dbpassword=sekrit (详细可以看官方wiki中的Setup——Database Configuration) 之后就是配置Tracker,在你的每个tracker服务器上,新建一个文件/etc/mogilefs/mogilefsd.conf,注意是新建,不要试图和我一样去寻找,找不到这个东东的,目录自己开。注意读写权限。文件中写入类似: db_dsn = DBI:mysql:mogilefs:host=mogiledb.yourdomain.com;port=3306;mysql_connect_timeout=5 db_user = mogile db_pass = sekrit conf_port = 7001 listener_jobs = 5 node_timeout = 5 rebalance_ignore_missing = 1 (详细可以看wiki中的Tracker Configuration) 注意:这步完成后,就先要把tracker启动起来,安官网的说法mogilefsd不要去用root启动,所以: adduser mogile 接着: # su mogile $ mogilefsd -c /etc/mogilefs/mogilefsd.conf --daemon $ exit 如果想让tracker用memcached,可以这样: # mogadm --lib=/usr/local/share/perl/5.8.4 --trackers=192.168.42.1:7001 settings set memcache_servers 127.0.0.1:10000 注意:mogadm这个命令必须tracker启了后才可以运行,其中--lib=/usr/local/share/perl/5.8.4是指定'MogileFS.pm'这个文件的位置,各人可能不同,自己搜下在哪儿,上面3个东东安装的时候应该也会显示的。 接下来是Storage Server Configuration,在你的每台storage server上新建一个存储用的目录,注意你等会用来启动mogstored的用户必须有这个目录的读写权限。 # mkdir /var/mogdata 配置,每台storage服务器新建一个配置文件/etc/mogilefs/mogstored.conf: httplisten=0.0.0.0:7500 mgmtlisten=0.0.0.0:7501 docroot=/var/mogdata 好,然后用'mogadm'把每个storage写到数据库中(注意事项和上面说的用memcached那里一样,另外记得防火墙不要把端口墙掉了): # mogadm --lib=/usr/local/share/perl/5.8.4 --trackers=192.168.42.1:7001 host add mogilestorage --ip=192.168.42.3 --port=7500 --status=alive 确认下是不是加进去了: # mogadm --lib=/usr/local/share/perl/5.8.4 --trackers=192.168.42.1:7001 host list 后面的步骤可以直接看官网的,没什么花头,直接贴了: You also need to add devices for each storage host. If you don't provide a device id mogadm is supposed to do it for you... in practice I find it dies with an error, so you will need to manually add a unique device id after the host: # mogadm --lib=/usr/local/share/perl/5.8.4 --trackers=192.168.42.1:7001 device add mogilestorage 1 Finally, add the correctly-name device (folder) to each storage host. I have been unable to get the tools to handle this well, so I am probably doing something wrong. As a workaround, I used the modadm device list command to see what device names were assigned and then I added the folders to my storage hosts. Run the following command: # mogadm --lib=/usr/local/share/perl/5.8.4 --trackers=192.168.42.1:6001 device list It will list each host and the device name followed by its status and storage available. Here is example output: mogilestorage 1: alive used(G) free(G) total(G) dev1: alive 0.892 67.772 68.664 This means "mogilestorage" has a host id of "1" and it has one device named "dev1" on it and that device is in the "alive" state (your other statistics will probably be zeros). Using the example output above, you would simply create the directory on mogilestorage.yourdomain.com: # mkdir -p /var/mogdata/dev1 Finally, confirm that your devices are configured: # mogadm --lib=/usr/local/share/perl/5.8.4 --trackers=192.168.42.1:7001 device list To get IO stats working, you need to install 'iostat'. Example for debian/ubuntu # apt-get install sysstat 好,现在可以启动storage server了,官网推荐是用root用户: # mogstored --daemon 如果一切成功的话: # mogadm --lib=/usr/local/share/perl/5.8.4 --trackers=192.168.42.1:6001,192.168.42.2:7001 check 可以看到相应成功的信息。 暂时,至此,另外,之后应该就是对域名和mogilefs绑定的事情了,事先要准备类似 mogiledb.yourdomain.com, mogiletracker.yourdomain.com and mogilestorage.yourdomain.com 这样的3个域名,然后用: Create a domain # mogadm --lib=/usr/local/share/perl/5.8.4 --trackers=192.168.42.1:6001,192.168.42.2:7001 domain add testdomain Add a class to the domain: # mogadm --lib=/usr/local/share/perl/5.8.4 --trackers=192.168.42.1:6001,192.168.42.2:7001 class add testdomain testclass 上面这些还没尝试过,暂时记录下。 平时正常启动的话: sudo -u mogile /usr/local/bin/mogilefsd -c /etc/mogilefs/mogilefsd.conf --daemon mogstored --daemon 就ok了。当然也可以直接写到/etc/rc.local里面自动启动。 另外,PHP调用的API也还没实验,详见http://pecl.php.net/package/mogilefs,有空实验后继续。 ——————————2010/6/1 PHP API 安装———————————— PHP的extension就从上面那个地址下就好了,版本是最新的,extension的出品网站是 http://projects.usrportage.de/index.fcgi/php-mogilefs 安装和文档分别是: Install documentation 安装的时候注意要先装neon的devel lib包,其他和普通的extension安装没区别。看安装的帮助就好,没什么难度。 应用示例:
    1. <?php
    2. $client = new MogileFs();
    3. $client->connect('host', 6001, 'myDomain');
    4.  
    5. $client->put('path/to/file', 'myFile', 'myClass');
    6. $metadata = $client->get('myFile');
    7.  
    8. $content = file_get_contents($metadata['path1']);
    9.  
    其中的host是指tracker的地址, 6001是tracker的端口, myDomain是类似:# mogadm --lib=/usr/local/share/perl/5.8.4 --trackers=192.168.42.1:6001,192.168.42.2:7001 domain add testdomain 中加的testdomain myFile是文件的唯一key myClass是类似:# mogadm --lib=/usr/local/share/perl/5.8.4 --trackers=192.168.42.1:6001,192.168.42.2:7001 class add testdomain testclass 中的testclass 至此,最基本的mogileFs就ok了。其他一些待阅的详细东东,罗列下: FSCK(貌似是监控相关):http://code.google.com/p/mogilefs/wiki/FSCK Job Workers(可能是MogileFS中各种部件的角色工作分配): http://code.google.com/p/mogilefs/wiki/Jobs 其他的一些client:http://code.google.com/p/mogilefs/wiki/Clients 原理总览:http://code.google.com/p/mogilefs/wiki/HighLevelOverview

    貓熊寶寶幼齒園

    姜經緯的博客