avicom의 신변잡기

Gluster Filesystem 3.0.2 본문

LiNux / sTorAge

Gluster Filesystem 3.0.2

avicom 2011. 1. 4. 16:27
glusterfs 소개

  • glusterfs는 수PB와 수천 클라이언트까지 확장가능한 오픈소스 클러스터 파일시스템이다. 하나의 네임스페이스에서 스토리지 블럭과 메모리 리소스와 데이터를 관리한다.
  • 모듈 구조로 되어있어 사용자 요구가 있을 때 모듈을 하나씩 쌓는 형식으로 되어있다. glusterfs는 초기에 단독으로 작게 설정되어있어도 추후에 필요한 만큼 확장이 가능하다.
  • 표준 워크로드를 제어하는 설정 유틸리티를 제공한다. 이 문서는 사용자의 요구에 대한 적절한 옵션과 설치 및 설정에 대한 가장 효율적은 방법을 제공한다.
  • 메타 데이터 서버가 따로 없이 서버 노드는 각자 독립적으로 자신의 local disk를 export하고 클라이언트단에서 분산 및 replication 작업을 수행한다.
fuse 관련 모듈 설치

yum install fuse fuse-devel.x86_64 fuse-libs.x86_64

infiniband 관련 라이브러리 설치

실제로 사용하지는 않지만 glusterfs에서 infiniband를 지원하는 관계로 설치시 의존성이 걸려있음

yum install libibverbs libibverbs-devel.x86_64

glusterfs 설치

server : glusterfs-common, glusterfs-devel, glusterfs-server
client : glusterfs-client, glusterfs-common

스토리지 서버에서 vol file 생성

glusterfs-volgen -n cluster_data -r 1 -c /etc/glusterfs 192.168.160.13:/data/export 192.168.160.25:/data/export

server측 vol 파일과 client 측 vol파일이 생성된다. client vol 파일은 client로 복사

2 server node replication 설정
## file auto generated by /usr/bin/glusterfs-volgen (mount.vol)
# Cmd line:
# $ /usr/bin/glusterfs-volgen -n gluster -r 1 -c /etc/glusterfs 192.168.100.76:/gluster 192.168.100.77:/gluster

# RAID 1
# TRANSPORT-TYPE tcp
volume 192.168.100.77-1
    type protocol/client
    option transport-type tcp
    option remote-host 192.168.100.77
    option transport.socket.nodelay on
    option transport.remote-port 6996
    option remote-subvolume brick1
end-volume

volume 192.168.100.76-1
    type protocol/client
    option transport-type tcp
    option remote-host 192.168.100.76
    option transport.socket.nodelay on
    option transport.remote-port 6996
    option remote-subvolume brick1
end-volume

volume mirror-0
    type cluster/replicate
    subvolumes 192.168.100.76-1 192.168.100.77-1
end-volume

volume writebehind
    type performance/write-behind
    option cache-size 4MB
    subvolumes mirror-0
end-volume

volume readahead
    type performance/read-ahead
    option page-count 4
    subvolumes writebehind
end-volume

volume iocache
    type performance/io-cache
    option cache-size `grep 'MemTotal' /proc/meminfo  | awk '{print $2 * 0.2 / 1024}' | cut -f1 -d.`MB
    option cache-timeout 1
    subvolumes readahead
end-volume

volume quickread
    type performance/quick-read
    option cache-timeout 1
    option max-file-size 64kB
    subvolumes iocache
end-volume

volume statprefetch
    type performance/stat-prefetch
    subvolumes quickread
end-volume

2 server node stripe 설정
## file auto generated by /usr/bin/glusterfs-volgen (mount.vol)
# Cmd line:
# $ /usr/bin/glusterfs-volgen -n gluster 192.168.100.76:/gluster 192.168.100.77:/gluster

# TRANSPORT-TYPE tcp
volume 192.168.100.77-1
    type protocol/client
    option transport-type tcp
    option remote-host 192.168.100.77
    option transport.socket.nodelay on
    option transport.remote-port 6996
    option remote-subvolume brick1
end-volume

volume 192.168.100.76-1
    type protocol/client
    option transport-type tcp
    option remote-host 192.168.100.76
    option transport.socket.nodelay on
    option transport.remote-port 6996
    option remote-subvolume brick1
end-volume

volume distribute
    type cluster/distribute
    subvolumes 192.168.100.76-1 192.168.100.77-1
end-volume

volume writebehind
    type performance/write-behind
    option cache-size 4MB
    subvolumes distribute
end-volume

volume readahead
    type performance/read-ahead
    option page-count 4
    subvolumes writebehind
end-volume

volume iocache
    type performance/io-cache
    option cache-size `grep 'MemTotal' /proc/meminfo  | awk '{print $2 * 0.2 / 1024}' | cut -f1 -d.`MB
    option cache-timeout 1
    subvolumes readahead
end-volume

volume quickread
    type performance/quick-read
    option cache-timeout 1
    option max-file-size 64kB
    subvolumes iocache
end-volume

volume statprefetch
    type performance/stat-prefetch
    subvolumes quickread
end-volume

서버 데몬 구동

/etc/glusterfs/에 생성된 vol 파일을 glusterfsd.vol로 변경하고 service glusterfsd start

서버측 /etc/fstab에 export할 디렉토리 추가

echo "/dev/xvdb1             /data                   ext3    defaults        1 2" >> /etc/fstab

client측에서 /etc/fstab 수정하고 마운트

echo "/etc/glusterfs/glusterfs.vol  /glusterfs       glusterfs       defaults        0 0" >> /etc/fstab
mount /glusterfs

파일 복사 테스트

단일 서버 노드

100Mbps 환경
전송률 : 10.09MB/s
real    1m12.071s
user    0m13.120s
sys     0m7.724s

FC(1000Mbps) 환경
전송률 : 110.15MB/s
real    0m6.628s
user    0m5.530s
sys     0m2.011s

2 서버 노드 stripe

100Mbps 환경
전송률 : 10.26MB/s
real    1m10.922s
user    0m13.240s
sys     0m7.823s

FC(1000Mbps) 환경
전송률 : 111.46MB/s
real    0m6.552s
user    0m5.526s
sys     0m1.840s

2 서버 노드 replication

100Mbps 환경
전송률 : 3.81MB/s
real    3m11.139s
user    0m13.165s
sys     0m7.710s

FC(1000Mbps) 환경
전송률 : 36.88MB/s
real    0m19.703s
user    0m5.771s
sys     0m1.985s