2.3. CRUSH의 Ceph OSD
OSD의 CRUSH 계층 구조가 있으면 CRUSH 계층에 OSD를 추가합니다. 기존 계층에서 OSD를 이동하거나 제거할 수도 있습니다. Ceph CLI 사용량에는 다음과 같은 값이 있습니다.
- id
- 설명
- OSD의 숫자 ID입니다.
- 유형
- 정수
- 필수 항목
- 있음
- 예제
-
0
- name
- 설명
- OSD의 전체 이름입니다.
- 유형
- 문자열
- 필수 항목
- 있음
- 예제
-
osd.0
- weight
- 설명
- OSD의 CRUSH 가중치입니다.
- 유형
- double
- 필수 항목
- 있음
- 예제
-
2.0
- 루트
- 설명
- OSD가 상주하는 계층 또는 트리의 루트 버킷의 이름입니다.
- 유형
- 키-값 쌍.
- 필수 항목
- 있음
- 예제
-
root=default
,root=replicated_rule
등
- bucket-type
- 설명
- 이름이 버킷 유형이고 값은 버킷의 이름입니다. CRUSH 계층 구조에서 OSD의 CRUSH 위치를 지정할 수 있습니다.
- 유형
- 키-값 쌍입니다.
- 필수 항목
- 없음
- 예제
-
datacenter=dc1 room=room1 row=foo rack=bar host=foo-bar-1
2.3.1. CRUSH에서 OSD 보기
ceph osd crush tree
명령은 CRUSH 버킷과 항목을 트리 보기에 출력합니다. 이 명령을 사용하여 특정 버킷에서 OSD 목록을 확인합니다. ceph osd 트리
와 유사한 출력이 출력됩니다.
추가 세부 사항을 반환하려면 다음을 실행합니다.
ceph osd crush tree -f json-pretty
# ceph osd crush tree -f json-pretty
이 명령은 다음과 유사한 출력을 반환합니다.
[ { "id": -2, "name": "ssd", "type": "root", "type_id": 10, "items": [ { "id": -6, "name": "dell-per630-11-ssd", "type": "host", "type_id": 1, "items": [ { "id": 6, "name": "osd.6", "type": "osd", "type_id": 0, "crush_weight": 0.099991, "depth": 2 } ] }, { "id": -7, "name": "dell-per630-12-ssd", "type": "host", "type_id": 1, "items": [ { "id": 7, "name": "osd.7", "type": "osd", "type_id": 0, "crush_weight": 0.099991, "depth": 2 } ] }, { "id": -8, "name": "dell-per630-13-ssd", "type": "host", "type_id": 1, "items": [ { "id": 8, "name": "osd.8", "type": "osd", "type_id": 0, "crush_weight": 0.099991, "depth": 2 } ] } ] }, { "id": -1, "name": "default", "type": "root", "type_id": 10, "items": [ { "id": -3, "name": "dell-per630-11", "type": "host", "type_id": 1, "items": [ { "id": 0, "name": "osd.0", "type": "osd", "type_id": 0, "crush_weight": 0.449997, "depth": 2 }, { "id": 3, "name": "osd.3", "type": "osd", "type_id": 0, "crush_weight": 0.289993, "depth": 2 } ] }, { "id": -4, "name": "dell-per630-12", "type": "host", "type_id": 1, "items": [ { "id": 1, "name": "osd.1", "type": "osd", "type_id": 0, "crush_weight": 0.449997, "depth": 2 }, { "id": 4, "name": "osd.4", "type": "osd", "type_id": 0, "crush_weight": 0.289993, "depth": 2 } ] }, { "id": -5, "name": "dell-per630-13", "type": "host", "type_id": 1, "items": [ { "id": 2, "name": "osd.2", "type": "osd", "type_id": 0, "crush_weight": 0.449997, "depth": 2 }, { "id": 5, "name": "osd.5", "type": "osd", "type_id": 0, "crush_weight": 0.289993, "depth": 2 } ] } ] } ]
[
{
"id": -2,
"name": "ssd",
"type": "root",
"type_id": 10,
"items": [
{
"id": -6,
"name": "dell-per630-11-ssd",
"type": "host",
"type_id": 1,
"items": [
{
"id": 6,
"name": "osd.6",
"type": "osd",
"type_id": 0,
"crush_weight": 0.099991,
"depth": 2
}
]
},
{
"id": -7,
"name": "dell-per630-12-ssd",
"type": "host",
"type_id": 1,
"items": [
{
"id": 7,
"name": "osd.7",
"type": "osd",
"type_id": 0,
"crush_weight": 0.099991,
"depth": 2
}
]
},
{
"id": -8,
"name": "dell-per630-13-ssd",
"type": "host",
"type_id": 1,
"items": [
{
"id": 8,
"name": "osd.8",
"type": "osd",
"type_id": 0,
"crush_weight": 0.099991,
"depth": 2
}
]
}
]
},
{
"id": -1,
"name": "default",
"type": "root",
"type_id": 10,
"items": [
{
"id": -3,
"name": "dell-per630-11",
"type": "host",
"type_id": 1,
"items": [
{
"id": 0,
"name": "osd.0",
"type": "osd",
"type_id": 0,
"crush_weight": 0.449997,
"depth": 2
},
{
"id": 3,
"name": "osd.3",
"type": "osd",
"type_id": 0,
"crush_weight": 0.289993,
"depth": 2
}
]
},
{
"id": -4,
"name": "dell-per630-12",
"type": "host",
"type_id": 1,
"items": [
{
"id": 1,
"name": "osd.1",
"type": "osd",
"type_id": 0,
"crush_weight": 0.449997,
"depth": 2
},
{
"id": 4,
"name": "osd.4",
"type": "osd",
"type_id": 0,
"crush_weight": 0.289993,
"depth": 2
}
]
},
{
"id": -5,
"name": "dell-per630-13",
"type": "host",
"type_id": 1,
"items": [
{
"id": 2,
"name": "osd.2",
"type": "osd",
"type_id": 0,
"crush_weight": 0.449997,
"depth": 2
},
{
"id": 5,
"name": "osd.5",
"type": "osd",
"type_id": 0,
"crush_weight": 0.289993,
"depth": 2
}
]
}
]
}
]
2.3.2. CRUSH에 OSD 추가
VirtIO 계층 구조에 Ceph OSD를 추가하는 것은 OSD를 시작하고, Ceph가 배치 그룹을 OSD 에
할당하기 전에 마지막 단계입니다.
Red Hat Ceph Storage 5 이상 릴리스에서는 Ceph Orchestrator를 사용하여 CloudEvent 계층에 OSD를 배포합니다. 자세한 내용은 사용 가능한 모든 장치에 Ceph OSD 배포를 참조하십시오.
OSD를 수동으로 추가하려면 CloudEvent 계층 구조에 추가하기 전에 Ceph OSD를 준비해야 합니다. 예를 들어 단일 노드에서 Ceph OSD를 생성합니다.
ceph orch daemon add osd {host}:{device},[{device}]
ceph orch daemon add osd {host}:{device},[{device}]
CRUSH 계층 구조는 영향을 미치지 않으므로 ceph osd crush add
명령을 사용하면 원하는 위치에 CRUSH 계층 구조에 OSD를 추가할 수 있습니다. 지정한 위치는 실제 위치를 반영해야 합니다. 버킷을 하나 이상 지정하면 명령은 OSD를 지정한 가장 구체적인 버킷에 배치하고 해당 버킷을 지정한 다른 버킷 아래 이동합니다.
CRUSH 계층 구조에 OSD를 추가하려면 다음을 수행합니다.
ceph osd crush add {id-or-name} {weight} [{bucket-type}={bucket-name} ...]
ceph osd crush add {id-or-name} {weight} [{bucket-type}={bucket-name} ...]
루트 버킷만 지정하면 명령은 OSD를 root에 직접 연결합니다. 그러나 CRUSH 규칙은 OSD가 호스트 내부 또는 섀시(섀시) 내에 있을 것으로 예상하며, 클러스터 토폴로지를 반영하는 다른 버킷의 내부 여야 합니다.
다음 예제에서는 osd.0
을 계층 구조에 추가합니다.
ceph osd crush add osd.0 1.0 root=default datacenter=dc1 room=room1 row=foo rack=bar host=foo-bar-1
ceph osd crush add osd.0 1.0 root=default datacenter=dc1 room=room1 row=foo rack=bar host=foo-bar-1
ceph osd crush set
또는 ceph osd crush create-or-
rating를 사용하여 CRUSH 계층 구조에 OSD를 추가할 수도 있습니다.
2.3.3. CRUSH 계층 구조 내에서 OSD 이동
Red Hat Ceph Storage 5 이상 릴리스의 경우 Ceph Orchestrator를 사용하여 호스트의 초기 CloudEvent 위치를 설정할 수 있습니다. 자세한 내용은 호스트의 초기 iPXE 위치 설정을 참조하십시오.
OSD 교체의 경우 Ceph Orchestrator를 사용하여 OSD 교체를참조하십시오.
스토리지 클러스터 토폴로지가 변경되면 CloudEvent 계층에서 OSD를 수동으로 이동하여 실제 위치를 반영할 수 있습니다.
CRUSH 계층에서 OSD를 이동하면 Ceph가 OSD에 할당되는 배치 그룹을 다시 계산하여 잠재적으로 데이터를 다시 배포할 수 있습니다.
CRUSH 계층 구조 내에서 OSD를 이동하려면 다음을 수행합니다.
ceph osd crush set {id-or-name} {weight} root={pool-name} [{bucket-type}={bucket-name} ...]
ceph osd crush set {id-or-name} {weight} root={pool-name} [{bucket-type}={bucket-name} ...]
ceph osd crush create-or-
0.0/16을 사용하여 CRUSH 계층 구조 내에서 OSD를 이동할 수도 있습니다.
2.3.4. CRUSH 계층 구조에서 OSD 제거
CRUSH 계층에서 OSD를 제거하는 것이 클러스터에서 OSD를 제거하려는 첫 번째 단계입니다. CRUSH 맵에서 OSD를 제거하면 CRUSH에서 배치 그룹 및 데이터를 적절하게 재조정하는 OSD를 다시 계산합니다. 자세한 내용은 OSD 추가/제거를 참조하십시오.
Red Hat Ceph Storage 5 이상 릴리스의 경우 Ceph Orchestrator를 사용하여 스토리지 클러스터에서 OSD를 제거할 수 있습니다. 자세한 내용은 Ceph Orchestrator를 사용하여 OSD 데몬 제거를 참조하십시오.
실행 중인 클러스터의 CloudEvent 맵에서 OSD를 수동으로 제거하려면 다음을 실행합니다.
ceph osd crush remove {name}
ceph osd crush remove {name}