티스토리 뷰
GlusterFS 정보
GlusterFS는 확장 가능한(scalable) 오픈 소스 네트워크 파일 시스템(Network Filesystem)입니다. 여러 서버의 로컬 스토리지 자원을 하나의 큰 스토리지 풀(Storage Pool)로 묶어 단일 글로벌 네임스페이스를 제공하는 소프트웨어 정의 분산 스토리지(Software-Defined Distributed Storage) 솔루션입니다.
하드웨어 종속적이지 않고 범용 하드웨어를 사용하여 대규모 스토리지 클러스터를 구축할 수 있으며, 데이터 중복성 및 고가용성 기능을 제공합니다.
GlusterFS 아키텍처
GlusterFS는 기본적으로 클라이언트-서버 모델로 작동하며, 다음과 같은 핵심 구성 요소로 이루어집니다.
- 브릭 (Brick):
GlusterFS 볼륨을 구성하는 가장 기본적인 스토리지 단위입니다. 클러스터 내 각 서버(노드)의 특정 디렉토리가 하나의 브릭이 됩니다. 예를 들어, 서버 1의/data/brick1
디렉토리가 브릭이 될 수 있습니다. - 볼륨 (Volume):
하나 이상의 브릭들을 논리적으로 묶어서 만든 분산 파일 시스템입니다. 클라이언트는 볼륨 이름으로 접근하며, 실제 데이터는 볼륨을 구성하는 여러 브릭에 분산되거나 복제되어 저장됩니다. - 트랜슬레이터 (Translator):
GlusterFS의 모듈화된 핵심 부분입니다. 브릭들을 조합하고, 클라이언트 요청을 가로채서 데이터 분산, 복제, 캐싱, 부하 분산 등 다양한 기능을 수행합니다. GlusterFS의 유연성은 트랜슬레이터 체인 구조에서 비롯됩니다. - 클라이언트 (Client):
GlusterFS 볼륨에 접근하여 데이터를 읽고 쓰는 시스템입니다. FUSE(Filesystem in Userspace) 드라이버를 사용하여 GlusterFS 볼륨을 로컬 파일 시스템처럼 마운트하거나, 네이티브 GlusterFS 클라이언트 라이브러리를 사용하는 애플리케이션에서 직접 접근할 수 있습니다.
GlusterFS의 특징 중 하나는 중앙 집중식 메타데이터 서버가 없다는 것입니다. 각 브릭은 자체 메타데이터를 관리하며, 클라이언트가 직접 브릭들과 통신하여 메타데이터 및 데이터를 분산적으로 처리합니다. 이는 중앙 메타데이터 서버의 단일 실패 지점(Single Point of Failure, SPOF) 문제를 해결합니다.
GlusterFS 볼륨 타입
브릭들을 조합하는 방식에 따라 다양한 볼륨 타입을 생성하여 스토리지의 특성을 조절할 수 있습니다.
- 분산 볼륨 (Distribute Volume):
가장 기본적인 볼륨 타입입니다. 여러 브릭에 데이터를 순차적으로 분산하여 저장합니다. 저장 용량이 단순 합산되지만 데이터 중복성은 없습니다. 브릭 중 하나가 실패하면 해당 브릭의 데이터에 접근할 수 없습니다. - 복제 볼륨 (Replicate Volume):
여러 브릭에 데이터를 동일하게 복제하여 저장합니다. 데이터 중복성을 제공하여 고가용성을 확보할 수 있습니다. 복제되는 브릭 수만큼 용량이 소모됩니다 (예: 2-way 복제 시 용량은 절반). N개의 복제본을 가지는 볼륨은 최소 N개의 브릭(또는 N의 배수)으로 구성됩니다. - 스트라이프 볼륨 (Striped Volume):
하나의 파일을 여러 조각으로 나누어 여러 브릭에 동시에 저장합니다. 대용량 파일의 읽기/쓰기 성능을 향상시킬 수 있지만, 데이터 중복성은 없습니다. N개의 스트라이프 볼륨은 N개의 브릭(또는 N의 배수)으로 구성됩니다. - 분산-복제 볼륨 (Distribute+Replicate Volume):
가장 흔히 사용되는 형태입니다. 먼저 데이터를 여러 브릭 그룹에 분산(Distribute)시킨 후, 각 그룹 내에서 데이터를 복제(Replicate)합니다. 확장성(분산)과 고가용성/중복성(복제)을 동시에 제공합니다. (N x M)개의 브릭으로 구성됩니다. N은 분산 단위 수, M은 복제본 수입니다. - 이 외에도 스트라이프-복제, 복제-스트라이프 등 다양한 조합이 가능합니다.
주요 특징 및 장점
- 스케일 아웃 (Scale-out):
필요에 따라 서버(노드)와 스토리지(브릭)를 추가하여 용량 및 성능을 선형적으로 확장할 수 있습니다. - 고가용성 및 데이터 중복성:
복제 볼륨 구성을 통해 브릭 또는 서버 실패 시에도 서비스 연속성과 데이터 가용성을 보장합니다. - 유연성:
다양한 볼륨 타입 조합으로 성능, 용량, 중복성 요구사항에 맞춰 스토리지를 구성할 수 있습니다. - 단일 실패 지점 없음 (No SPOF):
중앙 메타데이터 서버가 없어 단일 실패 지점이 없으며, 분산된 아키텍처는 시스템 전반의 탄력성을 높입니다. - 자체 복구 (Self-healing):
네트워크 문제나 서버 다운 등으로 브릭에 접근할 수 없게 되었다가 복구되면, GlusterFS가 자동으로 누락된 데이터를 감지하고 복제본 간에 데이터를 동기화하여 일관성을 유지합니다 (셀프 힐링). - 범용 하드웨어 사용:
고가의 전용 스토리지 하드웨어 없이 일반적인 서버와 디스크로 스토리지 클러스터를 구축할 수 있어 비용 효율적입니다.
Linux에 GlusterFS 설치 및 기본 설정 예시
다음은 최소 2대 이상의 Linux 서버(예: `server1`, `server2`)를 사용하여 간단한 복제 볼륨을 설정하는 예시입니다.
전제: 클러스터에 참여할 모든 서버에 아래 단계를 수행해야 합니다. 서버 간 호스트 이름 또는 IP로 통신 가능해야 합니다.
- GlusterFS 패키지 설치:
클러스터에 참여할 모든 서버에 GlusterFS 서버 패키지를 설치합니다.# Debian/Ubuntu 계열 sudo apt update sudo apt install glusterfs-server # RHEL/CentOS/AlmaLinux/Rocky Linux 계열 sudo yum install glusterfs-server # 또는 dnf 사용 시 # sudo dnf install glusterfs-server
- Glusterd 서비스 시작 및 자동 실행 설정:
모든 서버에서 GlusterFS 데몬(glusterd
)을 시작하고 시스템 부팅 시 자동 실행되도록 설정합니다.sudo systemctl enable glusterd sudo systemctl start glusterd # 상태 확인 sudo systemctl status glusterd
- 브릭으로 사용할 디렉토리 생성:
각 서버에서 GlusterFS 브릭으로 사용할 디렉토리를 생성합니다. 이 디렉토리가 실제 데이터가 저장되는 공간이 됩니다.
*(브릭은 비어 있는 디렉토리를 사용하는 것이 좋습니다.)*sudo mkdir -p /gluster/brick1
- 피어(Peer) 연결:
클러스터 내 서버들이 서로를 인식하도록 피어 연결을 설정합니다. 이는 클러스터의 한 서버에서 다른 서버들로 연결하는 명령을 실행합니다. (모든 서버에서 이 명령을 실행할 필요는 없습니다. 한 서버에서 나머지 모든 서버에게 `probe` 명령을 날리면 됩니다.)
피어 상태 확인:# server1에서 실행 (server2와 server3가 있다면) sudo gluster peer probe server2.example.com # sudo gluster peer probe server3.example.com ...
sudo gluster peer status
- 볼륨 생성:
피어 연결이 완료된 후, 클러스터 내 아무 서버에서 볼륨을 생성합니다. 복제 볼륨(2-way) 예시입니다. (`replica 2` 옵션 사용)
*`force` 옵션은 브릭 디렉토리가 비어 있지 않거나 권장 설정이 아닐 때 강제로 생성할 때 사용합니다. 프로덕션 환경에서는 신중해야 합니다.*# 복제 볼륨 생성 예시 (2-way) sudo gluster volume create my-replicated-volume replica 2 server1.example.com:/gluster/brick1 server2.example.com:/gluster/brick1 force
*분산 볼륨:sudo gluster volume create my-distribute-volume server1:/gluster/brick1 server2:/gluster/brick1 ...
*
*분산-복제 볼륨 (server1, server2 복제 그룹 1 / server3, server4 복제 그룹 2):sudo gluster volume create my-distrep-volume replica 2 server1:/gluster/brick1 server2:/gluster/brick1 server3:/gluster/brick1 server4:/gluster/brick1 force
* - 볼륨 시작:
생성된 볼륨을 시작하여 클라이언트가 접근할 수 있도록 활성화합니다.sudo gluster volume start my-replicated-volume
- 볼륨 정보 확인:
볼륨 상태 및 정보를 확인합니다.sudo gluster volume info sudo gluster volume status
GlusterFS 볼륨 사용 (클라이언트)
GlusterFS 볼륨이 시작되면 클라이언트 시스템에서 해당 볼륨을 마운트하여 파일 시스템처럼 사용할 수 있습니다.
- GlusterFS 클라이언트 패키지 설치:
볼륨에 접근할 클라이언트 시스템에 GlusterFS 클라이언트 패키지를 설치합니다. (서버 패키지에 클라이언트 기능이 포함되어 있는 경우도 많습니다.)# Debian/Ubuntu 계열 sudo apt update sudo apt install glusterfs-client # RHEL/CentOS 등 계열 sudo yum install glusterfs-client # 또는 dnf 사용 시 # sudo dnf install glusterfs-client
- 볼륨 마운트:
mount
명령어를 사용하여 GlusterFS 볼륨을 클라이언트의 로컬 디렉토리에 마운트합니다.
*(sudo mkdir /mnt/gluster-volume sudo mount -t glusterfs server1.example.com:/my-replicated-volume /mnt/gluster-volume
server1.example.com
은 클러스터 내 아무 서버의 호스트 이름이나 IP를 사용해도 됩니다. GlusterFS 클라이언트가 자동으로 클러스터 정보를 얻습니다.)* - 파일 시스템 사용:
마운트된 디렉토리(/mnt/gluster-volume
)에 일반 파일 시스템처럼 파일을 읽고 쓸 수 있습니다. 데이터는 클러스터의 해당 브릭들에 분산되거나 복제되어 저장됩니다. - 자동 마운트 설정:
시스템 부팅 시 자동으로 마운트되도록 하려면/etc/fstab
파일에 해당 내용을 추가합니다.
*`_netdev` 옵션은 네트워크가 활성화된 후에 마운트를 시도하도록 하여 부팅 시 오류를 방지합니다.*server1.example.com:/my-replicated-volume /mnt/gluster-volume glusterfs defaults,_netdev 0 0
주요 활용 사례
- 가상 머신(VM)의 공유 스토리지 (QEMU/KVM, OpenStack 등 환경에서 VM 이미지 저장소로 사용).
- 대용량 비정형 데이터 저장 (빅데이터, 로그 파일 등).
- 미디어 스트리밍 및 콘텐츠 전송 네트워크(CDN) 백엔드 스토리지.
- 고가용성이 요구되는 애플리케이션의 공유 파일 시스템.
- 일반적인 네트워크 파일 공유.
GlusterFS는 분산 아키텍처를 통해 뛰어난 확장성과 유연성, 그리고 고가용성을 제공하는 강력한 오픈 소스 스토리지 솔루션입니다. 클라우드 환경이나 대규모 데이터 처리가 필요한 환경에서 특히 유용하게 사용될 수 있습니다.
- Total
- Today
- Yesterday
- SQL
- BAT
- VBS
- partition
- handdrip
- 스페셜티
- diff
- Eclipse
- popup
- 단위변환
- 커피
- MySQL
- db
- dbeaver
- table
- oracle
- SEQUENCE
- Coffee
- MariaDB
- Powershell
- date
- LILI COFFEE
- JavaScript
- Filter
- 리리 커피
- GitHub
- backup
- Between
- JSP
- 로스터리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |