TagCloud

Friday, December 14, 2012

MogileFS Installation

mogileFS 구축 ( CentOS 6.3 기준 )

시스템 구성은 다음과 같음
  • VM01 : MySQL - metadata 저장소
  • VM02 : MogileFS Tracker
  • VM03 : MogileFS DataNode
(주:아래 설치 과정에서는 VM00 에서 Tracker 와 Storage 를 모두 설치)

설치 한줄 요약
- perl 기반이므로,  1) cpan / cpanm 을 이용하여 MogileFS::Server 와 MogileFS::Utils 를 dependency 까지 설치한 다음.  2) 메타데이터를 위한 db스키마를 생성하고, 3) tracker 와 storage node 를 위한 설정파일을 작성 후 4) 각각의 데몬을 실행한 다음 5) 정책을 적용(도메인,클래스,디바이스추가)하면 됨


1. 사전준비
- yum install make #centos 6.3 은 make 기본설치 아님
- yum install gcc #cpan 에서 모듈설치시 c 컴파일러 요청 오류시
- yum install unzip #perl 설정중 필요시
- yum install perl-DBD-MySQL.x86_64 #perl mysql interface library
- yum install perl #perl 라이브러리 설치
- yum install perl-CPAN #cpan  설치
- yum install perl-YAML #perl 설정중 필요시
- yum install perl-Time-HiRes #mogdbsetup 실행중 Can't locate Time/HiRes.pm 오류시
- yum install perl-DBD-MySQL #MySQL을 사용하지 않더라도 필요
 - useradd mogilefs # mogilefs 계정 생성
- su mogilefs #이후 mogilefs 계정으로 설치

2-1. cpanm 으로 설치 먼저 아래와 같이  App::cpanminus 설치
- install App::cpanminus
or
- curl -L http://cpanmin.us | perl - --sudo App::cpanminus
- install Danga::Socket #mogdbsetup 실행중 Can't locate Danga/Socket.pm  오류시

2-2. cpan 으로 설치시
- sudo perl -MCPAN -e 'install "MogileFS:Server"'
- sudo perl -MCPAN -e 'install "MogileFS:Utils"'
of
- - cpanm IO::AIO MogileFS::Server MogileFS::Client MogileFS::Utils

2-3. cpan 실행후 설치시
- install local::lib
- install MogileFS:Server #관련 dependency 모듈들이 설치됨(MogileFS:Client 포함)
- install MogileFS:Utils


3.정상적으로 설치시, 아래와 같이 mogdbsetup , mogadm 명령 사용 가능
- mogdbsetup
- mogadm


4. MySQL 설정

# mysql
mysql> CREATE DATABASE mogilefs;
mysql> GRANT ALL ON mogilefs.* TO 'mogile'@'%' identified by 'mogilepassword';
mysql> FLUSH PRIVILEGES;
mysql> quit


5. 스키마 설치

mogdbsetup --dbhost=192.168.10.101 --dbname=mogilefs --dbuser=mogile --dbpassword=mogilepassword

* 정상적으로 설치시 아래와 같이 스키마가 생성됨






























