---
title: "Ceph 클러스터 안전한 종료 및 재부팅 가이드: 전원 꺼짐과 문제 해결 방법"
description: "이 가이드는 cephadm으로 설치한 Ceph 클러스터를 안전하게 종료하고 전원 복구 후 OpenStack과 연동해 정상적으로 재부팅하는 절차와 주의사항을 단계별로 설명한다."
date: "2025-06-22"
last_modified: "2026-08-26T07:58:00.000Z"
type: "Post"
tags:
  - "ceph"
  - "openstack"
  - "storage"
  - "troubleshooting"
  - "Docs"
categories:
  - "📗 Docs"
series:
  - "ceph"
canonical_url: "https://blog.pieroot.xyz/ceph-shutdown-reboot"
markdown_url: "https://blog.pieroot.xyz/ceph-shutdown-reboot.md"
---

# Ceph 클러스터 안전한 종료 및 재부팅 가이드: 전원 꺼짐과 문제 해결 방법

이 가이드는 cephadm으로 설치한 Ceph 클러스터를 안전하게 종료하고 전원 복구 후 OpenStack과 연동해 정상적으로 재부팅하는 절차와 주의사항을 단계별로 설명한다.

연구실 정전으로 인해 Ceph 클러스터를 안전하게 종료하고 나중에 다시 전원을 올려야 하는 상황이 생겼습니다. 보통은 특별한 이슈가 없다면 전원을 동시에 내리지 않는 것이 좋지만, 전기 점검 문제로 인해 전체를 다 내려야만 했죠.

이 글에서는 **cephadm으로 설치한 Ceph 클러스터**를 안전하게 종료하고, 추후 다시 전원을 켜서 OpenStack에서 사용할 수 있도록 복구하는 전체 과정을 다룹니다.

> **중요**: 이 가이드는 **cephadm으로 설치한 환경**에서만 적용 가능합니다. ceph-deploy나 다른 방식으로 설치했다면 명령어가 다를 수 있습니다.

> **OpenStack과 같이 쓸 때.** Ceph만 `HEALTH_OK`여도 Galera Primary가 없으면 Cinder/Glance/Nova/Manila는 다시 실패할 수 있다. 전원 종료·복구는 스토리지 다음에 제어면을 도는 한 순서다.

```mermaid
flowchart TB
  A["OpenStack 워크로드 중지"] --> B["제어면 쓰기 중단"]
  B --> C["Galera 종료 상태 기록"]
  C --> D["CephFS 비활성화"]
  D --> E["OSD 플래그 설정"]
  E --> F["Ceph 데몬 종료"]
  F --> G["호스트 전원 끄기"]
```

---

### 🤔 왜 안전한 종료가 필요한가요?

Ceph는 분산 스토리지 시스템으로, 여러 노드에 데이터를 복제하여 저장합니다. 갑작스러운 전원 차단은 다음과 같은 문제를 일으킬 수 있습니다:

따라서 **OSD 플래그 설정 → CephFS 종료 → 데몬 종료** 순서를 지켜야 합니다.

---

### 📋 종료 전 체크리스트

종료를 시작하기 전에 다음 사항을 확인하세요:

> **사전 확인 사항**
> 
> - 클러스터 상태가 `HEALTH_OK`인지 확인
> 
> - OpenStack VM, Manila 마운트, Cinder 작업을 먼저 중지
> 
> - Galera 마지막 Primary, 각 노드 seqno, `safe_to_bootstrap`를 기록
> 
> - 진행 중인 복구 작업이 없는지 확인

```bash
# 클러스터 상태 확인
ceph -s

# 진행 중인 복구 작업 확인
ceph status | grep -E "recovering|degraded|undersized"
```

OpenStack 클라이언트를 구체화하면 종료 전에 아래처럼 범위를 좁힌다.

```bash
openstack server list --all-projects
# 필요 시 워크로드 중지
# openstack server stop <server>

# Manila 공유 파일시스템 마운트 해제, Cinder in-flight 작업 중단 확인
```

