Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion _quarto.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,11 @@ website:
file: lectures/ch6/snat_dnat.qmd
- text: "6-15. OVS와 VXLAN를 이용해 가상 네트워크 만들기"
file: lectures/ch6/ovs_vxlan_vpn.qmd
- section: "7장. Cinder"
file: lectures/ch7_lec.qmd
contents:
- text: "7-1. Volume과 Snapshot 개념"
file: lectures/ch7/ch7_1_lec.qmd



Expand All @@ -49,4 +54,4 @@ format:
- custom.scss
toc: true
lang: ko
include-after-body: _footer.html
include-after-body: _footer.html
198 changes: 198 additions & 0 deletions lectures/ch7/ch7_1_lec.qmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,198 @@
---
title: "7-1. Volume과 Snapshot 개념"
description: "OpenStack Cinder의 Volume과 Snapshot 개념, 상태 전이, 운영 시 주의사항을 정리한다."
code: "7-1"
---

# OpenStack Cinder: Volume과 Snapshot 개념 이해하기

OpenStack에서 인스턴스를 생성하고 운영하다 보면 스토리지 기능을 자주 사용하게 된다.
인스턴스가 실행되려면 운영체제가 올라갈 디스크가 필요하고, 서비스 운영 과정에서는 로그, 데이터베이스 파일, 업로드 파일처럼 지속 보관이 필요한 데이터가 생긴다.

이때 OpenStack에서 블록 스토리지를 담당하는 서비스가 Cinder이다.
Cinder는 인스턴스에 연결해 사용할 수 있는 저장 공간을 제공하며, 사용자는 Horizon 대시보드, OpenStack CLI, API를 통해 Volume을 생성·연결·분리·삭제할 수 있다.

---

## [7.1.1] Cinder란?

Cinder는 OpenStack의 Block Storage 서비스이다.

쉽게 말하면 인스턴스에 연결해 사용하는 디스크를 제공하는 서비스이다.
실제 서버에 디스크를 추가하거나, 노트북에 외장하드를 연결해 데이터를 저장하는 개념과 유사하다.

Cinder에서 가장 기본이 되는 객체는 Volume이다. Volume은 인스턴스에 붙여 사용하는 저장 공간이며, 필요에 따라 생성, 연결(attach), 분리(detach), 삭제가 가능하다.

Cinder에서 자주 사용하는 핵심 개념은 다음과 같다.

| 구분 | 설명 |
|---|---|
| Cinder | OpenStack의 블록 스토리지 서비스 |
| Volume | 인스턴스에 연결해 사용하는 디스크 |
| Snapshot | Volume의 특정 시점 상태를 저장한 객체 |
| Backup | Volume 데이터를 별도 백업 저장소에 보관하는 기능 |

정리하면 Cinder는 OpenStack 환경에서 인스턴스가 사용할 디스크를 관리하는 서비스이고, Volume은 실제로 인스턴스에 연결해 사용하는 디스크이다.

---

## [7.1.2] Volume이란?

Volume은 인스턴스에 연결해 사용하는 저장 공간이다.

인스턴스를 생성할 때 기본 디스크가 함께 생성될 수 있지만, 서비스 데이터를 안정적으로 관리하려면 별도 Volume을 만들어 사용하는 경우가 많다. 예를 들어 웹 서버에는 업로드 파일 저장용 Volume을 붙이고, 데이터베이스 서버에는 DB 데이터 저장용 Volume을 별도로 붙이는 구성이 일반적이다.

Volume은 생성했다고 즉시 인스턴스 내부에서 사용 가능한 상태가 되는 것이 아니다. 먼저 인스턴스에 attach해야 하며, 연결이 완료되면 인스턴스 내부에서는 새로운 디스크 장치처럼 인식된다. 이후 파일시스템을 만들고 mount해야 실제로 사용할 수 있다.

예시 흐름은 다음과 같다.

1. 100GB Volume 생성
2. `web-server-01` 인스턴스에 Volume 연결
3. 인스턴스 내부에서 `/dev/vdb` 같은 디스크로 인식
4. 파일시스템 생성
5. `/data` 디렉터리에 mount
6. 서비스 데이터 저장

Volume의 중요한 특징은 인스턴스와 별도로 관리할 수 있다는 점이다. 인스턴스를 삭제해도 Volume은 별도로 남겨둘 수 있다. 따라서 중요한 데이터는 인스턴스 내부 임시 디스크에만 저장하기보다, Cinder Volume에 저장하는 방식이 운영 측면에서 더 안정적이다.

