티스토리 뷰

Developer

[ glusterFS ] installation guide

rocksea 2012. 10. 12. 16:00

오늘은 분산, 복제 파일시스템인 glusterfs에 대해서 알아보도록 하겠습니다.

일반적으로 HDFS 와 같은 메타데이타를 관리하는 서버를 두는 분산 방식은 2가지 위험성을 가지고 있다고 합니다.

  • Performance Bottleneck
  • Inconsistency Risks

글러스터FS 는 위의 두가지 위험성을 제거한 분산 파일 시스템 방식입니다. 메타데이타를 관리하는 서버가 없으면 어떻게
파일의 위치를 찾을 수 있을것인가? 하는 의문이 있을 수가 있는데요. 이를 해결하기 위해서 데이타를 저장하고 읽어올 수 있는 방식이 아니라
'수학적 계산'을 통해서 파일의 위치를 찾을 수 있는 Elastic Hashing Algorithm 을 사용한다고 합니다.

이에 더해서 Gluster Native FUSE 방식이라고 해서 가상 마운트 방식을 지원합니다.

  • 일반적인 마운트 방식과 100% 동일
  • 작은 파일 관련해서도 더욱 빠른 속도를 보여줍니다. (HDFS 는 1MB 의 크기 제한이 존재합니다)
  • 글러스터를 제거해도 파일의 원본이 깨지지 않고 남아있습니다.
  • 분산 환경이 노드를 추가해도 능률 향상이 Log 의 곡선을 그리는데 비해서 글러스터는 '선형'으로 빨라집니다. 

gluster FS의 설치법에 대해 알아보도록 하겠습니다.


설치환경

OS : Ubuntu 12.04

GlusterFS : glusterfs 3.2.5


step1. apt-get을 이용한 설치

glusterfs를 설치하고자 하는 모든 서버에 apt-get을 이용하여 설치한다.
$ sudo apt-get install glusterfs-server

* glusterfs의 원활한 관리 및 추가적인 기능을 이용하기 위해서, glusterfs를 설치하기 전에 다음의 패키지를 설치하는 것을 권장한다.
$ sudo apt-get install openssh-server wget nfs-common

step2. 방화벽 설정

$ iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 24007:24047 -j ACCEPT # (24047 -> 24009 + 모든 볼륨의 brick 갯수)
$ iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 111 -j ACCEPT 
$ iptables -A INPUT -m state --state NEW -m udp -p udp --dport 111 -j ACCEPT 
$ iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 38465:38467 -j ACCEPT # NFS를 사용하는 경우

$ service iptables save
$ service iptables restart


step3. GlusterFS 구동

gluster 시작

$ /etc/init.d/glusterfs-server start

gluster 정지
$ /etc/init.d/glusterfs-server stop


step4. GlusterFS 설정 ( 전 서버에 모두 동일하게 설정 )

hosts file 등록

$ vi /etc/hosts

192.168.0.200 server1

192.168.0.201 server2

192.168.0.203 server3

192.168.0.204 server4


peer 등록

$ sudo gluster

 gluster> peer probe server2
 gluster> peer probe server3
gluster> peer probe server4 


peer 제거 ( 나중에 필요시 )

gluster> peer detach server2

step5. Volume설정

volume은 실제 데이터를 저장할 저장소를 설정하는 것이다.

gluster> volume create NEW-VOLNAME [stripe COUNT | replica COUNT] [transport tcp | rdma | tcp, rdma]

: 볼륨을 생성한다. 볼륨은 사용 목적에 따라 5가지 형태로 분류된다.


gluster> volume info [all | VOLNAME]

: 볼륨의 정보를 보여준다.


5-1. Distributed Volume

- 파일들이 볼륨의 brick 내에 적절히 배치되는 형태.
- 규모가 큰 저장소가 필요하나, 데이터의 중복성이 필요없거나 다른 하드웨어/소프트웨어로 중복성에 제공될 때 사용.
note) Disk/Server에서 오류는 데이터를 잃어버릴 수 있다.

gluster> volume create test-volume server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4
Creation of test-volume has been successful. Please start the volume to access data.
gluster> volume info
Volume Name: test-volume
Type: Distribute
Status: Created
Number of Bricks: 4
Transport-type: tcp
Bricks:
Brick1: server1:/exp1
Brick2: server2:/exp2
Brick3: server3:/exp3
Brick3: server3:/exp4


5-2. Replicated Volume

- 파일들이 볼륨의 brick 내에 중복하여 저장된다.
- 높은 유용성과 높은 안정성이 필요할 때 사용
note) replica의 갯수는 볼륨을 구성하는 brick의 숫자와 동일하여야 한다.

gluster> volume create test-volume replica 2 transport tcp server1:/exp1 server2:/exp2
Creation of test-volume has been successful. Please start the volume to access data.

gluster> volume info
Volume Name: test-volume
Type: Replicate
Status: Created
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: server1:/exp1
Brick2: server2:/exp2



5-3. Striped Volume

- 파일들이 볼륨의 brick 내에 stripe되어 저장된다.
- 매우 큰 파일들을 동시에 접근하고자 할 경우에만 사용.
note) stripe의 갯수는 볼륨을 구성하는 brick의 숫자와 동일하여야 한다.

