2.6. Ceph 입력/출력 작업
Ceph 클라이언트는 Ceph 모니터에서 'Cluster Map'을 검색하고 풀에 바인딩한 다음 풀의 배치 그룹 내의 개체에서 I/O(입력/출력)를 수행합니다. 풀의 CRUSH 규칙 세트와 배치 그룹의 수는 Ceph가 데이터를 배치하는 방법을 결정하는 주요 요소입니다. 최신 버전의 클러스터 맵에서 클라이언트는 클러스터의 모든 모니터와 OSD와 현재 상태를 알고 있습니다. 그러나 클라이언트는 개체 위치에 대해 아무것도 알 수 없습니다.
클라이언트에 필요한 유일한 입력은 오브젝트 ID와 풀 이름입니다. 간단하게: Ceph에서 이름이 지정된 풀에 데이터를 저장합니다. 클라이언트가 풀에 명명된 오브젝트를 저장하려는 경우 개체 이름, 해시 코드, 풀의 PG 수 및 풀 이름을 입력으로 저장하려는 경우 CRUSH(Controlled Replication Under Scalable Hashing)는 배치 그룹의 ID와 배치 그룹의 기본 OSD를 계산합니다.
Ceph 클라이언트는 다음 단계를 사용하여 PG ID를 계산합니다.
-
클라이언트에서 풀 ID와 오브젝트 ID를 입력합니다. 예를 들어
pool = 간풀
및object-id = john
입니다. - CRUSH는 개체 ID를 사용하고 이를 해시합니다.
-
CRUSH는 PGs 수의 해시 모드를 계산하여 PG ID를 가져옵니다. 예를 들면
58
- CRUSH는 PG ID에 해당하는 기본 OSD를 계산합니다.
-
클라이언트는 풀 이름이 지정된 풀 ID를 가져옵니다. 예를 들어, pool
간pool
은4
번의 풀입니다. -
클라이언트는 풀 ID를 PG ID에 추가합니다. 예를 들면
4.58
입니다. - 클라이언트는 Sting Set에서 기본 OSD와 직접 통신하여 오브젝트 작업을 수행합니다.
Ceph 스토리지 클러스터의 토폴로지 및 상태는 세션 중에 상대적으로 안정적입니다. librados
를 통해 개체 위치를 계산하도록 Ceph 클라이언트에 권한을 부여하면 클라이언트가 각 읽기/쓰기 작업에 대해 chatty 세션을 통해 스토리지 클러스터에 쿼리해야 하는 것보다 훨씬 빠릅니다. CRUSH 알고리즘을 사용하면 클라이언트가 오브젝트 를 저장할 위치를 계산할 수 있으며 클라이언트는 개체에 직접 데이터를 저장하거나 검색하기 위해 작동 세트의 기본 OSD에 연결할 수 있습니다. 엑사바이트 규모의 클러스터에서 수천 개의 OSD가 있으므로 클라이언트와 Ceph OSD 간의 네트워크 초과 구독은 문제가 되지 않습니다. 클러스터 상태가 변경되면 클라이언트는 Ceph 모니터에서 클러스터 맵에 업데이트를 요청할 수 있습니다.