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 공유를 클러스터로 구성 가능

실무 권장 구성

실제 서비스 환경에서는 다음과 같은 방법을 함께 구성하는 것이 가장 안정적인 고가용성 아키텍처를 제공합니다:

  1. 클라이언트 측 구성:
    • FUSE 기반 마운트를 여러 노드를 지정하여 설정합니다.
    mount -t glusterfs node1,node2:/gv0 /mnt/gluster
    
    • GlusterFS는 첫 번째 서버가 다운되면 다음 서버로 자동 연결을 시도합니다.
    • DNS 이름 대신 /etc/hosts 설정 또는 IP 주소 직접 지정 권장
  2. 서버 측 구성 (Pacemaker + VIP):
    • Pacemaker/Corosync를 구성하여 Virtual IP(VIP)를 failover 대상으로 등록합니다.
    • VIP를 통해 클라이언트는 항상 동일한 IP로 GlusterFS에 접근합니다.
    • 설정 예시 (node1에서):
      pcs resource create gluster-vip ocf:heartbeat:IPaddr2 ip=192.168.10.100 cidr_netmask=24 op monitor interval=30s
      pcs constraint colocation add gluster-vip with glusterd INFINITY
      pcs constraint order start glusterd then gluster-vip
      
  3. GlusterFS 볼륨 구성:
    • 반드시 replica 볼륨으로 설정해야 클러스터 노드 간 데이터가 복제되고 failover 시 일관성 유지됩니다.
  4. 장애 복구 후 동기화:
    gluster volume heal gv0 info
    
    • 노드 복구 시 반드시 복제 상태를 확인하고 필요한 경우 heal 명령어 실행
  • 클라이언트 측 다중 노드 마운트 + 서버 측 VIP failover 병행 구성
  • 클러스터 노드가 많아질수록 FUSE 다중 마운트 방식의 안정성이 높아짐

장애 복구 이후 수행

gluster volume heal gv0 info
  • 장애 복구 후 복제 상태 점검 및 동기화 필요