2.3. CRUSH의 Ceph OSD

OSD의 CRUSH 계층 구조가 있으면 OSD를 CRUSH 계층에 추가합니다. 기존 계층에서 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
설명
하나 이상의 이름-값 쌍입니다. 여기서 name은 버킷 유형이며 값은 버킷의 이름입니다. 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

이 명령은 다음과 유사한 출력을 반환합니다.

[
    {
        "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
                    }
                ]
            }
        ]
    }
]
참고

RHCS 3 이상에서는 OSD 오브젝트에 device_class 속성도 있습니다.

2.3.2. CRUSH에 OSD 추가

CRUSH 계층에 OSD를 추가하는 것은 OSD를 시작하고(대부분의) Ceph 에서배치 그룹을 OSD에 할당하는 마지막 단계입니다.

참고

RHCS 3에서는 장치 클래스를 추가할 수도 있습니다.

CRUSH 계층 구조에 추가하기 전에 OSD를 준비해야 합니다. 배포 유틸리티(Ansible 자동화 애플리케이션)는 이 단계를 수행합니다. 자세한 내용은 OSD 추가/제거를 참조하십시오.

CRUSH 계층 구조로 표시되지 않으므로 ceph osd crush add 명령을 사용하면 원하는 위치에서 OSD를 CRUSH 계층에 추가할 수 있습니다. 지정한 위치는 실제 위치를 반영 해야 합니다. 하나 이상의 버킷을 지정하면 명령에서 지정한 가장 구체적인 버킷에 OSD를 배치하고 지정한 다른 버킷 아래에 해당 버킷을 이동합니다.

CRUSH 계층 구조에 OSD를 추가하려면 다음을 수행합니다.

ceph osd crush add {id-or-name} {weight}  [{bucket-type}={bucket-name} ...]
중요

루트 버킷만 지정하는 경우 이 명령은 OSD를 루트에 직접 연결합니다. 그러나 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 set 또는 ceph osd crush-hiera를 사용하여 OSD를 CRUSH 계층에 추가할 수도 있습니다.

2.3.3. CRUSH 계층 구조 내에서 OSD 이동

Ansible 자동화 애플리케이션과 같은 배포 유틸리티에서 기본 CRUSH 위치의 CRUSH 맵에 OSD를 추가하거나 클러스터 토폴로지가 변경되면 CRUSH 계층에서 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 create-or- hiera를 사용하여 CRUSH 계층 구조 내에서 OSD를 이동할 수도 있습니다.

2.3.4. CRUSH Hierarchy에서 OSD 제거

CRUSH 계층에서 OSD를 제거하는 것이 클러스터에서 OSD를 제거하려는 첫 번째 단계입니다. CRUSH 맵에서 OSD를 제거하면 CRUSH가 배치 그룹을 가져오는 OSD를 재계산하고 그에 따라 데이터를 재조정할 수 있습니다. 자세한 내용은 OSD 추가/제거를 참조하십시오.

실행 중인 클러스터의 CRUSH 맵에서 OSD를 제거하려면 다음을 실행합니다.

ceph osd crush remove {name}