Ceph는 오픈소스 분산 스토리지로, 블록, 파일, 객체 서비스를 하나의 시스템에서 제공하며, Cephadm을 이용해 Docker/Podman 컨테이너 기반으로 쉽게 설치·관리할 수 있다. 최소 3노드 구성과 시간 동기화, SSH 키 배포가 필요하고, Bootstrap으로 첫 노드를 초기화한 뒤 다른 노드와 디스크를 OSD로 추가한다. public network와 별도 cluster network를 설정하면 성능이 향상되며, 설정 변경 시 모니터·매니저·OSD를 순차적으로 재시작해야 한다. 전체 과정은 사전 요구사항 점검, Cephadm 설치·Bootstrap, 호스트·OSD 추가, 필요시 네트워크 분리 구성으로 요약된다.
안녕하세요! 오늘은 분산 스토리지 시스템인 Ceph를 직접 설치하고 구성하는 방법을 공유하려고 합니다.
Ceph는 클라우드 플랫폼에 스토리지를 제공하기 위한 오픈소스 소프트웨어입니다. 블록 디바이스(RBD), 파일시스템(CephFS), 객체 스토리지(RGW) 와 같은 다양한 스토리지 서비스를 하나의 통합된 시스템에서 제공할 수 있다는 것이 가장 큰 장점이죠.
💡
Ceph의 핵심 구성 요소
OSD (Object Storage Daemon): 실제 데이터를 저장하는 데몬으로, 각 디스크마다 하나씩 생성됩니다
MON (Monitor): 클러스터 맵의 마스터 복사본을 유지하고 클러스터 상태를 관리합니다
MGR (Manager): 대시보드, 모니터링, 클러스터 관리 기능을 담당합니다
MDS (Metadata Server): CephFS 사용 시 파일 메타데이터를 관리합니다
Ceph에 관한 기본 개념은 공식 문서에 상세히 정리되어 있으므로, 이 글에서는 실제 설치 방법과 활용 방안에 초점을 맞춰 설명하겠습니다.
🖥️ 구성 환경
Ceph 클러스터를 위해 구성한 초기 환경은 다음과 같습니다.
hostname
mainboard
RAM
DISK
storage1
X10SRA
64GB
48TB (16TB × 3)
storage2
X10SRA
80GB
48TB (16TB × 3)
storage3
X10SRA
128GB
32TB (16TB × 2)
메모리와 디스크 용량이 제각각인 이유는 처음에 2노드로 구성하려다가 3노드로 변경하면서 장비를 재분배했기 때문입니다. Ceph는 RAID를 사용하지 않고 자체적인 복제 메커니즘(CRUSH 알고리즘)을 통해 데이터 안정성을 보장합니다. 따라서 노드마다 디스크 개수나 용량이 달라도 정상적으로 동작합니다.
⚠️
권장 사항: Ceph 클러스터는 최소 3개 이상의 노드로 구성하는 것이 좋습니다. 이는 데이터 복제 및 쿼럼(Quorum) 유지에 필요한 최소 조건입니다.
📋 사전 요구사항 (Requirements)
Cephadm은 Docker 또는 Podman을 사용하여 컨테이너 내에서 Ceph 클러스터를 운영합니다. 따라서 호스트 OS 종류에 크게 영향받지 않으며, 다음 요구사항만 충족하면 됩니다.
# 최신 안정 버전으로 설치하는 것을 권장합니다
CEPH_RELEASE=18.2.0
curl --silent --remote-name --location https://download.ceph.com/rpm-${CEPH_RELEASE}/el9/noarch/cephadm
chmod +x cephadm
./cephadm install
curl 외에도 apt나 dnf를 통한 설치도 가능하지만, 위 방법이 호스트 OS 환경에 덜 의존적입니다.
설치가 완료되면 정상 설치 여부를 확인합니다.
bash
# cephadm 경로 확인
which cephadm
# 출력: /usr/sbin/cephadm
# 도움말 확인
cephadm -h
🏗️ 클러스터 Bootstrap
Cephadm이 정상적으로 설치되었다면, bootstrap 명령어로 첫 번째 노드에 Ceph 클러스터를 생성합니다.
bash
cephadm bootstrap --mon-ip <mon-ip>
--mon-ip는 Monitor 데몬의 수신 IP 주소를 의미합니다. 이 IP는 클러스터의 첫 번째 진입점이 됩니다.
⚡ Public Network vs Cluster Network
여기서 반드시 이해하고 넘어가야 할 중요한 개념이 있습니다. Ceph는 두 가지 네트워크를 사용합니다.
🌐
Public Network: 클라이언트와 통신하는 네트워크. 외부에서 Ceph 서비스에 접근할 때 사용됩니다.
Cluster Network: OSD 간의 내부 통신 전용 네트워크. 데이터 복제, 복구, 하트비트 처리에 사용됩니다.
Bootstrap 시 --mon-ip만 지정하면 public network만 설정됩니다. 이 경우 모든 트래픽이 하나의 네트워크로 집중되어 성능이 크게 저하될 수 있습니다.
실제 서비스 환경에서는 OSD 간에 지속적으로 데이터를 이동하고 복제해야 합니다. Public network로 모든 통신을 처리하면 클라이언트 요청과 내부 복제 트래픽이 경합하여 시스템이 극도로 느려집니다.
노드가 추가되면 Ceph가 자동으로 필요한 서비스들을 배포합니다. 이 과정에서 기존 PG(Placement Group)와 OSD 내 오브젝트들의 위치를 재정리하고 분배하므로 시간이 다소 소요됩니다.
클러스터 상태는 다음 명령어로 확인할 수 있습니다.
bash
ceph -s
# 또는
ceph orch host ls
💾 OSD 추가
클러스터에 노드가 추가되었다고 끝이 아닙니다. 각 노드의 디스크를 OSD로 등록해야 실제로 데이터를 저장할 수 있습니다.
모든 가용 디바이스를 OSD로 자동 추가하려면 다음 명령어를 사용합니다.
bash
ceph orch apply osd --all-available-devices
이 명령어는 부팅 디스크를 제외한 사용 가능한 모든 디스크를 OSD로 등록합니다.
📌
OSD로 사용 가능한 디스크 조건
파티션이 없어야 함
LVM 논리 볼륨이 없어야 함
파일시스템이 없어야 함
Ceph BlueStore OSD가 없어야 함
마운트되어 있지 않아야 함
OSD 상태는 다음 명령어로 확인합니다.
bash
ceph osd tree
ceph osd status
🔧 Cluster Network 나중에 추가하기
처음에 public network만 구성하고 cluster network를 설정하지 않았다면, 모든 트래픽이 하나의 네트워크로 집중되어 성능이 크게 저하됩니다. 이 섹션에서는 운영 중인 클러스터에 cluster network를 추가하는 방법을 설명합니다.
⚠️
주의: 이 작업은 클러스터 서비스에 일시적인 영향을 줄 수 있습니다. 가능하면 트래픽이 적은 시간대에 진행하세요.
아래 모든 과정은 cephadm shell 내에서 또는 ceph-common이 설치된 호스트에서 수행합니다.
1단계: 네트워크 설정 추가
bash
# Public network와 Cluster network 설정
ceph config set global public_network 172.30.0.0/16
ceph config set global cluster_network 10.10.10.0/24
# 설정 확인
ceph config dump | grep network
💡
왜 45초를 기다릴까요?
Ceph는 데몬 수가 변경되면 쿼럼 체크와 데이터 재분배가 발생합니다. 이 과정이 안정화되고 HEALTH_OK 상태가 될 때까지 기다려야 다음 데몬을 안전하게 재시작할 수 있습니다.