diff --git a/_quarto.yml b/_quarto.yml index c5fe1e7..ce7b3b5 100644 --- a/_quarto.yml +++ b/_quarto.yml @@ -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 @@ -49,4 +54,4 @@ format: - custom.scss toc: true lang: ko - include-after-body: _footer.html \ No newline at end of file + include-after-body: _footer.html diff --git a/lectures/ch7/ch7_1_lec.qmd b/lectures/ch7/ch7_1_lec.qmd new file mode 100644 index 0000000..0b02a2f --- /dev/null +++ b/lectures/ch7/ch7_1_lec.qmd @@ -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을 통해 해당 디스크의 시점 상태를 저장·복제·복구할 수 있게 해 주는 서비스이다. diff --git a/lectures/ch7_lec.qmd b/lectures/ch7_lec.qmd new file mode 100644 index 0000000..b1445a9 --- /dev/null +++ b/lectures/ch7_lec.qmd @@ -0,0 +1,11 @@ +--- +title: "7장. Cinder" +--- + +# Cinder 개요 + +Cinder는 OpenStack의 블록 스토리지 서비스이다. 이 장에서는 Volume과 Snapshot의 핵심 개념을 다룬다. + +## 하위 목차 + +- [7-1. Volume과 Snapshot 개념](ch7/ch7_1_lec.qmd) diff --git a/lectures/index.qmd b/lectures/index.qmd index e0e9993..225d6fb 100644 --- a/lectures/index.qmd +++ b/lectures/index.qmd @@ -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) \ No newline at end of file + - [OVS/VXLAN 가상 네트워크 만들기](ch6/ovs_vxlan_vpn.qmd) +- [7장. Cinder](ch7_lec.qmd) + - [7-1장. Volume과 Snapshot 개념](ch7/ch7_1_lec.qmd)