노션: https://hkpark130.notion.site/OpenStack-Ceph-1ce95d023a3b80efb988c216132aac07?pvs=73
## 프로젝트 개요
Canonical의 OpenStack 공식 가이드를 참고해서
Juju를 이용해 OpenStack 클러스터를 구축했다.
스토리지는 Ceph를 연동하여
- 볼륨 저장(Cinder + Ceph)
- 이미지 저장(Glance + Ceph)
- 오브젝트 스토리지(Ceph RadosGW)
용도로 사용했다.
## Juju로 배포된 주요 스토리지 유닛 설명
- **ceph-mon**
Ceph 클러스터 상태를 관리하는 서버.
- 클러스터 상태를 모니터링하고
- 데이터 저장 위치를 결정하는 CRUSH 맵을 관리함.
- **ceph-osd**
실제 데이터를 저장하는 Ceph 스토리지 서버.
- 디스크를 직접 사용해서 데이터를 저장하고 복제.
- 하나의 ceph-osd 유닛 = 하나 이상의 디스크 (OSD)
- **ceph-radosgw**
오브젝트 스토리지(S3 API)를 제공하는 서버.
- 파일 업로드/다운로드용 API 엔드포인트.
- **cinder**
OpenStack의 볼륨 서비스.
- VM에 추가할 디스크(Volume)를 생성/삭제/관리한다.
- **cinder-ceph**
Cinder와 Ceph을 연결해주는 드라이버 역할.
- Cinder가 생성하는 볼륨이 Ceph에 저장되게 함.
## 블록스토리지 흐름 (Cinder + Ceph)
1. 사용자가 Horizon 대시보드나 CLI로 볼륨 생성 요청
2. Cinder가 요청을 받아 cinder-ceph를 통해 Ceph에 RBD 이미지를 생성
3. 생성된 RBD 이미지는 Ceph OSD에 분산 저장
4. 생성된 볼륨은 Nova(Compute) 인스턴스에 attach 가능
5. 인스턴스 내부에서는 일반 디스크처럼 사용
실제로는 VM 인스턴스가 부팅될 때도 Glance에서 이미지를 가져오고,
그 이미지가 Ceph에 저장돼 있어서 네트워크를 통해 블록 장치처럼 연결된다.
## 간단한 서비스 관계 정리
- **Nova (Compute)**
→ 인스턴스 생성 / 볼륨 attach 요청
- **Cinder (Volume)**
→ Ceph에 볼륨 생성 요청 / 볼륨 관리
- **Ceph (Storage)**
→ 실제 데이터(RBD 이미지)를 저장, 복제
- **Glance (Image)**
→ Ceph에 VM 이미지를 저장해서 VM 부팅 시 사용
- **RadosGW**
→ 필요 시 오브젝트 스토리지 제공 (S3 API 사용 가능)
## 사용 이유 (정리)
- 데이터 복제와 장애 대응이 자동이라 관리가 쉬움
- 스토리지를 서버 추가만으로 쉽게 확장할 수 있음
- OpenStack과 궁합이 매우 좋음 (드라이버 공식 지원)
## 사용시 간단한 흐름
```
Horizon (대시보드)
↓
OpenStack Core Services
├── Nova (인스턴스 관리)
│ └── Cinder (볼륨 요청)
│ └── Ceph RBD (OSD 저장)
├── Glance (이미지 관리)
│ └── Ceph RBD (OSD 저장)
└── Neutron (네트워크)
Ceph Cluster
├── MON (모니터링)
├── OSD (데이터 저장)
└── RadosGW (오브젝트 API)
```

https://canonical.com/blog/ceph-storage-on-ubuntu-an-overview
**간략 정리**: 위 글에 따르면 RADOS 라는 곳에 모든 데이터가 저장되는 듯 하나 내가 배포한 juju 유닛에는 RADOS 유닛은 없다 하지만 Ceph MON을 통해 OSD를 모니터링한 결과 최종 저장소는 결국 OSD인 것 같다.