예를 들어 인스턴스 장애로 새 인스턴스를 만들어야 하는 상황에서도 기존 Volume을 새 인스턴스에 다시 연결하면 데이터를 계속 사용할 수 있다.

---

## [7.1.3] Volume 상태 이해하기

Volume을 생성하거나 연결하다 보면 여러 상태값을 확인하게 된다.
상태값은 Volume이 현재 어떤 작업 중인지, 실제 사용 가능한지 판단하는 기준이 된다.

| 상태 | 의미 |
|---|---|
| creating | Volume 생성 중 |
| available | 생성 완료, 인스턴스 연결 가능 |
| attaching | 인스턴스 연결 진행 중 |
| in-use | 인스턴스에 연결되어 사용 중 |
| detaching | 인스턴스에서 분리 진행 중 |
| deleting | Volume 삭제 진행 중 |
| error | 생성/삭제/연결 작업 중 오류 발생 |

일반적인 상태 흐름은 다음과 같다.

`creating → available → attaching → in-use`

인스턴스에서 분리하면 다시 `available` 상태로 돌아간다.

상태값을 이해하면 작업 진행 여부를 빠르게 판단할 수 있다.
예를 들어 연결을 시도했는데 Volume이 아직 `creating` 상태라면 작업 완료까지 기다려야 한다. `error` 상태라면 백엔드 상태, quota, 권한, API 오류를 점검해야 한다.

---

## [7.1.4] Snapshot이란?

Snapshot은 Volume의 특정 시점 상태를 저장한 객체이다.

예를 들어 `data-volume`이 있고 오후 3시에 Snapshot을 생성했다면, 해당 Snapshot은 오후 3시 시점의 Volume 상태를 보존한다.

Snapshot은 주로 중요한 변경 작업 전에 사용한다. 설정 변경, 패치, 데이터 수정 작업 전에 Snapshot을 만들어 두면 문제가 생겼을 때 해당 시점을 기준으로 새 Volume을 만들어 복구할 수 있다.

Snapshot을 사용하는 대표 상황은 다음과 같다.

- 서버 패치 전 현재 데이터 상태를 보존하고 싶을 때
- 설정 변경 전 복구 기준점을 만들고 싶을 때
- 기존 Volume과 동일한 데이터로 테스트용 Volume을 만들고 싶을 때
- 운영 데이터와 동일한 상태의 검증용 디스크가 필요할 때

Snapshot은 Volume을 직접 대체하는 기능이라기보다, 특정 시점 상태를 기준으로 새 Volume을 생성할 수 있게 해 주는 기능이다.

예시 흐름은 다음과 같다.

1. `data-volume`에서 Snapshot 생성
2. 생성된 Snapshot을 기준으로 `restore-volume` 생성
3. `restore-volume`을 인스턴스에 연결
4. Snapshot 생성 시점 데이터 확인 또는 복구

---

## [7.1.5] Volume과 Snapshot의 관계

Volume과 Snapshot의 관계는 아래처럼 이해하면 된다.

```text
Volume
├── Snapshot A: 월요일 오전 상태
├── Snapshot B: 화요일 오전 상태
└── Snapshot C: 패치 직전 상태
```

Volume은 인스턴스에 연결해 실제로 사용하는 디스크이고, Snapshot은 해당 Volume의 특정 시점 기록이다.

중요한 점은 Snapshot 자체를 인스턴스에 직접 연결해 사용하는 것이 아니라, 일반적으로 Snapshot을 기준으로 새 Volume을 만든 뒤 인스턴스에 연결한다는 점이다.

예를 들어 `data-volume`에서 `data-volume-snap-01`을 생성했다면, 해당 시점 데이터가 필요할 때 `data-volume-restore` 같은 새 Volume을 만들고 이를 인스턴스에 attach해 데이터를 확인하거나 복구한다.

---

## [7.1.6] Snapshot과 Backup의 차이

Snapshot과 Backup은 모두 데이터 보호와 관련되지만, 목적과 사용 방식이 다르다.

- Snapshot은 특정 시점 상태를 빠르게 저장하고, 그 상태를 기준으로 새 Volume을 만들기 위해 사용한다.
- Backup은 Volume 데이터를 별도 백업 저장소에 보관해 장기 보관과 장애 복구를 지원한다.

요약 표는 다음과 같다.

