glusterfs 구성하는 방법

Gluster 란?

  • Redhat에서 지원하는 오픈소스 파일시스템으로써 수천 Petabyte급의 대용량에 수천개의 클라이언트가 접속하여 사용 가능한 scale-out 방식 분산 파일 시스템
  • 기존의 분산 파일 시스템에 비해 비교적 구성이 간단하며, 대용량 및 대규모의 I/O처리 능력이 뛰어남
glusterfs 구성하는 방법

결론적으로 Gluster 란 여러 사용자가 동시에 접속하여 데이터를 읽고 쓸수 있도록 만들어진 분산파일시스템이라고 한다.

구성

<구성 환경>
플랫폼: VirtualBox 가상화
Ram: 1G
OS : CentsOS 6.5 64bit

서버 2대

eth0 : 192.168.0.70 VIP : 192.168.0.72
eth1 : 10.1.1.1 (내부망)


eth0 : 192.168.0.71 VIP : 192.168.0.73
eth1 : 10.1.1.2 (내부망)

이렇게 구성하는 이유는 Gluster 관련 글을 게시한 이후에 heartbeat 를 이용한 HA(고가용성) 시스템을 구축할 예정이기 때문이다.

필수유틸 설치 및 GlusterFS 설치

yum install -y wget fuse fuse-libs fuse-devel

cd /usr/local/src

wget http://download.gluster.org/pub/gluster/glusterfs/3.5/3.5.3/CentOS/epel-6Server/x86_64/glusterfs-libs-3.5.3-1.el6.x86_64.rpm
wget http://download.gluster.org/pub/gluster/glusterfs/3.5/3.5.3/CentOS/epel-6Server/x86_64/glusterfs-3.5.3-1.el6.x86_64.rpm
wget http://download.gluster.org/pub/gluster/glusterfs/3.5/3.5.3/CentOS/epel-6Server/x86_64/glusterfs-fuse-3.5.3-1.el6.x86_64.rpm
wget http://download.gluster.org/pub/gluster/glusterfs/3.5/3.5.3/CentOS/epel-6Server/x86_64/glusterfs-cli-3.5.3-1.el6.x86_64.rpm
wget http://download.gluster.org/pub/gluster/glusterfs/3.5/3.5.3/CentOS/epel-6Server/x86_64/glusterfs-api-3.5.3-1.el6.x86_64.rpm
wget http://download.gluster.org/pub/gluster/glusterfs/3.5/3.5.3/CentOS/epel-6Server/x86_64/glusterfs-server-3.5.3-1.el6.x86_64.rpm
wget http://download.gluster.org/pub/gluster/glusterfs/3.5/3.5.3/CentOS/epel-6Server/x86_64/glusterfs-geo-replication-3.5.3-1.el6.x86_64.rpm

glusterfs 설치하기

rpm -Uvh glusterfs-libs-3.5.3-1.el6.x86_64.rpm
rpm -Uvh glusterfs-3.5.3-1.el6.x86_64.rpm
rpm -Uvh glusterfs-fuse-3.5.3-1.el6.x86_64.rpm
rpm -Uvh glusterfs-cli-3.5.3-1.el6.x86_64.rpm
rpm -Uvh glusterfs-api-3.5.3-1.el6.x86_64.rpm
rpm -Uvh glusterfs-server-3.5.3-1.el6.x86_64.rpm
rpm -Uvh glusterfs-geo-replication-3.5.3-1.el6.x86_64.rpm

http://download.gluster.org/pub/gluster/glusterfs/LATEST/EPEL.repo/epel-6.6/x86_64/
이곳에서 최신버전을 다운로드 가능하다.

방화벽 설정 변경하기

vi /etc/sysconfig/iptables

gluster는 111, 24007, 24008, 24009~(glusterfs 전체 볼륨수), nfs를 이용해서 마운트 할 경우에는 38465~(gluster 서버 수)로 해주시면 된다.
여기서는 volume 32개를 기준으로 하였고 nfs 마운트를 사용하지 않으나 기본적으로 38465 포트를 추가시킨다.

-A INPUT -m state –state NEW -m tcp -p tcp –dport 111 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 24007 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 24008 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 24009:24041 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 38465 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 49152 -j ACCEPT

데몬 시작 및 chkconfig 등록

/etc/init.d/glusterd start

chkconfig –level 345 glusterd on

vi /etc/hosts

10.1.1.1 WEB1
10.1.1.2 WEB2

이부분은 Active(WEB1), Standby(WEB2) 서버에 동일하게 등록해줘야 된다.

Peer 등록 및 Volume 만들기

[Peer 등록]

Gluster1에만 등록하면 자동으로 해당 서버들에 등록이 된다.

gluster peer probe WEB2 //Standby 서버의 WEB2 추가.

gluster peer status //peer 상태 확인

Number of Peers: 1

