Cinder 시스템 구조
Cinder는 OpenStack 클라우드에 영구 블록 스토리지를 제공하는 서비스입니다. 배포는 공유 데이터베이스와 RPC 통신을 통해 협력하는 여러 서비스로 구성됩니다. SQL 기반 중앙 데이터베이스는 모든 Cinder 서비스에서 사용되며, 서비스들은 데이터베이스를 통해 지속적인 리소스 상태를 관리하고 RPC로 작업을 조율합니다.
핵심 컴포넌트 및 역할
- cinder-api: HTTP 요청을 수신하고 입력 검증, 정책 적용, 초기 상태 기록 및 다른 Cinder 서비스와 작업 조율을 수행합니다.
- cinder-scheduler: 볼륨 생성 같은 작업을 위해 적합한 스토리지 백엔드를 선택합니다. 백엔드 기능, 필터, 가중 정보를 고려합니다.
- cinder-volume: Cinder 볼륨 드라이버를 통해 스토리지 백엔드에서 볼륨을 관리합니다. 다양한 스토리지 제공자(NAS/SAN, NFS, iSCSI, Ceph 등)와 상호작용합니다.
- cinder-backup: 볼륨 드라이버와 독립적으로 볼륨 백업을 관리합니다. 백업 드라이버가 백업 저장소 접근을 제공합니다.
서비스 통신 메커니즘
Cinder는 AMQP 메시지 브로커(RabbitMQ 또는 Qpid)를 통해 서비스 간 느슨한 결합(loosely coupled) 통신을 구현합니다. RPC 호출은 두 가지 패턴을 따릅니다: rpc.call(요청/응답)과 rpc.cast(일방향)입니다. 각 서비스는 초기화 시 두 개의 큐를 생성하는데, 하나는 특정 호스트 기반 라우팅('cinder-volume.hostname'), 다른 하나는 서비스 타입 기반 라우팅('cinder-volume')을 처리합니다.