Galera 노드가 같이 내려간다면, 전원을 끄기 전에 각 노드 상태를 남긴다. 다음 부팅 시 bootstrap 후보를 추측하지 않으려면 이 기록이 필요하다.

```bash
systemctl is-active mariadb || true
sudo sed -n '1,20p' /var/lib/mysql/grastate.dat
sudo journalctl -u mariadb -b --no-pager | grep "Recovered position" | tail -1
```

상세 복구 기준은 [Galera Cluster로 구축하는 OpenStack 환경의 고가용성 MySQL 데이터베이스 완벽 가이드](https://app.notion.com/p/214067c015d080cda372d981c5aa8df8)를 따른다.

### 🔀 정상 종료 vs 비정상 전원 차단

---

### 🔒 1단계: CephFS 종료

우선 cephadm shell에 로그인하여 관리 접근권한을 취득합니다.

```bash
cephadm shell
```

CephFS를 사용 중인 경우, **반드시 먼저 CephFS 클러스터를 종료**해야 합니다. 이 단계를 건너뛰면 메타데이터 손상이 발생할 수 있습니다.

```bash
# MDS(Metadata Server) 수를 1개로 줄이기
ceph fs set cephfs max_mds 1

# CephFS 클러스터를 실패 상태로 전환
ceph fs fail cephfs

# 현재 상태 확인
ceph status

# 클러스터 조인 비활성화 (재시작 시 자동 복구 방지)
ceph fs set cephfs joinable false
```

![image](https://blog.pieroot.xyz/api/image-proxy?id=4d855a2d-0d58-4f32-b9a5-85f158e179b5&kind=s3&pageId=21a067c0-15d0-80ec-9fbe-e6495e6ee782&source=block&blockId=21a067c0-15d0-8048-82fb-d8b470ee9d51)

> **왜 joinable을 false로 설정하나요?**
> 
> `joinable false`는 MDS가 클러스터에 자동으로 참여하는 것을 방지합니다. 이렇게 하면 전원이 복구된 후에도 수동으로 CephFS를 다시 활성화하기 전까지 안전하게 유지됩니다.

---

### 🛑 2단계: OSD 플래그 설정

Ceph의 OSD(Object Storage Daemon)는 자동으로 데이터를 복제하고, 장애를 감지하며, 리밸런싱을 수행합니다. 종료 전에 이러한 **자동 기능들을 모두 비활성화**해야 합니다.

```bash
ceph osd set noout        # 노드가 다운되어도 OSD를 out으로 표시하지 않음
ceph osd set norecover    # 복구 작업 중지
ceph osd set norebalance  # 데이터 리밸런싱 중지
ceph osd set nobackfill   # 백필 작업 중지
ceph osd set nodown       # OSD를 down으로 표시하지 않음
ceph osd set pause        # 클라이언트 I/O 일시 중지
```

![image](https://blog.pieroot.xyz/api/image-proxy?id=efb50759-280f-41f2-95c5-8991eb265739&kind=s3&pageId=21a067c0-15d0-80ec-9fbe-e6495e6ee782&source=block&blockId=ea2890d9-d774-4eab-9888-7e4ecd69ab07)

명령어가 성공하면 다음과 같은 출력이 표시됩니다:

```bash
noout is set
norecover is set
norebalance is set
nobackfill is set
nodown is set
pauserd,pausewr is set
```

![image](https://blog.pieroot.xyz/api/image-proxy?id=1155cbf0-c2d6-4d3c-ba9b-33624601d00f&kind=s3&pageId=21a067c0-15d0-80ec-9fbe-e6495e6ee782&source=block&blockId=300067c0-15d0-80a4-8e2e-d17019e55dd8)

> **각 플래그의 의미**

---

### ⚙️ 3단계: Ceph 데몬 종료

이제 모든 Ceph 데몬을 안전하게 종료해야 합니다.

#### 실행 중인 Ceph 타겟 확인

```bash
systemctl list-units --type target | grep ceph
```

출력 예시:

```bash
ceph-1f4f57ae-fe3c-11ef-b7f5-0cc47a752b98.target loaded active active Ceph cluster 1f4f57ae-fe3c-11ef-b7f5-0cc47a752b98
ceph.target                                      loaded active active All Ceph clusters and services
```

#### 모든 스토리지 노드에서 데몬 종료

**각 스토리지 노드에 접속**하여 아래 명령어를 실행합니다:

```bash
# 클러스터별 타겟 종료 (UUID는 환경에 따라 다름)
systemctl stop ceph-1f4f57ae-fe3c-11ef-b7f5-0cc47a752b98.target

# 전체 Ceph 타겟 종료
systemctl stop ceph.target
```

> **종료 순서가 중요합니다!**
> 
> 1. **OSD 노드**를 먼저 종료
> 
> 1. **Monitor 노드**를 나중에 종료
> 
> Monitor가 먼저 종료되면 OSD가 클러스터 맵을 갱신하지 못해 예기치 않은 동작이 발생할 수 있습니다.

#### 시스템 전원 끄기

모든 데몬이 안전하게 종료되었다면, 각 머신의 전원을 내립니다:

```bash
sudo shutdown -h now
```

> **전체 종료 순서**
> 
> 1. OpenStack VM·워크로드 중지
> 
> 1. 제어면 API 쓰기 중단, Galera 마지막 종료 노드 기록
> 
> 1. CephFS fail + `joinable false`
> 
> 1. OSD 플래그 설정
> 
> 1. OSD 먼저 종료, Monitor 나중 종료
> 
> 1. 호스트 전원 끄기

---

### 🚀 4단계: 클러스터 재부팅

전원 복구 후, 모든 노드가 다시 부팅되고 네트워크 연결이 가능해지면 아래 절차를 수행합니다.

정상 종료 후라면 OSD 플래그와 CephFS `joinable false`가 남아 있으므로 `HEALTH_WARN`이 보이는 것이 정상이다. 비정상 전원 차단이었다면 그 플래그가 없을 수 있다. 없는 플래그를 해제하려 하지 말고, 먼저 현재 값을 확인한다.

```mermaid
flowchart TB
  A["네트워크·시간 동기화"] --> B["Ceph MON/MGR/OSD"]
  B --> C["OSD 플래그 해제 · CephFS"]
  C --> D["Galera bootstrap · 순차 합류"]
  D --> E["ProxySQL / HAProxy / VIP"]
  E --> F["OpenStack API"]
  F --> G["CLI · compute · 볼륨 검증"]
```

#### 4-1. cephadm shell 접속

```bash
cephadm shell
```

#### 4-2. 서비스 상태 확인

```bash
ceph orch ls
```

![image](https://blog.pieroot.xyz/api/image-proxy?id=ae607bfe-7e63-4b58-8b36-f563a5f63108&kind=s3&pageId=21a067c0-15d0-80ec-9fbe-e6495e6ee782&source=block&blockId=21a067c0-15d0-80f0-9e39-fb8860e2915e)

#### 4-3. 클러스터 상태 확인

```bash
ceph -s
```

![image](https://blog.pieroot.xyz/api/image-proxy?id=ca2cb9f6-d345-4b9e-9ad5-508eab56d4fe&kind=s3&pageId=21a067c0-15d0-80ec-9fbe-e6495e6ee782&source=block&blockId=59ef574f-536e-47a2-a86f-bcff9787a0e3)

> **재부팅 직후에는 HEALTH\_WARN이 정상입니다**
> 
> OSD 플래그가 아직 설정되어 있고, CephFS가 비활성화된 상태이므로 경고가 표시됩니다. 아래 단계를 진행하면 해결됩니다.

#### 4-4. OSD 플래그 해제

종료 시 설정했던 OSD 플래그를 **역순으로** 해제합니다:

```bash
ceph osd unset pause        # I/O 재개
ceph osd unset nodown       # down 상태 표시 허용
ceph osd unset nobackfill   # 백필 작업 허용
ceph osd unset norebalance  # 리밸런싱 허용
ceph osd unset norecover    # 복구 작업 허용
ceph osd unset noout        # out 표시 허용
```

![image](https://blog.pieroot.xyz/api/image-proxy?id=cc27e59c-4ecc-4626-a446-e7a4894580f3&kind=s3&pageId=21a067c0-15d0-80ec-9fbe-e6495e6ee782&source=block&blockId=21a067c0-15d0-805e-af2f-d36355d79054)

#### 4-5. CephFS 복구

CephFS를 다시 활성화합니다:

```bash
ceph fs set cephfs joinable true
```

![image](https://blog.pieroot.xyz/api/image-proxy?id=fd4ea9ec-afd6-47bb-ba25-54a6bf199a94&kind=s3&pageId=21a067c0-15d0-80ec-9fbe-e6495e6ee782&source=block&blockId=21a067c0-15d0-80e4-b36a-c43a60484088)

#### 4-6. 최종 상태 확인

```bash
ceph -s
```

`HEALTH_OK` 상태가 되면 Ceph 자체는 복구된 것이다. 그러나 OpenStack을 같이 쓸 때는 여기서 끝내면 안 된다.

#### 4-7. OpenStack 제어면 확인

Ceph가 정상이어도 Galera Primary가 없으면 볼륨·이미지·인스턴스 API는 실패한다. Galera는 전체 전원 손실 후 자동으로 Primary를 만들지 않으므로, seqno와 `safe_to_bootstrap`가 일치하는 노드만 bootstrap한다. 절차는 [Galera Cluster로 구축하는 OpenStack 환경의 고가용성 MySQL 데이터베이스 완벽 가이드](https://app.notion.com/p/214067c015d080cda372d981c5aa8df8)를 따른다.

```bash
openstack token issue
openstack compute service list
openstack network agent list
openstack volume service list
openstack hypervisor list
```

---

### 🔧 트러블슈팅: OSD가 올라오지 않는 경우

재부팅 후 OSD가 자동으로 시작되지 않는 경우가 있습니다.

![이미 OSD를 강제 시작 누르고 급하게 찍었다…](https://blog.pieroot.xyz/api/image-proxy?id=7c7dff5c-3e87-4d67-b7a0-2b8a9e275465&kind=s3&pageId=21a067c0-15d0-80ec-9fbe-e6495e6ee782&source=block&blockId=4230403b-4a87-459e-b014-751d9d7b2f01)

위 사진처럼 다른 서비스는 정상인데 OSD만 시작되지 않는다면, OSD 서비스를 수동으로 재시작해야 합니다.

```bash
ceph orch restart osd.all-available-devices
```

![image](https://blog.pieroot.xyz/api/image-proxy?id=b4d5a553-fd9b-499e-8bda-20d5b19d5e11&kind=s3&pageId=21a067c0-15d0-80ec-9fbe-e6495e6ee782&source=block&blockId=ec558a10-10eb-48b6-810e-ffc18880d4a7)

> **복구 완료 확인 체크리스트**
> 
> - `ceph -s` 출력이 `HEALTH_OK`
> 
> - 모든 OSD가 `up` 상태 (`ceph osd tree`)
> 
> - 남은 경고가 있다면 OSD 플래그·CephFS 재활성화 과정으로 설명 가능
> 
> - CephFS `joinable true`, MDS 정상
> 
> - Galera 3/3 Primary·Synced·Ready
> 
> - `openstack token issue` 성공
> 
> - compute / network / volume 서비스 `up`
> 
> - 필요 시 테스트 인스턴스 1대, 볼륨 attach 1회

---

### 📚 핵심 정리

---

### 📖 참고 자료

- [Red Hat Ceph Storage - 클러스터 전원 끄기 및 재부팅](https://docs.redhat.com/ko/documentation/red_hat_ceph_storage/5/html/administration_guide/powering-down-and-rebooting-a-red-hat-ceph-storage-cluster_admin)

- [Ceph 공식 문서 - Operating a Cluster](https://docs.ceph.com/en/reef/rados/operations/operating/)

- [AllThatLinux - Ceph cluster shutdown process](https://atl.kr/dokuwiki/doku.php/ceph_cluster_shutdown_process)

- [Galera Cluster로 구축하는 OpenStack 환경의 고가용성 MySQL 데이터베이스 완벽 가이드](https://app.notion.com/p/214067c015d080cda372d981c5aa8df8)