Hostname: WEB2
Uuid: 495c0506-46c0-4e94-a1be-ba896d812f47
State: Peer in Cluster (Connected)

[Volume 만들기]


a.Distributed volume
-> 파일을 gluster 서버 노드의 각 Brick으로 분산해서 저장(기본)
b.Replicated volume
-> 파일을 gluster 서버 노드의 각 Brick으로 분산해서 저장함. 지정된 replication 수 만큼의 복제 파일을 생성
c.Stripe volume
-> 여러 서버의 여러 Brick에 파일을 stripe 수로 만큼 나누어 저장함. 단 volume 생성 시 정의한 brick의 수와 Stripe 수가 일치해야함
d.Distributed stripe volume
-> 여러 gluster 서버 노드의 각 Brick 으로 파일을 stripe 수만큼 나누어 저장함
e.Distributed replicated volume
-> multiple한 replicated volume 구성을 형성할 때 사용할 수 있음

gluster1이라는 볼륨 생성, 복사본 2개, 1번서버, 2번 서버 설정(내부망 IP 로 구성하였다. 혹시 Real IP 를 이용해서 구성할경우 Real IP 를 적어주면 된다)
gluster volume create gluster1 replica 2 transport tcp 10.1.1.1:/GluDisk1 10.1.1.2:/GluDisk1

GluDisk1 의 경우 os 설치 디스크 외에 여유분의 디스크를 준비해야된다.
mount /dev/sdb1 /GluDisk1
이런식으로 마운트가 된 상태에서 볼륨을 생성해야된다. 하지만 os 설치 디스크에 바로 볼륨을 추가할수 있다.

gluster volume create gluster1 replica 2 transport tcp 10.1.1.1:/GluDisk1 10.1.1.2:/GluDisk1 force

마지막 부분에 force 옵션을 추가하면 해결된다.

아래와 같은 메시지가 출력되면 성공적으로 된것이다.

volume create: gluster1: success: please start the volume to access data

gluster volume info all // 생성된 volume 확인하기

Volume Name: gluster1
Type: Replicate
Volume ID: d1fb39b0-f0c8-44f6-b5bf-27c0f36852fd
Status: Created
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: 10.1.1.1:/GluDisk1
Brick2: 10.1.1.2:/GluDisk1

gluster volume start gluster1 // gluster volume 적용

volume start: gluster1: success

<접근 권한 설정하기>
gluster volume set gluster1 auth.allow 192.168.0.* // 192.168.0.0/24 대역을 이용하는 사용자에게 허용

각각의 gluster 서버에 부팅후 자동마운트 되도록 설정한다
blkid
/dev/sdb1: UUID=”32e48db5-9e5e-43c2-a4ec-7e90709c1215″ TYPE=”ext4″

/etc/fstab
UUID=32e48db5-9e5e-43c2-a4ec-7e90709c1215 /GluDisk1 ext4 defaults 0 0

Glusterfs client 설정하기

클라이언트(여기서는 WEB1,WEB2 모두포함) 에서도 /etc/hosts 파일에 각각의 글러스터 서버들 정보를 입력해줘야된다.

modprobe fuse // fuse 모듈 로딩
dmesg |grep -i fuse // fuse 모듈 로딩 상태 확인

여기서 마운트를 할 때에 WEB1, WEB2 서버에 아래의 명령어로 동일하게 마운트를 해줘야 된다.
실질적으로 WEB1서버가 공유서버인 것이다. 어차피 WEB1,WEB2 서버의 /GluDisk1 각각의 디렉토리에 파일이 저장되기 때문에 WEB1서버에 문제가 생겨도 /GluDisk1 디렉토리에 있는 데이터로 복구 하면된다.

WEB1,WEB2 둘다 적용
mount -t glusterfs WEB1:/gluster1 /home
df -h

Filesystem Size Used Avail Use% Mounted on
/dev/sda3 6.6G 3.5G 2.8G 56% /
tmpfs 499M 0 499M 0% /dev/shm
/dev/sda1 190M 25M 156M 14% /boot
WEB1:/gluster1 6.6G 3.5G 2.8G 56% /home

WEB1 서버에서 성공적으로 마운트 되었다. WEB2서버와 /home 디렉토리는 이제부터 공유된다.

WEB1, WEB2 둘다 적용

vi /etc/rc.local
/sbin/modprobe fuse
/bin/mount -t glusterfs WEB1:/gluster1 /home

mount
df -h // 목록 중 volume 이름으로 추가 된 디스크 확인


dd if=/dev/zero of=testFile bs=1024M count=1000

이정도만 구성해주면 Gluster 구성이 90%이상 완료된 상태이다. WEB1, WEB2 서버의 /home 디렉토리에서 파일을 생성해보면, 두개의 서버에서 동시에 파일이 생성되는걸 확인할수있다.

Leave a Comment