| 구분 | Snapshot | Backup |
|---|---|---|
| 목적 | 특정 시점 저장, 빠른 복구, 복제 | 장기 보관, 장애 대비, 데이터 보호 |
| 대상 | Volume의 특정 시점 상태 | Volume 데이터 |
| 사용 예 | 패치 전 저장, 테스트용 복제 | 장애 복구, 장기 보관 |
| 저장 방식 | 보통 동일 스토리지 백엔드와 밀접 연동 | 별도 백업 저장소 사용 가능 |
| 특징 | 빠르게 생성·활용 가능 | 데이터 보존 목적에 더 적합 |

쉽게 구분하면 Snapshot은 “작업 전 복구 지점”에 가깝고, Backup은 “장애 대비 보관본”에 가깝다.

따라서 Snapshot을 만들었다고 백업 전략이 완료된 것으로 보면 안 된다. 특히 스토리지 장애, 장기 보관, 오프사이트 보관이 필요한 환경에서는 Backup 설계를 함께 가져가야 한다.

---

## [7.1.7] 실무에서의 사용 흐름

Cinder Volume과 Snapshot은 보통 다음 순서로 사용한다.

1. 인스턴스를 생성한다.
2. 데이터 저장용 Volume을 만든다.
3. Volume을 인스턴스에 연결한다.
4. 인스턴스 내부에서 파일시스템을 생성하고 mount한다.
5. 서비스 데이터를 Volume에 저장한다.
6. 중요한 작업 전에 Snapshot을 생성한다.
7. 문제가 생기면 Snapshot을 기준으로 새 Volume을 만든다.
8. 새 Volume을 인스턴스에 연결해 데이터를 확인하거나 복구한다.
9. 더 이상 필요 없는 Snapshot은 정리한다.

이 흐름에서 Volume은 현재 사용 중인 디스크이고, Snapshot은 그 디스크의 특정 시점 기록이다.

---

## [7.1.8] 사용 시 주의할 점

Snapshot은 편리하지만 모든 상황을 단독으로 해결하는 기능은 아니다.

첫째, Snapshot은 Backup을 완전히 대체하지 않는다. Snapshot은 빠른 복구와 복제에 강점이 있지만 장기 보관과 재해복구까지 포함한 전략으로는 한계가 있다.

둘째, Snapshot도 스토리지 용량을 사용한다. Snapshot을 계속 생성하고 정리하지 않으면 불필요한 스토리지 점유가 누적될 수 있다. 운영 환경에서는 생성 기준, 보관 기간, 정리 정책을 함께 정의해야 한다.

셋째, 실행 중인 서비스 데이터의 정합성을 고려해야 한다. 예를 들어 데이터베이스가 쓰기 중인 상태에서 Snapshot을 만들면 애플리케이션 관점에서 완전한 일관 상태가 아닐 수 있다. 이 경우 서비스 정지, flush, 애플리케이션 레벨 백업, consistency group 같은 보완 절차를 함께 검토해야 한다.

---

## [7.1.9] 정리

Cinder는 OpenStack에서 블록 스토리지를 제공하는 서비스이다.
Volume은 인스턴스에 연결해 실제 데이터를 저장하는 디스크이다.
Snapshot은 Volume의 특정 시점 상태를 저장한 기록이다.

핵심은 아래 세 줄로 정리된다.

- Cinder = OpenStack의 블록 스토리지 서비스
- Volume = 인스턴스에 연결해 사용하는 디스크
- Snapshot = Volume의 특정 시점 상태

결국 Cinder는 인스턴스용 디스크를 제공하고, Snapshot을 통해 해당 디스크의 시점 상태를 저장·복제·복구할 수 있게 해 주는 서비스이다.
11 changes: 11 additions & 0 deletions lectures/ch7_lec.qmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
title: "7장. Cinder"
---

# Cinder 개요

Cinder는 OpenStack의 블록 스토리지 서비스이다. 이 장에서는 Volume과 Snapshot의 핵심 개념을 다룬다.

## 하위 목차

- [7-1. Volume과 Snapshot 개념](ch7/ch7_1_lec.qmd)
4 changes: 3 additions & 1 deletion lectures/index.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,6 @@ title: "오픈스택 강의 자료"
- [6장. Neutron](ch6_lec.qmd)
- [SNAT/DNAT 개념](ch6/snat_dnat.qmd)
- [Neutron Agent 종류 정리](ch6/neutron_agents.qmd)
- [OVS/VXLAN 가상 네트워크 만들기](ch6/ovs_vxlan_vpn.qmd)
- [OVS/VXLAN 가상 네트워크 만들기](ch6/ovs_vxlan_vpn.qmd)
- [7장. Cinder](ch7_lec.qmd)
- [7-1장. Volume과 Snapshot 개념](ch7/ch7_1_lec.qmd)