6.1 Tracker 를 위한 conf 파일 작성 (https://github.com/mogilefs/MogileFS-Server/blob/master/conf/mogilefsd.conf 참고)
- vi /srv/mogilefs/mogilefsd.conf

db_dsn = DBI:mysql:mogilefs:host=192.168.10.101;port=3306;mysql_connect_timeout=5
db_user = mogile
db_pass = mogilepassword
conf_port = 7001
listener_jobs = 5
node_timeout = 5
rebalance_ignore_missing = 1


6.2 Tracker 실행
- mogilefsd -c /srv/mogilefs/mogilefsd.conf --daemon

7.1 mogstored 를 위한 conf 파일 작성
- vi /srv/mogilefs/mogstored.conf

maxconns = 10000
httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501
docroot = /srv/mogilefs/data

7.2 mogstored 를 위한 doc root 경로 생성
- mkdir /srv/mogilegs/data

7.3 mogstored 실행(주:레퍼런스wiki 에서는 root 로 실행)
- mogstored -c /srv/mogilefs/mogstored.conf --daemon
(참고 : ERROR: Need to be root to increase max connections. 오류시 root  로 실행)

8. Tracker 확인
- mogadm check

[mogilefs@vm00 mogilefs]$ mogadm check
Checking trackers...
  127.0.0.1:7001 ... OK

Checking hosts...
No devices found on tracker(s).

9. host 추가
- mogadm host add 192.168.10.100 --port=7500
- mogadm check

Checking trackers...
  127.0.0.1:7001 ... OK

Checking hosts...
  [ 1] 192.168.10.100 ... skipping; status = down
No devices found on tracker(s).





10. device 추가
- mogadm device add 192.168.10.100 1
- mogadm device add 192.168.10.100 2
- mogadm host mark 192.168.10.100 alive
- mogadm check

Checking trackers...
  127.0.0.1:7001 ... OK

Checking hosts...
  [ 1] 192.168.10.100 ... OK

Checking devices...
  host device         size(G)    used(G)    free(G)   use%   ob state   I/O%
  ---- ------------ ---------- ---------- ---------- ------ ---------- -----
  [ 1] dev1             6.109      1.473      4.636  24.11%  writeable   N/A
  [ 1] dev2             6.109      1.473      4.636  24.11%  writeable   N/A
  ---- ------------ ---------- ---------- ---------- ------
             total:    12.219      2.946      9.273  24.11%


- mogadm host list
192.168.10.100 [1]: alive
  IP:       192.168.10.100:7500

- mogadm device list
192.168.10.100 [1]: alive
                   used(G) free(G) total(G)
  dev1: alive      1.473   4.636   6.108
  dev2: alive      1.473   4.636   6.108

11. domain 및 class 추가

- mogadm domain add luvu
- mogadm class add luvu normal --mindevcount=2
- mogadm domain list
 domain               class                mindevcount   replpolicy   hashtype
-------------------- -------------------- ------------- ------------ -------
 luvu                 default                   2        MultipleHosts() NONE
 luvu                 normal                    2        MultipleHosts() NONE



12. mogtool 업로드 테스트
- mogtool --trackers=127.0.0.1:7001 --domain=luvu --class=normal inject --nobigfile /srv/mogilefs/test/testfile.txt testkey
Upload so far: 98 bytes [100.00% complete]


주) 실제 /srv/mogilefs/data/dev1 과 /srv/mogilegs/data/dev2 에 파일이 존재하는지, mysql 에 metadata 가 어떻게 들어가는지 파악해볼것

13. mogtool 다운로드 테스트

- mogtool --trackers=127.0.0.1:7001 --domain=luvu --class=normal extract testkey /srv/mogilefs/test/testfile_fetch.txt
Fetching piece 1...
        Trying http://192.168.10.100:7500/dev1/0/000/000/0000000003.fid...
Wide character in print at /usr/local/bin/mogtool line 1287, <Sock_127.0.0.1:7001> line 1.
Done.



14. HA 구성을 위해서...
1) MySQL HA 구성
2) HA 와 로드밸런싱을 위해 Tracker Instance 추가하면서 확장
3) Storage Node 의 확장(Storage 마다 물리적으로 분리된 device 구성)

15.성능개선
1) MySQL 에 대한 query latency 를 줄이기 위해 tracker 와 memcached 연계
2) 다중네트워크 혹은 다중 데이터센터를 위한 구성(replication 정책과 연관 있으며  다음글 참고 http://code.google.com/p/mogilefs/wiki/ConfigureMultiNet)


16. 기타 고려사항
1) mogilefs key 정책
- 메타데이터 상의 dkey 컬럼타입은 varchar(255) 이 기본값임. reversed url 을 조합한 키 정책을 사용하기 위해 컬럼타입을 변경할 경우 문제가 없을지??? ( 또한 인덱스컬럼이므로 유니코드 및 키 길이 확장에 따른 성능문제 고려해야함)
-> 가능할 경우 apache nutch 를 이용한 이미지크롤링 데이터서버로 가능할수도... )


참고
- http://code.google.com/p/mogilefs/wiki/QuickStartGuide
- http://code.google.com/p/mogilefs/wiki/InstallHowTo
- http://www.mimul.com/pebble/default/2011/12/26/1324889975960.html