본문으로 건너뛰기

[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 및 클러스터 상태를 확인할 수 있다

레퍼런스​