본문으로 건너뛰기

[OpenStack 아키텍처 실습2] Ceph 클러스터 구성

April 23, 2026

개요

앞선 글에서 OpenStack 환경을 구성했다. 이번에는 OpenStack에서 사용할 분산 스토리지인 Ceph를 구축한다.

Ceph는 여러 노드의 디스크를 하나의 스토리지처럼 사용할 수 있는 분산 스토리지 시스템이다.

Ceph의 장점은 다음과 같다:

  • 노드 장애 시에도 데이터가 복제되어 데이터 안정성이 높고
  • 스토리지를 노드 단위로 확장할 수 있어 확장성이 뛰어나며
  • 중앙 스토리지 없이도 구성 가능해 유연한 구조를 만들 수 있다

또한 OpenStack에서는 Cinder, Glance, Nova 등 다양한 컴포넌트의 스토리지 백엔드로 활용되며, 실무 환경에서도 두 시스템을 함께 구성하는 경우가 많다.

이번 글에서는 이러한 구조를 기반으로 Ceph 클러스터를 직접 구성해본다.


VM 구성

VM 생성

ceph1

  • OS 디스크 외에 Ceph용 디스크를 별도로 추가한다.
  • Ceph 디스크는 포맷하거나 파티션을 나누지 않고 그대로 둔다.

구성 예시:

  • scsi0 (32GB)
    • partition1: BIOS grub
    • partition2: /boot (2GB)
    • partition3: / (나머지)
  • scsi1 (80GB)
    • Ceph용 디스크 (파티션 없음)

네트워크 설정

ceph2

sudo nano /etc/netplan/50-cloud-init.yaml
network:
version: 2
ethernets:
ens18:
dhcp4: true
ens19:
addresses:
- 192.168.20.3/24 # 1과 2는 OpenStack 노드에서 점유중이므로
ens20:
addresses:
- 192.168.30.1/24
  • ens19: Ceph Public 네트워크 (192.168.20.0/24)
  • ens20: Ceph Cluster 네트워크 (192.168.30.0/24)

Ceph Public 네트워크는 OpenStack의 스토리지 네트워크와 동일하게 구성했고, Cluster 네트워크는 노드 간 내부 복제 트래픽을 분리하기 위해 별도로 구성했다.

sudo netplan apply
  • 적용

공통 설정

기본 설정

sudo apt update
  • 패키지 업데이트
# 호스트명 설정
sudo hostnamectl set-hostname ceph1 # node2, node3도 각각
  • 호스트 명 설정
  • 당연한 얘기지만, 노드마다 다르게 설정해야한다.

hosts 설정

# /etc/hosts에 3대 모두 등록 (모든 노드에서 동일하게)
sudo nano /etc/hosts
192.168.20.3  ceph1
192.168.20.4 ceph2
  • Ceph Public 네트워크 기준으로 등록한다.

시간 동기화 및 런타임

# 시간 동기화
sudo apt install -y chrony # Ubuntu
sudo systemctl enable --now chrony

# 컨테이너 런타임 (Ubuntu 기준, Podman 권장)
sudo apt install -y podman
  • Ceph는 컨테이너 기반으로 동작하므로 Podman을 사용한다.
  • OpenStack과 마찬가지로 노드 간 시간이 맞지 않으면 통신에서 문제가 발생할 수 있기 때문에 시간 동기화는 필수적으로 설정해야 한다.

Ceph 클러스터 구성

Bootstrap (첫 노드)

sudo apt install -y cephadm

sudo cephadm bootstrap --mon-ip 192.168.20.3
  • 클러스터 초기화 및 첫 MON 노드 생성
  • 초기 admin 비밀번호가 출력되므로 반드시 기록한다

CLI 설치 및 상태 확인

# ceph CLI 도구 설치
sudo cephadm install ceph-common
# 상태확인 cli
sudo ceph status
  • 초기 상태는 HEALTH_WARN이며, 단일 노드 상태다

노드 추가

OS를 설치할 때 root 계정을 사용하지 않고 Ubuntu 기본 계정으로 설치한 경우
  • sudo passwd root
  • sudo sed -i 's/#PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config
  • sudo systemctl restart ssh
  • 이후 아래의 ssh-copy-id 진행
# cephadm이 생성한 SSH 공개키를 node2에 복사
ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph2
# 호스트 추가
sudo ceph orch host add ceph2 192.168.20.4
# 확인
sudo ceph orch host ls
  • 노드가 정상적으로 추가되었는지 확인한다

Ceph 네트워크 설정

sudo ceph config set global public_network 192.168.20.0/24 
sudo ceph config set global cluster_network 192.168.30.0/24
  • Ceph 네트워크를 명시적으로 설정한다.
  • Ceph Public은 192.168.20.0/24 대역
  • Ceph Cluster는 192.168.30.0/24 대역
# 적용 확인 
sudo ceph config dump | grep network

OSD 구성

OSD 개념

OSD(Object Stroage Daemon)은 이름만 보면 오브젝트 스토리지인가? 싶지만 아니다.

OSD는 Ceph의 저수준 저장 단위로써 디스크 하나당 OSD 하나가 붙어서, Ceph 내부적으로 데이터를 'RADOS object'라는 단위로 쪼개서 저장한다.

그리고 그 위에서 접근 방식을 정한다.

  • 블록 스토리지(RBD - RADOS Block Device)
  • 파일 스토리지(CephFS)
  • 오브 젝트스토리지(RADOS Gateway)를

그러니까 아래 작업은 접근 방식과 관계없이 기본적으로 해주어야하는 작업이다.

디스크 확인 및 적용

# 사용 가능한 빈 디스크 확인
sudo ceph orch device ls
# 방법 A: 모든 빈 디스크 자동으로 OSD화
sudo ceph orch apply osd --all-available-devices

# 방법 B: 하나씩 지정
sudo ceph orch daemon add osd ceph1:/dev/vdb
sudo ceph orch daemon add osd ceph2:/dev/vdb

상태 확인

sudo ceph status
  • OSD 추가 후 상태가 HEALTH_OK로 변경된다 (노드 수가 3개 미만이면 WARN이 유지될 수 있음)

ceph3

sudo ceph orch ps
  • osd 데몬이 정상 실행되는지 확인한다 (ods라는 이름 붙은 것이 있는지)

테스트

sudo ceph osd pool create test-pool 32

echo "hello ceph" | sudo rados -p test-pool put test-obj -

sudo rados -p test-pool get test-obj -
  • Ceph 내부 RADOS 계층에 직접 데이터를 저장/조회하는 테스트
  • hello ceph가 출력되면 정상이다

대시보드

ceph4

  • https://<첫 노드 IP>:8443 접속
  • 계정:
    • ID: admin
    • PW: bootstrap 시 출력된 비밀번호

ceph5

  • 생성한 pool 및 클러스터 상태를 확인할 수 있다

레퍼런스