gluster> volume create test-volume stripe 2 transport tcp server1:/exp1 server2:/exp2
Creation of test-volume has been successful. Please start the volume to access data.

gluster> volume info
Volume Name: test-volume
Type: Stripe
Status: Created
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: server1:/exp1
Brick2: server2:/exp2




5-4. Distributed Striped Volume

- 파일들이 볼륨의 brick 내의 2개 이상의 노드에 stripe되어 저장된다.
- 매우 큰 파일들을 동시에 접근하고자 하고, 저장소의 확장이 요구될 경우에 사용
note) brick의 숫자는 stripe 갯수의 배수여야 한다.


gluster> volume create test-volume stripe 4 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4
Creation of test-volume has been successful. Please start the volume to access data.
gluster> volume info

Volume Name: test-volume
Type: Distributed-Stripe
Status: Created
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: server1:/exp1
Brick2: server2:/exp2
Brick3: server3:/exp3
Brick4: server4:/exp4



5-5. Distributed Replicated Volume

- 분산된 파일들이 볼륨 내에 중복되어 저장된다.
- 저장소의 확장성과 높은 안정성이 중요할 때 사용
note) brick의 숫자가 replica 갯수의 배수여야 한다. brick이 지정되는 순서는 복제 설정에 영향을 미치며, 각 replica 갯수만큼 연속적으로 나열된 brick이 replica set으로 구성된다.


gluster> volume create test-volume replica 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4
Creation of test-volume has been successful. Please start the volume to access data.

gluster> volume info
Volume Name: test-volume
Type: Distributed-Replicate
Status: Created
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: server1:/exp1
Brick2: server2:/exp2
Brick3: server3:/exp3
Brick4: server4:/exp4



5-6. Volume start, stop 및 기타기능

# 이 예제에서는 (server1, server2), (server3, server4)가 각각의 replica set이다.
- start VOLNAME : mount 하기 전에 볼륨을 start해야 한다.

gluster> volume start test-volume
Starting volume test-volume has been successful
gluster> volume info
Volume Name: test-volume
Type: Distributed-Replicate
Status: Started <-----------------------------
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: rose1:/exp1
Brick2: rose2:/exp2
Brick3: rose3:/exp3
Brick4: rose4:/exp4


- stop VOLNAME : 동작하고 있는 볼륨을 정지한다. 볼륨을 삭제하려면 반드시 stop을 먼저 수행하여야 한다.

gluster> volume stop test-volume
Stopping volume will make its data inaccessible. Do you want to continue? (y/n) y
Stopping volume test-volume has been successful
gluster> volume info
Volume Name: test-volume
Type: Distributed-Replicate
Status: Stopped <-----------------------------
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: rose1:/exp1
Brick2: rose2:/exp2
Brick3: rose3:/exp3
Brick4: rose4:/exp4



- delete VOLNAME : 볼륨을 삭제한다. (삭제하기 전에 볼륨은 반드시 정지된 상태여야 한다.)

gluster> volume delete test-volume
Deleting volume will erase all information about the volume. Do you want to continue? (y/n) y
Deleting volume test-volume has been successful



- add-brick VOLNAME NEW-BRICK
- 볼륨에 brick을 추가하여 볼륨을 확장한다.
note) 추가하고자 하는 brick은 gluster에 등록되어 있어야 한다.
note) replica가 설정된 볼륨은 replica수의 배수만큼 brick을 추가하여야 한다. (replica가 2라면 2,4,6,8...개의 brick 추가)

gluster> volume add-brick test-volume server4:/exp4
Add Brick successful


- remove-brick VOLNAME BRICK
. 볼륨에서 brick을 제거하여 볼륨을 축소한다.
. note) replica가 설정된 볼륨은 replica수의 배수만큼 brick을 제거하여야 한다.

gluster> volume remove-brick test-volume server2:/exp2
Removing brick(s) can result in data loss. Do you want to Continue? (y/n) y
Remove Brick successful


6.GlusterFS 접근(Gluster Native 방식)

glusterfs에 접근하고자 하는 장비에 apt-get을 이용하여 gluster client를 설치한다.

$ sudo apt-get install glusterfs-cluster

Network 설정을 추가한다.

$ sudo iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 24007:24008 -j ACCEPT
$ sudo iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 24009:24014 -j ACCEPT # (24014 -> 24009 + 모든 brick 갯수)

볼륨을 mount한다.

. mount -t glusterfs HOSTNAME-OR-IPADDRESS:/VOLNAME MOUNTDIR

$ mount -t glusterfs server1:/test-volume /mnt/glusterfs


fstab 등록

server:/dep-volume /mnt/glusterfs glusterfs defaults,_netdev 0 0

이상 glusterfs에 대해 알아봤습니다.


by rocksea.





'Developer' 카테고리의 다른 글

[maven] repository (artifactory) installation guide  (0) 2012.11.07
[ NFS ] Network File System 설치  (0) 2012.10.17
apt-get package 설치에러  (0) 2012.10.12
[ Thrift ] thrift installation & example  (0) 2012.10.11
like문 작성법  (0) 2012.10.10
댓글