클라우드 컴퓨팅 환경에서는 데이터를 저장하는 스토리지 선정이 무엇보다 중요하다.
데이터를 분산 복제(Distribute - Replication) 저장해서 안정성을 높이고 저장공간을 확장(Scale-Out)할 수 있는 것이 기본이다.
현재 오픈소스로 나와있는 제품들이 여러가지가 있다.
아직은 살펴보는 단계이니 간단하게나마 기록해놓는다.



 - GlusterFS는 Scale-Out(확장가능)한 NAS(Network Attached Storage) 파일 시스템이다. 다양한 스토리지 서버를 Ethernet이나 Infiniteband RDMA 방식으로 하나의 큰 네트워크 파일시스템으로 모은다. GlusterFS는 성능저하없이 축적가능한 사용자 공간 디자인을 기반으로 한다. 클라우딩 컴퓨팅, 생물의학, 자료저장소등을 포함한 다양한 어플리케이션에서 쓰이고 있다. GlusterFS는 GNU AGPL v3 라이센스에 따라 무료 소프트웨어이다. 

- GlusterFS는 클라이언트와 서버로 구성된다. 서버는 일반적으로 Brick 이라는 형태로 제공이 되고, 각 서버들은 glusterfsd 데몬을 실행을 하여 로컬 파일 시스템을 volume으로 export한다. 클라이언트는 TCP/IP, InfiniBand, SDP를 통해 서버로 연결을 하고 원격서버들로부터 virtual volume을 구성한다. 
(Wiki 정의 참고 http://en.wikipedia.org/wiki/GlusterFS)

- 특징
* metadata server를 필요로 하지 않는다.
 분산 파일 시스템에서  파일정보등을 기억하기 위해 metadata server를 이용하는데 (hadoop 의 경우), 이 경우 metadata server가 문제가 생길경우 장애가 발생하게 된다. GlusterFS의 경우 파일정보등을 각 서버마다 가지고 있으므로 별도의 metadata server를 필요로 하지 않는다.

* 클라이언트 방식 
 volume을 마운트하는 방식으로 NFS, CIFS, Gluster Native(FUSE) 방식을 제공한다.
 
NFS로 마운트
#mount -t nfs [볼륨위치] [마운트위치]
#mount -t nfs 123.12.12.12:/test-volume /mnt/nfs



Gluster Native(FUSE)로 마운트
#mount -t glusterfs [볼륨위치] [마운트위치]
#mount -t glusterfs 1223.12.12.12:/test-volume /mnt/nfs




일반적으로 NFS 보다 FUSE로 마운트시 성능이 잘 나온다고 한다.
단, 작은 파일에서는 NFS의 캐시 영향을 받아서 성능이 더 잘나온다고 한다.
무엇보다,
NFS로 마운트시 마운트한 서버가 죽어버리면 해당 볼륨에 접근할수가 없다.
하지만, FUSE로 마운트시 마운트한 서버가 죽어도 해당 볼륨(나머지 Brick)에 접근할수있다.
이때문에 Relication을 설정이 필요하다.


* 파일기반의 replication, striping, load balancing
 replication 옵션을 주어 volume을 구성하게 되면 파일들을 복제 저장할 수 있다. 이 경우 서버 한곳이 고장나도 다른 곳의 서버에서 데이터를 가지고 오면 되므로 안정성이 높아진다. stripe 옵션을 주면 파일이 분산 저장이 된다. A라는 파일이 1번 서버에만 저장되는것이 아니라 1번 서버에 조금, 2번서버에 조금 이런 식으로 저장이 되게 된다. 일반적으로 stripe 옵션을 주면 속도는 빨라지나 안정성이 떨어진다고 얘기를 한다.
 
* volume failover, scheduling, disk caching
한그래프에 여러개 Series가 들어가야하는걸 찾다보니 ... 여기로..
이쁜게 많다 ^^
그리고 무료라는거.. !!

http://www.juiceanalytics.com/chart-chooser/

인스톨 가이드를 참고. (http://download.gluster.com/pub/gluster/glusterfs/3.2/3.2.0/Gluster_FS_3.2_Installation_Guide.pdf)

다운로드 : http://download.gluster.com/pub/gluster/glusterfs/LATEST/


1. 편의상 /etc/hosts에 모든 GlusterFS Node들의 host정보 등록
IP주소 GFS1
IP주소 GFS2
...
 이때, 모든 GlusterFS Node 에 위와 같이 해줘야 한다.
 그렇지 않으면 볼륨 생성시 Fail 이 난다. (로그를 보면 호스트를 확인하지 못했다고 뜬다.)

2. Setting
  • iptables off
    • # chkconfig iptables off
    • # service iptables stop
  • portmap on
    • # chkconfig portmap on
    • # service portmap start
  • nfs-server off
    • # chkconfig nfs off
    • # chkconfig nfslock off
    • # service nfs stop
    • # service nfslock stop
  • mount point 생성
    • # mkdir /data /mnt/nfs /mnt/glusterfs
  • fuse 모듈 로딩 처리
    • # modprobe fuse
    • # echo "modprobe fuse" >> /etc/rc.local

  •  @ nfs 로 마운트시 버전을 넣어줘야함. 왜 그런지는 아직..
     mount -t nfs -o vers=3 172.21.19.113:/test-vol /mnt/nfs/

    3. glusterfs로 시작되는 rpm 다운로드
    # wget http://download.gluster.com/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-core-3.2.3-1.x86_64.rpm http://download.gluster.com/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-debuginfo-3.2.3-1.x86_64.rpm http://download.gluster.com/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-fuse-3.2.3-1.x86_64.rpm http://download.gluster.com/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-geo-replication-3.2.3-1.x86_64.rpm http://download.gluster.com/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-rdma-3.2.3-1.x86_64.rpm

    4. rpm 설치
    # rpm -Uvh gluster*
    - 의존성 에러 나는 것은 설치해줌 (python-ctypes, rsync, libibverbs-devel)
    - python-ctypes 경우, epel 설치로 가능 : http://fedoraproject.org/wiki/EPEL
    - rsync 경우, 직접 설치 : http://pkgs.repoforge.org/rsync/
    - CentOS 6 인경우 perl 설치, ssh클라이언트가 없을경우 openssh-clients 설치(의존성에러 compat-readline5* 도 설치)
    5. gluster 시작
    -  service glusterd start

    + Recent posts