GlusterFS 개요
- 정의: 오픈소스 분산 파일 시스템으로 여러 서버의 디스크를 하나의 스토리지 풀처럼 사용 가능
- 원리: 브릭(Brick)을 구성하고 이를 Volume으로 묶어 파일 단위로 데이터를 분산 저장
- 주요 용도: 고가용성 + 스케일아웃 파일 스토리지
구성 예시
역할 구분 |
서버 구성 |
설명 |
운영 노드 |
node1 + node2 |
GlusterFS 구성 및 서비스 제공 |
마운트 노드 |
별도 클라이언트 서버 |
GlusterFS Volume을 마운트하여 사용 |
사전 준비 사항
항목 |
내용 |
OS |
CentOS 7.9 x64 Minimal |
노드 수 |
최소 2대 (예: node1, node2) |
NIC 설정 |
2개 이상 NIC 구성 또는 Bonding 권장 |
SELinux |
disabled 또는 permissive 설정 |
방화벽 |
필요한 포트만 허용 또는 firewalld/iptables 비활성화 |
시간 동기화 |
chronyd 또는 ntpd 사용 |
호스트 간 SSH 키 |
무비밀번호 SSH 구성 |
DNS 또는 hosts 설정 |
/etc/hosts에 모든 노드 등록 |
GlusterFS 설치 및 설정 절차
GlusterFS 저장소 등록 및 패키지 설치
cat <<EOF > /etc/yum.repos.d/CentOS-Gluster-9.repo
[centos-gluster9]
name=CentOS 7 - Gluster 9
baseurl=http://vault.centos.org/7.9.2009/storage/x86_64/gluster-9/
enabled=1
gpgcheck=0
EOF
yum install -y epel-release
# 서버 노드에서 실행 (브릭 및 볼륨 운영용)
yum install -y glusterfs-server glusterfs
# 클라이언트 노드에서 실행 (볼륨 마운트용)
yum install -y glusterfs glusterfs-fuse
GlusterFS 데몬 시작 및 클러스터 구성
systemctl enable glusterd --now
gluster peer probe node2
gluster peer status
gluster pool list
Brick 디렉토리 생성 및 Volume 구성
GlusterFS Volume 유형 설명 및 설정 방법
유형 |
설명 |
특징 |
replica |
데이터를 지정된 수만큼 동일하게 복제하여 저장 |
고가용성 보장, 데이터 손실 방지 |
distribute |
파일을 브릭에 분산 저장하되 복제는 하지 않음 |
저장 용량 극대화, 복제 불필요한 경우 적합 |
disperse (erasure coding) |
데이터와 패리티 정보를 여러 브릭에 분산 저장 |
저장 효율성 및 복원력 확보, 대규모 환경에 적합 |
# 브릭 디렉토리 생성
mkdir -p /gluster/brick1
# replica 2 볼륨 생성
gluster volume create gv0 replica 2 node1:/gluster/brick1 node2:/gluster/brick1 force
gluster volume start gv0
gluster volume info
GlusterFS 볼륨 마운트 (클라이언트 측)
mount -t glusterfs node1:/gv0 /mount_point
포트 정보 요약
서비스 |
포트 |
설명 |
GlusterFS |
24007, 24008, 24009 |
관리/브릭 통신용 포트 |
GlusterFS의 주요 기능 예시
Volume Type 설정
- GlusterFS에서 Volume 유형을 설정함으로써 복제(Replica), 분산 저장(Distribute), 이레이저 코딩(Disperse) 등 다양한 저장 전략을 선택할 수 있습니다. 이는 데이터의 가용성, 성능, 저장 효율성 간의 균형을 맞추는 데 필수적입니다.
gluster volume create gv0 replica 2 node1:/gluster/brick1 node2:/gluster/brick1 force
gluster volume start gv0
Volume 확장
- 기존 Volume에 브릭을 추가하여 스토리지 용량을 수평적으로 확장할 수 있습니다. 추가 후 Rebalance 명령어를 실행하면 기존 파일들이 새로운 브릭에도 분산되어 저장됩니다. 이는 시스템 중단 없이 용량을 늘릴 수 있는 유연성을 제공합니다.
gluster volume add-brick gv0 node3:/gluster/brick1 node4:/gluster/brick1 force
gluster volume rebalance gv0 start
자동 Healing
- Replica 볼륨에서 하나의 노드가 장애 후 복구되었을 때, 변경된 데이터만 자동으로 동기화(heal)하여 복제 일관성을 유지합니다. 수동 개입 없이 Gluster가 스스로 복제 상태를 복구할 수 있게 해줍니다.
gluster volume heal gv0 info
Geo-Replication
- 물리적으로 다른 위치의 Gluster 클러스터로 데이터를 비동기 복제하여 재해 복구(Disaster Recovery) 구성을 할 수 있습니다. 원격지 백업을 자동화하여 데이터 보호 범위를 넓힐 수 있습니다.
gluster volume geo-replication gv0 node3::gv0 start
Quota 설정
- 특정 디렉토리에 대해 저장 용량 제한을 설정할 수 있어 사용자 또는 서비스별 자원 통제를 가능하게 합니다. 시스템 무단 점유나 과다 사용을 방지하는 데 유용합니다.
gluster volume quota gv0 enable
gluster volume quota gv0 limit-usage /data 10GB
Snapshot
- 특정 시점의 데이터를 캡처하여 보존하는 기능으로, 장애 발생 시 이전 시점으로의 복원을 지원합니다. 빠른 복구와 변경 추적에 유용합니다.
gluster snapshot create snap1 gv0 no-timestamp
gluster snapshot activate snap1
ACL 설정
- 기존의 UNIX 파일 권한보다 더 세분화된 권한 제어가 가능하여 사용자 또는 그룹별로 읽기/쓰기 접근 권한을 세밀하게 설정할 수 있습니다.
setfacl -m u:alpha:rwX /mount_point/dir
NFS/SMB 통합
- GlusterFS 데이터를 Samba 또는 NFS를 통해 공유함으로써 다양한 플랫폼의 클라이언트와 호환 가능한 파일 공유 환경을 제공합니다.
- NFS-Ganesha 또는 Samba를 통한 GlusterFS 데이터 공유 설정 가능
Tiering 구성
- 자주 접근되는 데이터는 빠른 SSD에, 드물게 사용하는 데이터는 저비용 HDD에 저장되도록 계층화하여 성능과 비용 효율성을 모두 확보할 수 있습니다.
gluster volume tier gv0 attach tier gv0_hot type=hot
기능 |
설명 |
Volume Type 설정 |
replica , distribute , disperse 등 다양한 유형 설정 가능 |
Volume 확장 |
기존 Volume에 브릭 추가 가능 (gluster volume add-brick ) |
자동 Healing |
장애 복구 후 변경된 파일만 자동으로 복구 (gluster volume heal ) |
Geo-Replication |
원격지 서버에 비동기 복제 가능 |
Quota 설정 |
디렉토리별 용량 제한 설정 가능 |
Snapshot |
Volume Snapshot 기능 제공 (gluster 3.7 이상) |
ACL |
POSIX ACL을 통한 세분화된 권한 제어 가능 |
NFS/SMB 통합 |
GlusterFS를 통해 NFS 또는 Samba 공유 가능 |
Tiering |
Hot/Cold 데이터 분리를 통한 성능 최적화 구성 가능 |
GlusterFS의 고가용성(Failover) 구성 방법
기본 개념
GlusterFS는 replica volume을 통해 데이터 복제는 지원하지만, 특정 서버 장애 시 클라이언트 마운트가 실패할 수 있습니다. 이를 방지하려면 클라이언트 또는 서버 측에 failover 구성을 적용해야 합니다.
구성 방법
방법 1: 클라이언트 FUSE 마운트 다중 노드 지정
mount -t glusterfs node1,node2:/gv0 /mnt/gluster
- 클라이언트는 지정된 순서대로 서버에 접속하며, 첫 번째 서버 장애 시 두 번째 서버로 자동 전환됩니다.
- DNS 이름 해석 및 GlusterFS 데몬 상태가 정상이어야 함
방법 2: Pacemaker + VIP 구성
- Pacemaker를 사용하여 VIP(Virtual IP)를 구성하고, 해당 VIP를 통해 클라이언트는 항상 고정된 IP로 GlusterFS에 접속합니다.
- Pacemaker는 장애 발생 시 VIP를 다른 노드로 자동 이동시킵니다.
방법 3: NFS-Ganesha 연동
- GlusterFS 볼륨을 NFS로 export하고, Pacemaker를 통해 NFS 서비스를 클러스터화
- 주로 레거시 클라이언트 환경에서 유용
방법 4: CTDB + Samba 연동
- SMB 공유가 필요한 경우, CTDB를 통해 GlusterFS 기반 Samba 공유를 클러스터로 구성 가능
실무 권장 구성
실제 서비스 환경에서는 다음과 같은 방법을 함께 구성하는 것이 가장 안정적인 고가용성 아키텍처를 제공합니다:
- 클라이언트 측 구성:
- FUSE 기반 마운트를 여러 노드를 지정하여 설정합니다.
mount -t glusterfs node1,node2:/gv0 /mnt/gluster
- GlusterFS는 첫 번째 서버가 다운되면 다음 서버로 자동 연결을 시도합니다.
- DNS 이름 대신
/etc/hosts
설정 또는 IP 주소 직접 지정 권장
- 서버 측 구성 (Pacemaker + VIP):
- GlusterFS 볼륨 구성:
- 반드시
replica
볼륨으로 설정해야 클러스터 노드 간 데이터가 복제되고 failover 시 일관성 유지됩니다.
- 장애 복구 후 동기화:
gluster volume heal gv0 info
- 노드 복구 시 반드시 복제 상태를 확인하고 필요한 경우 heal 명령어 실행
- 클라이언트 측 다중 노드 마운트 + 서버 측 VIP failover 병행 구성
- 클러스터 노드가 많아질수록 FUSE 다중 마운트 방식의 안정성이 높아짐
장애 복구 이후 수행
gluster volume heal gv0 info
- 장애 복구 후 복제 상태 점검 및 동기화 필요