스토리지 전략 가이드
Red Hat Ceph Storage 클러스터용 스토리지 전략 생성
초록
1장. 개요 링크 복사링크가 클립보드에 복사되었습니다!
Ceph 클라이언트의 관점에서 Ceph 스토리지 클러스터와 상호 작용하는 것은 매우 간단합니다.
- 클러스터에 연결
- 풀 I/O 컨텍스트 생성
이 간단한 인터페이스는 Ceph 클라이언트가 정의한 스토리지 전략 중 하나를 선택하는 방법입니다. 스토리지 전략은 스토리지 용량 및 성능을 제외한 모든 Ceph 클라이언트에 표시되지 않습니다.
아래 다이어그램은 클라이언트에서 Red Hat Ceph Storage 클러스터로 시작하는 논리 데이터 흐름을 보여줍니다.
1.1. 스토리지 전략이란 무엇입니까? 링크 복사링크가 클립보드에 복사되었습니다!
스토리지 전략은 특정 사용 사례에 서비스를 제공하는 데이터를 저장하는 방법입니다. 예를 들어 OpenStack과 같은 클라우드 플랫폼에 볼륨과 이미지를 저장해야 하는 경우 SSD 기반 저널이 있는 적절한 SAS 드라이브에 데이터를 저장하도록 선택할 수 있습니다. 반면 S3 또는 Swift 호환 게이트웨이에 대한 오브젝트 데이터를 저장해야 하는 경우 SATA 드라이브와 같이 보다 경제적인 기능을 사용하도록 선택할 수 있습니다. Ceph는 동일한 Ceph 클러스터에서 두 시나리오를 모두 충족할 수 있지만, SAS/SSD 스토리지 전략을 클라우드 플랫폼(예: OpenStack의 Glance 및 Cinder)과 개체 저장소에 SATA 스토리지를 제공하는 수단이 필요합니다.
스토리지 전략에는 스토리지 미디어(하드 드라이브, SSD 및 나머지), 스토리지 미디어의 성능 및 실패 도메인, 배치 그룹 수 및 풀 인터페이스가 설정됩니다. Ceph는 여러 스토리지 전략을 지원합니다. 사용 사례, 비용/최신 성능 장단점 및 데이터 절충은 스토리지 전략을 주도하는 주요 고려 사항입니다.
- 사용 사례: Ceph는 대규모 스토리지 용량을 제공하며 수많은 사용 사례를 지원합니다. 예를 들어 Ceph Block Device 클라이언트는 OpenStack과 같은 클라우드 플랫폼의 주요 스토리지 백엔드입니다. 따라서 copy-on-write 복제와 같은 고성능 기능을 사용하여 볼륨 및 이미지에 제한 없이 스토리지를 제공할 수 있습니다. 마찬가지로 Ceph는 OpenShift 환경에 컨테이너 기반 스토리지를 제공할 수 있습니다. 이와 대조적으로 Ceph Object Gateway 클라이언트는 catalog, video 및 기타 데이터와 같은 개체에 RESTful S3 호환 및 Swift 호환 개체 스토리지를 제공하는 클라우드 플랫폼의 주요 스토리지 백엔드입니다.
- 비용/성능의 이점: 속도가 더 빠릅니다. 크기, 내구성 등이 더 우수합니다. 그러나 각 슈퍼워치에 대한 가격 및 해당 비용 / 혜택의 상향식 거래가 있습니다. 성능 관점에서 다음 사용 사례를 고려하십시오. SSD는 상대적으로 적은 양의 데이터 및 저널링에 매우 빠른 스토리지를 제공할 수 있습니다. 데이터베이스 또는 개체 인덱스를 저장하면 매우 빠른 SSD 풀의 이점이 될 수 있지만 다른 데이터에서는 비용이 너무 많이 듭니다. SSD 저널링을 사용하는 SAS 드라이브는 볼륨과 이미지의 경제적인 가격으로 빠른 성능을 제공합니다. SSD 저널링이 없는 SATA 드라이브는 전체 성능이 낮은 저렴한 스토리지를 제공합니다. OSD의ECDHE 계층 구조를 생성하는 경우 사용 사례와 비용/성능이 차단될 수 있는 문제를 고려해야 합니다.
-
대규모 클러스터에서 하드웨어 장애는 예외가 아니라 예상입니다. 그러나 데이터 손실 및 서비스 중단은 허용되지 않습니다. 이러한 이유로 데이터 지속성이 매우 중요합니다. Ceph는 여러 개체 복사본 또는 삭제 코딩 및 여러 코딩 청크를 사용하여 데이터를 처리합니다. 여러 사본 또는 여러 코딩 청크는 추가 비용/잘못된 절충을 제공합니다. 즉, 더 적은 사본이나 코딩 청크를 저장할 수 있지만 성능이 저하된 상태에서는 서비스 쓰기 요청을 처리할 수 없게 될 수 있습니다. 일반적으로 두 개의 추가 사본 (즉,
size = 3) 또는 두 개의 코딩 청크가 있는 한 개체를 사용하면 클러스터가 복구되는 동안 성능이 저하된 상태의 쓰기를 서비스할 수 있습니다. FlexVolume 알고리즘은 Ceph가 클러스터 내의 다른 위치에 추가 복사 또는 코딩 청크를 저장하도록 하여 이 프로세스를 지원합니다. 이렇게 하면 단일 스토리지 장치 또는 노드가 실패해도 데이터 손실을 방지하는 데 필요한 모든 복사본 또는 코딩 청크가 손실되지 않습니다.
스토리지 전략에서 사용 사례, 비용/가행 성능 장단점 및 데이터 대결을 캡처하여 Ceph 클라이언트에 스토리지 풀로 제공할 수 있습니다.
Ceph의 오브젝트 복사 또는 코딩 청크는 RAID를 더 이상 사용하지 않습니다. Ceph는 이미 데이터 지속성을 처리하므로 RAID를 사용하지 마십시오. 성능이 저하된 RAID는 성능에 부정적인 영향을 미치며 RAID를 사용하여 데이터를 복구하는 것은 깊은 복사본 또는 코딩 청크를 사용하는 것보다 훨씬 느립니다.
1.2. 스토리지 전략 구성 링크 복사링크가 클립보드에 복사되었습니다!
스토리지 전략 구성은 Ceph OSD를ECDHE 계층 구조에 할당하고, 풀의 배치 그룹 수를 정의하고 풀을 만드는 것입니다. 일반적인 단계는 다음과 같습니다.
- 스토리지 전략 정의: 스토리지 전략에서는 사용 사례, 비용/비용 및 성능 장단점을 분석해야 합니다. 그런 다음 이러한 사용 사례에 적합한 OSD를 만듭니다. 예를 들어 고성능 풀에 대해 SSD 지원 OSD(고성능 블록 장치 볼륨 및 이미지용 SAS 드라이브/SSD 저널 지원 OSD), 낮은 비용의 저장을 위해 SATA 지원 OSD를 생성할 수 있습니다. 일관된 성능 프로필이 있도록 사용 사례의 각 OSD에는 동일한 하드웨어 구성이 있어야 합니다.
-
FlexVolume 계층 구조 정의: Ceph 규칙은 일반적으로 루트(일반적으로
root) 계층 구조에서 노드를 선택하고 배치 그룹 및 포함된 오브젝트를 저장하는 데 적합한 OSD를 식별합니다. 스토리지 전략에 대한 DestinationRule 계층 및 DestinationRule 규칙을 생성해야 합니다. ECDHE 계층 구조는 DestinationRule 규칙 설정을 통해 풀에 직접 할당됩니다. - 배치 그룹 계산: Ceph shard는 풀을 배치 그룹으로 나눕니다. 풀에 대한 배치 그룹 수를 수동으로 설정할 필요가 없습니다. PG 자동 스케일러는 동일한 FlexVolume 규칙에 여러 풀을 할당하는 경우 정상으로 유지되는 배치 그룹 수에 적절한 수의 배치 그룹을 설정합니다.
-
풀 생성: 마지막으로 풀을 생성하고 복제된 스토리지 또는 이전 버전 코딩 스토리지를 사용하는지 확인해야 합니다. 풀에 대한 배치 그룹 수, 풀 규칙 및 크기 또는
K+M코딩 청크와 같은 규칙을 설정해야 합니다.
풀은 스토리지 클러스터에 대한 Ceph 클라이언트 인터페이스이지만 용량 및 성능을 제외하고 스토리지 전략은 Ceph 클라이언트에 완전히 투명합니다.
2장. crush 관리자 개요 링크 복사링크가 클립보드에 복사되었습니다!
CRUSH(Controlled Replication Under Scalable Hashing) 알고리즘은 데이터 스토리지 위치를 컴퓨팅하여 데이터를 저장하고 검색하는 방법을 결정합니다.
모든 고급 기술은 무의식과 구별할 수 없습니다. | ||
| -- Arthur C. Clarke | ||
2.1. crush 소개 링크 복사링크가 클립보드에 복사되었습니다!
스토리지 클러스터의 DestinationRule 맵은 FlexVolume 계층 내의 장치 위치와 Ceph가 데이터를 저장하는 방법을 결정하는 각 계층에 대한 규칙을 설명합니다.
DestinationRule 맵에는 하나 이상의 노드 계층과 리프가 포함되어 있습니다. Ceph에서 "buckets"라는 계층 구조의 노드는 유형에서 정의한 스토리지 위치를 집계합니다. 예를 들어 행, 랙, 섀시, 호스트 및 장치입니다. 계층 구조의 각 리프는 기본적으로 스토리지 장치 목록에 있는 스토리지 장치 중 하나로 구성됩니다. 리프는 항상 하나의 노드 또는 "bucket"에 포함됩니다. 또한 FlexVolume 맵에는 데이터 저장 및 검색 방법을 결정하는 규칙 목록도 있습니다.
OSD를 클러스터에 추가할 때 스토리지 장치는ECDHE 맵에 추가됩니다.
ECDHE 알고리즘은 장치별 가중치 값에 따라 스토리지 장치 간에 데이터 개체를 분배하고 일관된 확률 배포를 적용합니다. DestinationRule은 관리자가 정의하는 계층적 클러스터 맵에 따라 오브젝트 및 해당 복제본 또는 일기 코딩 청크를 배포합니다. DestinationRule 맵은 규칙에 대해 이러한 장치를 포함하는 사용 가능한 스토리지 장치 및 논리 버킷을 나타내며 규칙을 사용하는 각 풀을 확장합니다.
장애 도메인 또는 성능 도메인에서 배치 그룹을 OSD에 매핑하기 위해 DestinationRule 맵은 생성된 DestinationRule 맵의 유형에서 버킷 유형의 계층적 목록을 정의합니다. 버킷 계층을 생성하는 목적은 장애 도메인 또는 성능 도메인 또는 둘 다에 의해 리프 노드를 분리하는 것입니다. 장애 도메인에는 호스트, 섀시, 랙, 전원 배포 단위, Pod, 행, 실포, 데이터 센터가 포함됩니다. 성능 도메인에는 장애 도메인과 특정 구성의 OSD가 포함됩니다. 예를 들어 SSD, SAS는 SSD 저널, SATA 드라이브 등이 있습니다. 장치는 장치 클래스 를 사용하여 hdd,ssd 및 nvme 와 같은 클래스의 개념을 보다 빠르게 구축할 수 있습니다.
OSD를 나타내는 리프 노드를 제외하고 나머지 계층 구조는 임의적이며 기본 유형이 요구 사항에 맞지 않는 경우 고유한 요구 사항에 따라 정의할 수 있습니다. ECDHE 맵 버킷 유형을 조직의 하드웨어 이름 지정 규칙에 조정하고 물리적 하드웨어 이름을 반영하는 인스턴스 이름을 사용하는 것이 좋습니다. 이름 지정 방법을 사용하면 OSD 또는 기타 하드웨어와 관리자가 호스트 또는 기타 하드웨어에 대한 원격 또는 물리적 액세스가 필요할 때 클러스터를 보다 쉽게 관리하고 문제를 해결할 수 있습니다.
다음 예에서 버킷 계층 구조에는 4개의 리프 버킷(osd 1-4), 두 개의 노드 버킷(호스트 1-2) 및 하나의 랙 노드(랙1)가 있습니다.
리프 노드는 FlexVolume 맵 시작 시 장치 목록에 선언된 스토리지 장치를 반영하므로 이를 버킷 인스턴스로 선언할 필요가 없습니다. 계층 구조에서 두 번째로 낮은 버킷 유형은 일반적으로 장치를 집계합니다. 즉 일반적으로 스토리지 미디어를 포함하는 컴퓨터가고 관리자가 "node", "server", "host", "machine" 등과 같은 설명을 선호하는 용어가 사용됩니다. 밀도가 높은 환경에서는 카드당 및 섀시당 여러 호스트/노드를 보는 것이 점점 더 일반적입니다. 예를 들어, 노드가 실패하면 카드 또는 섀시 오류를 가져와야하면 수많은 호스트/노드와 OSD가 중단될 수 있습니다.
버킷 인스턴스를 선언할 때 유형을 지정하고, 고유 이름을 문자열로 지정하고, 음수 정수로 표시되는 선택적 고유 ID를 할당하고, 항목의 총 용량 또는 기능에 대한 가중치를 지정하고, straw2 와 같은 버킷 알고리즘을 지정하고, 일반적으로 해시 알고리즘 rjenkins1 을 반영합니다. 버킷에는 하나 이상의 항목이 있을 수 있습니다. 항목은 노드 버킷 또는 리프로 구성될 수 있습니다. 항목은 항목의 상대적 가중치를 반영하는 가중치를 가질 수 있습니다.
2.1.1. 동적 데이터 배치 링크 복사링크가 클립보드에 복사되었습니다!
Ceph Client 및 Ceph OSD는 모두ECDHE 맵과ECDHE 알고리즘을 사용합니다.
- Ceph 클라이언트: ECDHE 맵을 Ceph 클라이언트에 배포하여 Ceph 클라이언트가 OSD와 직접 통신할 수 있습니다. 즉, Ceph 클라이언트는 단일 장애 지점, 성능 장애, 중앙 집중식 조회 서버의 연결 제한, 스토리지 클러스터 확장성에 대한 물리적 제한으로 작동할 수 있는 중앙 집중식 개체 조회 테이블을 피합니다.
- Ceph OSD: FlexVolume 맵을 Ceph OSD에 배포하여 OSD가 복제, 백필링 및 복구를 처리할 수 있도록 지원합니다. 즉, Ceph OSD는 Ceph 클라이언트를 대신하여 오브젝트 복제본(또는 코딩 청크)의 스토리지를 처리합니다. 또한 Ceph OSD는 클러스터를 재조정하고 동적으로 장애로부터 복구할 수 있는 클러스터에 대해 충분히 알고 있습니다.
2.1.2. ECDHE 실패 도메인 링크 복사링크가 클립보드에 복사되었습니다!
여러 개체 복제본 또는 M dissure 코딩 청크를 사용하면 데이터 손실을 방지하는 데 도움이 되지만 고가용성을 해결하는 것만으로는 충분하지 않습니다. Ceph Storage Cluster의 기본 물리적 조직을 반영하여ECDHE은 모델링하여 관련 장치 오류의 주소 가능 소스를 모델링할 수 있습니다. 클러스터의 토폴로지를 클러스터 맵으로 인코딩하면ECDHE 배치 정책은 다양한 실패 도메인에서 오브젝트 복제본 또는 삭제 코딩 청크를 분리하면서 원하는 의사 무작위 배포를 유지할 수 있습니다. 예를 들어, 동시 오류 가능성을 해결하기 위해 데이터 복제본 또는 삭제 코딩 청크가 다른 보류, 랙, 전원 공급 장치, 컨트롤러 또는 물리적 위치를 사용하는 장치에 있는지 확인하는 것이 좋습니다. 이렇게 하면 데이터 손실을 방지하고 성능이 저하된 상태에서 클러스터가 작동할 수 있습니다.
2.1.3. ECDHE 성능 도메인 링크 복사링크가 클립보드에 복사되었습니다!
Ceph는 여러 계층 구조를 다른 유형의 하드웨어 성능 프로필과 분리하도록 지원할 수 있습니다. 예를 들어ECDHE은 하드 디스크 드라이브에 대해 하나의 계층과 SSD에 대한 다른 계층 구조를 만들 수 있습니다. 기본 하드웨어의 성능 프로파일을 고려하여 성능 도메인 - 다양한 성능 특성을 지원해야 하므로 점점 더 널리 사용되고 있습니다. 운영상 이러한 맵은 둘 이상의 루트 유형 버킷이 있는 맵입니다. 사용 사례 예는 다음과 같습니다.
- Object Storage: S3 및 Swift 인터페이스의 오브젝트 스토리지 백엔드 역할을 하는 Ceph 호스트는 VM에 적합하지 않을 수 있는 SATA 드라이브와 같이 비용이 적게 드는 스토리지 미디어를 활용하여 개체 스토리지에 gigabyte당 비용을 절감하면서 동시에 클라우드 플랫폼에서 볼륨 및 이미지를 저장할 수 있는 더 많은 성능의 성능과 스토리지 호스트를 분리할 수 있습니다. HTTP는 오브젝트 스토리지 시스템에서 병목 현상이 발생하는 경향이 있습니다.
- 콜드 스토리지: 자주 액세스하는 데이터 또는 뛰어난 성능 요구 사항으로 데이터 검색용으로 설계된 시스템 - 비용이 적게 드는 스토리지 미디어 및 기간 코딩을 활용할 수 있습니다. 그러나 기간 지정 코딩에는 약간의 추가 RAM과 CPU가 필요할 수 있으므로 오브젝트 스토리지 또는 VM에 사용되는 호스트와 RAM 및 CPU 요구 사항이 다를 수 있습니다.
-
SSD 지원 풀: SSD는 비용이 많이 들지만 하드 디스크 드라이브보다 큰 이점이 있습니다. SSD에는 검색 시간이 없으며 높은 총 처리량을 제공합니다. 저널링에 SSD를 사용하는 것 외에도 클러스터는 SSD 지원 풀을 지원할 수 있습니다. 일반적인 사용 사례에는 고성능 SSD 풀이 포함됩니다. 예를 들어, SATA 드라이브 대신 Ceph Object Gateway의
.rgw.buckets.index풀을 SSD에 매핑할 수 있습니다.
DestinationRule 맵은 장치 클래스 의 개념을 지원합니다. Ceph는 스토리지 장치의 측면을 검색하고 hdd,ssd 또는 nvme 와 같은 클래스를 자동으로 할당할 수 있습니다. 그러나 DestinationRule은 이러한 기본값에 국한되지 않습니다. 예를 들어ECDHE 계층을 사용하여 다른 유형의 워크로드를 분리할 수도 있습니다. 예를 들어 SSD는 저널 또는 쓰기 로그, 버킷 인덱스 또는 원시 오브젝트 스토리지에 사용될 수 있습니다. FlexVolume은 ssd-bucket-index 또는 ssd-object-storage 와 같은 다른 장치 클래스를 지원할 수 있으므로 Ceph는 서로 다른 워크로드에 동일한 스토리지 미디어를 사용하지 않도록 하여 성능을 보다 예측 가능하고 일관되게 만듭니다.
백그라운드에서 Ceph는 각 장치 클래스에 대해 crush 루트를 생성합니다. 이러한 루트는 OSD에서 장치 클래스를 설정하거나 변경하는 경우에만 수정해야 합니다. 다음 명령을 사용하여 생성된 루트를 볼 수 있습니다.
예제
2.2. ECDHE 계층 구조 링크 복사링크가 클립보드에 복사되었습니다!
DestinationRule 맵은 지시된 사이클릭 그래프이므로 여러 계층(예: 성능 도메인)을 수용할 수 있습니다. FlexVolume 계층 구조를 만들고 수정하는 가장 쉬운 방법은 Ceph CLI를 사용하는 것입니다. 그러나ECDHE 맵을 컴파일하고 편집하고, 다시 컴파일하고, 활성화할 수도 있습니다.
Ceph CLI를 사용하여 버킷 인스턴스를 선언할 때 유형을 지정하고 고유한 문자열 이름을 지정해야 합니다. Ceph는 버킷 ID를 자동으로 할당하고 알고리즘을 straw2 로 설정하고, 해시를 rjenkins1 을 반영하는 0 으로 설정하고, 가중치를 설정합니다. deECDHE map을 수정할 때 버킷에 음수 정수(선택 사항)로 표시된 고유 ID를 할당하고, 해당 항목의 총 용량/capability에 대한 가중치를 지정하고 버킷 알고리즘(일반적으로 straw2)을 지정하고 해시 알고리즘(일반적으로 0, 해시 알고리즘 rjenkins1을 반영합니다)을 지정합니다.
버킷에는 하나 이상의 항목이 있을 수 있습니다. 항목은 노드 버킷(예: 랙, 행, 호스트)으로 구성되거나(예: OSD 디스크)가 될 수 있습니다. 항목은 항목의 상대적 가중치를 반영하는 가중치를 가질 수 있습니다.
deECDHE map을 수정할 때 다음 구문으로 노드 버킷을 선언할 수 있습니다.
예를 들어 위의 다이어그램을 사용하여 두 개의 호스트 버킷과 하나의 랙 버킷을 정의합니다. OSD는 호스트 버킷 내의 항목으로 선언됩니다.
앞의 예에서 랙 버킷에는 OSD가 포함되어 있지 않습니다. 오히려 더 낮은 수준의 호스트 버킷을 포함하고 있으며 항목 항목의 총 가중치 합계를 포함합니다.
2.2.1. ECDHE 위치 링크 복사링크가 클립보드에 복사되었습니다!
location은 FlexVolume 맵의 계층 구조 측면에서 OSD의 위치입니다. 명령줄 인터페이스에서 location on the command line을 나타내는 경우, aECDHE location0:0은 OSD의 위치를 설명하는 이름/값 쌍의 목록을 사용합니다. 예를 들어 OSD가 특정 행, 랙, 섀시 및 호스트에 있고 기본 ECDHE 트리의 일부인 경우 해당 crush 위치를 다음과 같이 설명할 수 있습니다.
root=default row=a rack=a2 chassis=a2a host=a2a1
root=default row=a rack=a2 chassis=a2a host=a2a1
참고:
- 키 순서는 중요하지 않습니다.
-
키 이름(left of
=)은 유효한ECDHE유형여야 합니다. 기본적으로루트,데이터 센터,공간,행,Pod, Pdu랙,섀시및호스트가포함됩니다. DestinationRule 맵을 편집하여 필요에 맞게 유형을 변경할 수 있습니다. -
모든 버킷/키를 지정할 필요는 없습니다. 예를 들어 기본적으로 Ceph는
ceph-osd데몬의 위치를root=default host={HOSTNAME}(hostname -s의 출력에 따라)로 자동으로 설정합니다.
2.2.2. 버킷 추가 링크 복사링크가 클립보드에 복사되었습니다!
bucket 인스턴스를ECDHE 계층 구조에 추가하려면 버킷 이름과 해당 유형을 지정합니다. 버킷 이름은 DestinationRule 맵에서 고유해야 합니다.
ceph osd crush add-bucket {name} {type}
ceph osd crush add-bucket {name} {type}
예를 들어 하드웨어 성능 프로필과 같이 여러 계층 구조를 사용하려는 경우 하드웨어 유형 또는 사용 사례에 따라 버킷 이름을 지정하는 것이 좋습니다.
예를 들어 솔리드 스테이트 드라이브(ssd), SSD 저널이 있는 SAS 디스크의 계층 구조, SATA 드라이브의 계층 구조()를 만들 수 있습니다.
hdd-journal
ceph osd crush add-bucket ssd-root root ceph osd crush add-bucket hdd-journal-root root ceph osd crush add-bucket hdd-root root
ceph osd crush add-bucket ssd-root root
ceph osd crush add-bucket hdd-journal-root root
ceph osd crush add-bucket hdd-root root
Ceph CLI 출력:
added bucket ssd-root type root to crush map added bucket hdd-journal-root type root to crush map added bucket hdd-root type root to crush map
added bucket ssd-root type root to crush map
added bucket hdd-journal-root type root to crush map
added bucket hdd-root type root to crush map
버킷 이름에 콜론(:)을 사용하는 것은 지원되지 않습니다.
계층에 필요한 각 버킷 유형의 인스턴스를 추가합니다. 다음 예제에서는 SSD 호스트 랙과 오브젝트 스토리지용 호스트 랙이 있는 행에 버킷을 추가하는 방법을 보여줍니다.
이 단계를 완료하면 트리를 봅니다.
ceph osd tree
ceph osd tree
계층 구조는 플랫으로 유지됩니다. 버킷을 DestinationRule 맵에 추가한 후 계층적 위치로 이동해야 합니다.
2.2.3. 버킷 이동 링크 복사링크가 클립보드에 복사되었습니다!
초기 클러스터를 생성할 때 Ceph에는 default 라는 루트 버킷이 있는 기본 DestinationRule 맵이 있으며 초기 OSD 호스트가 기본 버킷 아래에 표시됩니다. FlexVolume 맵에 버킷 인스턴스를 추가하면 DestinationRule 계층 구조에 표시되지만 특정 버킷 아래에는 표시되지 않습니다.
버킷 인스턴스를ECDHE 계층 구조의 특정 위치로 이동하려면 버킷 이름과 해당 유형을 지정합니다. 예를 들면 다음과 같습니다.
ceph osd crush move ssd-row1 root=ssd-root ceph osd crush move ssd-row1-rack1 row=ssd-row1 ceph osd crush move ssd-row1-rack1-host1 rack=ssd-row1-rack1 ceph osd crush move ssd-row1-rack1-host2 rack=ssd-row1-rack1
ceph osd crush move ssd-row1 root=ssd-root
ceph osd crush move ssd-row1-rack1 row=ssd-row1
ceph osd crush move ssd-row1-rack1-host1 rack=ssd-row1-rack1
ceph osd crush move ssd-row1-rack1-host2 rack=ssd-row1-rack1
이 단계를 완료하면 트리를 볼 수 있습니다.
ceph osd tree
ceph osd tree
ceph osd crush create-or-move 를 사용하여 OSD를 이동하는 동안 위치를 생성할 수도 있습니다.
2.2.4. 버킷 제거 링크 복사링크가 클립보드에 복사되었습니다!
DestinationRule 계층에서 버킷 인스턴스를 제거하려면 버킷 이름을 지정합니다. 예를 들면 다음과 같습니다.
ceph osd crush remove {bucket-name}
ceph osd crush remove {bucket-name}
또는 다음을 수행합니다.
ceph osd crush rm {bucket-name}
ceph osd crush rm {bucket-name}
이를 제거하려면 버킷이 비어 있어야 합니다.
상위 수준 버킷 (예: 기본)과 같은 루트를 제거하는 경우 풀에서 해당 버킷을 선택하는ECDHE 규칙을 사용하는지 확인하십시오. 그렇지 않으면 peering이 실패합니다.
2.2.5. DestinationRule Bucket 알고리즘 링크 복사링크가 클립보드에 복사되었습니다!
Ceph CLI를 사용하여 버킷을 생성할 때 Ceph는 기본적으로 알고리즘을 straw2 로 설정합니다. Ceph는 4개의 버킷 알고리즘을 지원하며 각 알고리즘은 성능과 재구성 효율성 간의 균형을 나타냅니다. 어떤 버킷 유형을 사용할지 확실하지 않은 경우 straw2 버킷을 사용하는 것이 좋습니다. 버킷 알고리즘은 다음과 같습니다.
-
Uniform buckets 집계 장치는 정확히 동일한 가중치를 갖습니다. 예를 들어, 가맹점 또는 해제 하드웨어의 경우 일반적으로 정확히 동일한 물리적 구성(예: 대량 구매)을 사용하는 여러 시스템에서 이러한 작업을 수행합니다. 스토리지 장치의 가중치가 정확히 동일한 경우
균일한버킷 유형을 사용할 수 있습니다. 이를 통해ECDHE에서 일정 시간 내에 복제본을 균일 버킷에 매핑할 수 있습니다. 고유하지 않은 가중치를 사용하면 다른 버킷 알고리즘을 사용해야 합니다. - list: 버킷을 연결된 목록으로 집계합니다. RUSH (Replication Under Scalable Hashing) P 알고리즘에 따라 목록은 확장 클러스터에 대한 자연스럽고 직관적 인 선택 사항입니다 : 어느 개체가 적절한 확률을 가진 최신 장치로 재배치되거나 이전 장치 위에 남아 있습니다. 버킷에 항목이 추가되면 최적의 데이터 마이그레이션을 수행할 수 있습니다. 그러나 목록의 중간 또는 테일에서 제거된 항목은 상당한 양의 불필요한 이동을 초래할 수 있으며, 목록 버킷이 전혀 없는 상황에 가장 적합하거나 거의 축소 되지 않도록 할 수 있습니다.
- tree: 트리 버킷은 바이너리 검색 트리를 사용합니다. 버킷에 더 큰 항목 세트가 포함된 경우 버킷을 나열하는 것보다 효율적입니다. RUSH (Replication Under Scalable Hashing) R 알고리즘에 따라 트리 버킷은 배치 시간을 0 (log n)으로 줄여 훨씬 더 큰 장치 또는 중첩된 버킷을 관리하는 데 적합합니다.
-
Straw2 (기본값): 목록 및 트리 버킷은 예를 들어 목록 시작 부분에 있는 항목 전체 하위 트리를 고려해야 하는 필요와 같은 특정 항목의 우선 순위를 지정하는 방식으로 분할 및 트리 버킷을 사용합니다. 이로 인해 복제본 배치 프로세스의 성능이 향상되지만 항목의 추가, 제거 또는 재중량으로 인해 버킷 내용이 변경될 때 잘못된 재구성 동작이 발생할 수도 있습니다.
straw2버킷 유형을 사용하면 모든 항목이 straws 추출과 유사한 프로세스를 통해 복제 배치를 위해 서로 상당히 "경로"할 수 있습니다.
2.3. ECDHE의 Ceph OSD 링크 복사링크가 클립보드에 복사되었습니다!
OSD에 대한ECDHE 계층 구조가 있으면 OSD를ECDHE 계층 구조에 추가합니다. 기존 계층에서 OSD를 이동하거나 제거할 수도 있습니다. Ceph CLI 사용량에는 다음과 같은 값이 있습니다.
- id
- 설명
- OSD의 숫자 ID입니다.
- 유형
- 정수
- 필수 항목
- 제공됨
- 예제
-
0
- name
- 설명
- OSD의 전체 이름입니다.
- 유형
- 문자열
- 필수 항목
- 제공됨
- 예제
-
osd.0
- 가중치
- 설명
- OSD의 weight입니다.
- 유형
- double
- 필수 항목
- 제공됨
- 예제
-
2.0
- root
- 설명
- OSD가 상주하는 계층 또는 트리의 루트 버킷 이름입니다.
- 유형
- 키-값 쌍입니다.
- 필수 항목
- 제공됨
- 예제
-
root=default,root=replicated_rule등
- bucket-type
- 설명
- 하나 이상의 이름-값 쌍입니다. 여기서 name은 버킷 유형이고 값은 버킷의 이름입니다. DestinationRule 계층 구조에서 OSD의 location을 지정할 수 있습니다.
- 유형
- 키-값 쌍입니다.
- 필수 항목
- 없음
- 예제
-
datacenter=dc1 room=room1 row=foo rack=bar host=foo-bar-1
2.3.1. ECDHE에서 OSD 보기 링크 복사링크가 클립보드에 복사되었습니다!
ceph osd crush tree 명령은 DestinationRule 버킷과 트리 보기의 항목을 출력합니다. 이 명령을 사용하여 특정 버킷의 OSD 목록을 확인합니다. ceph osd 트리 와 유사한 출력을 출력합니다.
추가 세부 정보를 반환하려면 다음을 실행합니다.
ceph osd crush tree -f json-pretty
# ceph osd crush tree -f json-pretty
명령은 다음과 유사한 출력을 반환합니다.
2.3.2. DestinationRule에 OSD 추가 링크 복사링크가 클립보드에 복사되었습니다!
OSD를 시작하고 Ceph에서 배치 그룹을 OSD 에할당하기 전에 FlexVolume 계층에 Ceph OSD 를 추가하는 것이 최종 단계입니다.
Ceph OSD를 FlexVolume 계층 구조에 추가하기 전에 준비해야 합니다. Ceph Orchestrator와 같은 배포 유틸리티는 이 단계를 수행할 수 있습니다. 예를 들어 단일 노드에 Ceph OSD를 생성합니다.
구문
ceph orch daemon add osd HOST:_DEVICE_,[DEVICE]
ceph orch daemon add osd HOST:_DEVICE_,[DEVICE]
FlexVolume 계층 구조는 개념적이므로 ceph osd crush add 명령을 사용하면 원하는 위치에 OSD를 DestinationRule 계층에 추가할 수 있습니다. 지정하는 위치는 실제 위치를 반영해야 합니다. 하나 이상의 버킷을 지정하면 명령에서 지정한 가장 구체적인 버킷에 OSD를 배치하고 지정한 다른 버킷 아래 해당 버킷을 이동합니다.
OSD를ECDHE 계층 구조에 추가하려면 다음을 수행합니다.
구문
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를 루트에 직접 연결합니다. 그러나ECDHE 규칙은 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-move 를 사용하여 OSD를 DestinationRule 계층 구조에 추가할 수도 있습니다.
2.3.3. DestinationRule 계층 구조 내에서 OSD 이동 링크 복사링크가 클립보드에 복사되었습니다!
스토리지 클러스터 토폴로지가 변경되면 DestinationRule 계층 구조에서 OSD를 이동하여 실제 위치를 반영할 수 있습니다.
ECDHE 계층 구조에서 OSD를 이동하면 Ceph에서 OSD에 할당되는 배치 그룹을 다시 계산하여 데이터가 크게 다시 배포될 수 있습니다.
DestinationRule 계층 내에서 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-move 를 사용하여 DestinationRule 계층 내에서 OSD를 이동할 수도 있습니다.
2.3.4. DestinationRule 계층에서 OSD 제거 링크 복사링크가 클립보드에 복사되었습니다!
ECDHE 계층에서 OSD를 제거하는 것이 클러스터에서 OSD를 제거하려는 경우 첫 번째 단계입니다. ECDHE 맵에서 OSD를 제거하면 DestinationRule은 배치 그룹 및 데이터를 적절하게 재조정하는 OSD를 다시 계산합니다. 자세한 내용은 OSD 추가/제거를 참조하십시오.
실행 중인 클러스터의 DestinationRule 맵에서 OSD를 제거하려면 다음을 실행합니다.
구문
ceph osd crush remove NAME
ceph osd crush remove NAME
2.4. 장치 클래스 링크 복사링크가 클립보드에 복사되었습니다!
Ceph의ECDHE 맵은 데이터 배치를 제어하는 데 있어 유연성이 뛰어납니다. 이는 Ceph의 가장 큰 강점 중 하나입니다. 초기 Ceph 배포에서는 하드 디스크 드라이브를 거의 독점적으로 사용했습니다. 현재 Ceph 클러스터는 다양한 유형의 스토리지 장치(ECDHE, SSD, NVMe 또는 다양한 클래스의 이전 클래스)를 사용하여 자주 빌드됩니다. 예를 들어 Ceph Object Gateway 배포에는 클라이언트가 빠른 SSD에 데이터를 저장하기 위해 느린ECDHE 및 기타 스토리지 정책에 데이터를 저장할 수 있는 스토리지 정책을 사용하는 것이 일반적입니다. Ceph Object Gateway 배포에는 버킷 인덱스에 대해 빠른 SSD에서 지원하는 풀도 있을 수 있습니다. 또한 OSD 노드는 FlexVolume 맵에 표시되지 않는 저널 또는 쓰기 로그에만 전용 SSD를 사용하는 경우가 많습니다. 이러한 복잡한 하드웨어 시나리오에는 time- consuming and tedted 할 수 있는 FlexVolume 맵을 수동으로 편집해야 했습니다. 스토리지 장치의 다른 클래스에 대해 다른 DestinationRule 계층이 있을 필요는 없습니다.
ECDHE 규칙은ECDHE 계층 구조에서 작동합니다. 그러나 다른 스토리지 장치가 동일한 호스트에 있는 경우 프로세스는 장치 각 클래스에 대해 여러 개의 DestinationRule 계층을 생성하기 위해 사용자가 더 복잡하게 되며, 많은 것을 자동화하는 start 옵션에서 osd crush 업데이트를 비활성화하게 됩니다. 장치 클래스를 사용하면 장치 클래스를 사용할 장치 클래스를 지시하여ECDHE 관리 작업을 크게 단순화하여 이러한 불안정성을 제거합니다.
ceph osd tree 명령에는 장치 클래스를 반영하는 열이 있습니다.
2.4.1. 장치 클래스 설정 링크 복사링크가 클립보드에 복사되었습니다!
OSD의 장치 클래스를 설정하려면 다음을 실행합니다.
구문
ceph osd crush set-device-class CLASS OSD_ID [OSD_ID..]
ceph osd crush set-device-class CLASS OSD_ID [OSD_ID..]
예제
[ceph: root@host01 /]# ceph osd crush set-device-class hdd osd.0 osd.1 [ceph: root@host01 /]# ceph osd crush set-device-class ssd osd.2 osd.3 [ceph: root@host01 /]# ceph osd crush set-device-class bucket-index osd.4
[ceph: root@host01 /]# ceph osd crush set-device-class hdd osd.0 osd.1
[ceph: root@host01 /]# ceph osd crush set-device-class ssd osd.2 osd.3
[ceph: root@host01 /]# ceph osd crush set-device-class bucket-index osd.4
Ceph에서 장치에 클래스를 자동으로 할당할 수 있습니다. 그러나 클래스 이름은 임의의 문자열입니다. hdd,ssd 또는 nvme 를 준수해야 할 필요는 없습니다. 이전 예에서 bucket-index 라는 장치 클래스는 Ceph Object Gateway 풀이 전용 버킷 인덱스 워크로드를 사용하는 SSD 장치를 나타낼 수 있습니다. 이미 설정된 장치 클래스를 변경하려면 ceph osd crush rm-device-class 를 먼저 사용합니다.
2.4.2. 장치 클래스 제거 링크 복사링크가 클립보드에 복사되었습니다!
OSD의 장치 클래스를 제거하려면 다음을 실행합니다.
구문
ceph osd crush rm-device-class CLASS OSD_ID [OSD_ID..]
ceph osd crush rm-device-class CLASS OSD_ID [OSD_ID..]
예제
[ceph: root@host01 /]# ceph osd crush rm-device-class hdd osd.0 osd.1 [ceph: root@host01 /]# ceph osd crush rm-device-class ssd osd.2 osd.3 [ceph: root@host01 /]# ceph osd crush rm-device-class bucket-index osd.4
[ceph: root@host01 /]# ceph osd crush rm-device-class hdd osd.0 osd.1
[ceph: root@host01 /]# ceph osd crush rm-device-class ssd osd.2 osd.3
[ceph: root@host01 /]# ceph osd crush rm-device-class bucket-index osd.4
2.4.3. 장치 클래스 이름 변경 링크 복사링크가 클립보드에 복사되었습니다!
해당 클래스를 사용하는 모든 OSD의 장치 클래스 이름을 바꾸려면 다음을 실행합니다.
구문
ceph osd crush class rename OLD_NAME NEW_NAME
ceph osd crush class rename OLD_NAME NEW_NAME
예제
[ceph: root@host01 /]# ceph osd crush class rename hdd sas15k
[ceph: root@host01 /]# ceph osd crush class rename hdd sas15k
2.4.4. 장치 클래스 나열 링크 복사링크가 클립보드에 복사되었습니다!
ECDHE 맵의 장치 클래스를 나열하려면 다음을 실행합니다.
구문
ceph osd crush class ls
ceph osd crush class ls
출력은 다음과 같습니다.
예제
[
"hdd",
"ssd",
"bucket-index"
]
[
"hdd",
"ssd",
"bucket-index"
]
2.4.5. 장치 클래스의 OSD 나열 링크 복사링크가 클립보드에 복사되었습니다!
특정 클래스에 속하는 모든 OSD를 나열하려면 다음을 실행합니다.
구문
ceph osd crush class ls-osd CLASS
ceph osd crush class ls-osd CLASS
예제
[ceph: root@host01 /]# ceph osd crush class ls-osd hdd
[ceph: root@host01 /]# ceph osd crush class ls-osd hdd
출력은 OSD 번호 목록일 뿐입니다. 예를 들면 다음과 같습니다.
2.4.6. 클래스별 규칙 나열 링크 복사링크가 클립보드에 복사되었습니다!
동일한 클래스를 참조하는 모든 crush 규칙을 나열하려면 다음을 실행합니다.
구문
ceph osd crush rule ls-by-class CLASS
ceph osd crush rule ls-by-class CLASS
예제
[ceph: root@host01 /]# ceph osd crush rule ls-by-class hdd
[ceph: root@host01 /]# ceph osd crush rule ls-by-class hdd
2.5. weights 링크 복사링크가 클립보드에 복사되었습니다!
ECDHE 알고리즘은 OSD 장치당 weight 값을 테라바이트 단위로 할당하고(규칙별) 새 데이터 개체를 PGs 및 PGs에 할당하는 쓰기 요청에 대해 균일한 확률 분배를 실현하도록 합니다. 이러한 이유로, 동일한 유형 및 크기의 장치를 사용하여ECDHE 계층을 생성하고 동일한 가중치를 할당하는 것이 좋습니다. 또한 성능 특성이 데이터 배포에 영향을 주지 않더라도 동일한 I/O 및 처리량 특성을 가진 장치를 사용하는 것이 좋습니다.We also recommend using devices with the same I/O and throughput characteristics so that you will also have uniform performance characteristics in yourECDHE hierarchy, even though performance characteristics do not affect data distribution.
균일한 하드웨어를 사용하는 것이 항상 실용적이지는 않기 때문에 다른 크기의 OSD 장치를 통합하고 상대적 가중치를 사용하여 Ceph가 더 큰 장치에 더 많은 데이터를 배포하고 더 적은 데이터를 더 작은 장치에 배포할 수 있습니다.
2.5.1. OSD의 weight 설정 링크 복사링크가 클립보드에 복사되었습니다!
DestinationRule 맵 내에서 Terabytes에 OSDECDHE 가중치를 설정하려면 다음 명령을 실행합니다.
ceph osd crush reweight _NAME_ _WEIGHT_
ceph osd crush reweight _NAME_ _WEIGHT_
다음과 같습니다.
- name
- 설명
- OSD의 전체 이름입니다.
- 유형
- 문자열
- 필수 항목
- 제공됨
- 예제
-
osd.0
- 가중치
- 설명
-
OSD의 weight입니다. 이는 Terabytes의 OSD 크기입니다. 여기서
1.0은 1Terabyte입니다. - 유형
- double
- 필수 항목
- 제공됨
- 예제
-
2.0
이 설정은 OSD를 생성한 후 즉시 OSD를 생성하거나 OSD를 추가한 직후에 weight를 조정할 때 사용됩니다. 일반적으로 OSD의 수명 동안 변경되지 않습니다.
2.5.2. Bucket의 OSD 가중치 설정 링크 복사링크가 클립보드에 복사되었습니다!
ceph osd crush reweight 을 사용하면 시간이 오래 걸릴 수 있습니다. ceph osd crush reweight-subtree 명령을 실행하여 버킷(row, rack, node 등) 아래의 모든 Ceph OSD 가중치를 설정(또는 재설정)할 수 있습니다.
구문
ceph osd crush reweight-subtree NAME
ceph osd crush reweight-subtree NAME
여기서 NAME 은 CRUSH 버킷의 이름입니다.
2.5.3. OSD 의 가중치 설정 링크 복사링크가 클립보드에 복사되었습니다!
에서 ceph osd 및 ceph osd out 의 목적으로 OSD는 클러스터에 있거나 클러스터 외부에 있습니다. 모니터에서 OSD 상태를 기록하는 방법입니다. 그러나 OSD는 클러스터에 있지만 수정할 때까지 사용하지 않으려는 등의 문제가 발생할 수 있습니다(예: 스토리지 드라이브 교체, 컨트롤러 변경 등).
다음을 실행하여 특정 OSD(즉, Terabytes의 가중치를 변경하지 않고)의 가중치를 늘리거나 줄일 수 있습니다.
구문
ceph osd reweight ID WEIGHT
ceph osd reweight ID WEIGHT
다음과 같습니다.
-
id는 OSD 번호입니다. -
weight는 0.0-1.0의 범위입니다. 여기서0은 클러스터에 없는 경우(즉, PG가 클러스터에 할당되지 않음) 1.0은 클러스터에 있습니다(즉, OSD가 다른 OSD와 동일한 수의 PG를 수신함).
2.5.4. 사용률에 따라 OSD 가중치 설정 링크 복사링크가 클립보드에 복사되었습니다!
DestinationRule은 새 데이터 개체 PG 및 PG를 OSD에 할당하는 쓰기 요청에 대해 균일한 확률 분배로 설계되었습니다. 그러나 클러스터의 불균형이 발생할 수 있습니다. 이는 여러 가지 이유로 발생할 수 있습니다. 예를 들면 다음과 같습니다.
- 여러 풀: DestinationRule 계층 구조에 여러 풀을 할당할 수 있지만 풀에 배치 그룹, 크기(스토리지할 복제본 수) 및 개체 크기 특성이 다를 수 있습니다.
-
사용자 지정 클라이언트: 블록 장치, 오브젝트 게이트웨이 및 파일 시스템과 같은 Ceph 클라이언트는 클라이언트의 데이터를 공유하고, 크기가 작은 RADOS 오브젝트로 클러스터 전체에서 데이터를 오브젝트로 스트라이핑합니다. 따라서 앞의 시나리오를 제외하고,ECDHE은 일반적으로 목표를 달성합니다. 그러나 클러스터가 불균형이 될 수 있는 또 다른 경우가 있습니다. 즉,
librados를 사용하여 오브젝트 크기를 정규화하지 않고 데이터를 저장합니다. 이 시나리오는 불균형된 클러스터(예: 100개의 1MB 오브젝트를 저장하고 10 4MB 오브젝트를 저장하면 몇 개의 OSD가 다른 OSD보다 더 많은 데이터를 보유하게 됩니다). - 확률: 균일 배포로 인해 PG가 더 많고 일부는 더 적은 OSD가 생성됩니다. 다수의 OSD가 있는 클러스터의 경우 통계적 이상값이 더 향상될 것입니다.
다음을 실행하여 사용률을 통해 OSD를 재조정할 수 있습니다.
구문
ceph osd reweight-by-utilization [THRESHOLD_] [WEIGHT_CHANGE_AMOUNT] [NUMBER_OF_OSDS] [--no-increasing]
ceph osd reweight-by-utilization [THRESHOLD_] [WEIGHT_CHANGE_AMOUNT] [NUMBER_OF_OSDS] [--no-increasing]
예제
[ceph: root@host01 /]# ceph osd test-reweight-by-utilization 110 .5 4 --no-increasing
[ceph: root@host01 /]# ceph osd test-reweight-by-utilization 110 .5 4 --no-increasing
다음과 같습니다.
-
임계값은 사용률의 백분율로, 데이터 스토리지 로드를 초과하는 OSD는 더 낮은 가중치를 수신하므로 할당된 PG가 줄어듭니다. 기본값은120%를 반영하여 120 %입니다.100+의 모든 값은 유효한 임계값입니다. 선택 사항: -
weight_change_amount는 가중치를 변경할 수 있는 양입니다. 유효한 값은0.0 - 1.0보다 큽니다. 기본값은0.05입니다. 선택 사항: -
number_of_OSDs는 reweight할 최대 OSD 수입니다. 대규모 클러스터의 경우 OSD 수를 재조정하도록 제한하면 상당한 재조정을 방지할 수 있습니다. 선택 사항: -
no-increasing은 기본적으로 해제됩니다. reweight-by-utilization 또는test-가 허용됩니다. 이 옵션을 이러한 명령과 함께 사용하면 OSD가 사용되지 않는 경우에도 OSD 가중치가 증가하지 않습니다. 선택 사항:reweight-by-utilization명령을 사용할 때 osd weight
reweight-by-utilization 을 실행하는 것이 권장되며 대규모 클러스터에는 다소 불안정합니다. 사용률은 시간이 지남에 따라 변경될 수 있으며 클러스터 크기 또는 하드웨어 변경에 따라 변경 가능한 사용률을 반영하도록 가중치를 업데이트해야 할 수 있습니다. 사용률에 따라 가중치를 조정하도록 선택하는 경우 사용률, 하드웨어 또는 클러스터 크기 변경으로 이 명령을 다시 실행해야 할 수 있습니다.
가중치를 할당하는 이 가중치 명령을 실행하면 이 명령에 의해 할당된 가중치를 재정의합니다(예: osd reweight-by-utilization,osd crush weight,osd weight,in 또는 out).
2.5.5. PG 배포로 OSD의 가중치 설정 링크 복사링크가 클립보드에 복사되었습니다!
더 적은 수의 OSD가 있는 hierarchies에서는 일부 OSD가 다른 OSD보다 더 많은 PG를 얻을 수 있어 더 많은 로드가 발생할 수 있습니다. 다음을 실행하여 PG 배포를 통해 OSD를 다시 정렬하여 이 상황을 해결할 수 있습니다.
구문
osd reweight-by-pg POOL_NAME
osd reweight-by-pg POOL_NAME
다음과 같습니다.
-
Poolname은 풀의 이름입니다. Ceph는 풀이 OSD에 PG를 할당하는 방법을 검사하고 이 풀의 PG 배포에 따라 OSD를 다시 지정합니다. 여러 풀을 동일한 DestinationRule 계층에 할당할 수 있습니다. 하나의 풀 배포에 따른 OSD 중량으로 인해 동일한 크기(복제본 수) 및 PG가 없는 경우 다른 풀에는 의도하지 않은 영향을 미칠 수 있습니다.
2.5.6. ECDHE Tree의 가중치를 다시 계산 링크 복사링크가 클립보드에 복사되었습니다!
ECDHE 트리 버킷은 리프 가중치의 합계여야 합니다. ECDHE 맵 가중치를 수동으로 편집하는 경우 다음을 실행하여 DestinationRule 버킷 트리가 버킷 아래의 리프 OSD의 합계를 정확하게 반영하는지 확인해야 합니다.
구문
osd crush reweight-all
osd crush reweight-all
2.6. 기본 유사성 링크 복사링크가 클립보드에 복사되었습니다!
Ceph Client가 데이터를 읽거나 쓸 때 항상 동작 세트의 기본 OSD와 연결됩니다. 설정된 경우 [2, 3, 4], osd.2 가 기본입니다. 경우에 따라 OSD가 다른 OSD와 비교하여 기본으로 작동하는 데 적합하지 않은 경우도 있습니다(예: 느린 디스크 또는 느린 컨트롤러가 있음). 하드웨어 사용을 극대화하면서 성능 병목 현상(특히 읽기 작업 시)을 방지하기 위해 Ceph OSD의 기본 선호도를 설정하여 OSD를 작동 세트의 기본 설정으로 사용할 수 있습니다. :
구문
ceph osd primary-affinity OSD_ID WEIGHT
ceph osd primary-affinity OSD_ID WEIGHT
기본 선호도는 기본적으로 1 입니다(즉 OSD가 기본으로 작동할 수 있음). OSD 기본 범위를 0-1 에서 설정할 수 있습니다. 여기서 0 은 OSD를 기본으로 사용하지 않을 수 있고 1 은 OSD를 기본으로 사용할 수 있음을 의미합니다. weight가 & lt; 1 )인 경우ECDSA가 Ceph OSD 데몬을 기본으로 선택할 가능성이 줄어듭니다.
2.7. ECDHE 규칙 링크 복사링크가 클립보드에 복사되었습니다!
FlexVolume 규칙은 Ceph 클라이언트가 버킷과 그 안에 있는 기본 OSD를 선택하여 오브젝트를 저장하는 방법과 기본 OSD가 버킷과 보조 OSD를 선택하여 복제본 또는 코딩 청크를 저장하는 방법을 정의합니다. 예를 들어 SSD에서 두 개의 오브젝트 복제본에 대해 지원하는 대상 OSD 쌍을 선택하는 규칙과 3개의 복제본에 대해 다른 데이터 센터에서 SAS 드라이브에서 지원하는 대상 OSD 3개를 선택하는 규칙을 만들 수 있습니다.
규칙은 다음 형식을 취합니다.
- id
- 설명
- 규칙을 식별하는 고유한 정수입니다.
- 목적
- 규칙 마스크의 구성 요소입니다.
- 유형
- 정수
- 필수 항목
- 제공됨
- Default
-
0
- type
- 설명
- 스토리지 드라이브 복제 또는 Overridesure 코딩에 대한 규칙을 설명합니다.
- 목적
- 규칙 마스크의 구성 요소입니다.
- 유형
- 문자열
- 필수 항목
- 제공됨
- Default
-
복제 - 유효한 값
-
현재는
복제만 되어 있습니다.
- min_size
- 설명
- 풀이 이 수보다 복제본 수를 줄이면ECDHE에서 이 규칙을 선택하지 않습니다.
- 유형
- 정수
- 목적
- 규칙 마스크의 구성 요소입니다.
- 필수 항목
- 제공됨
- Default
-
1
- max_size
- 설명
- 풀이 이 수보다 더 많은 복제본을 만드는 경우ECDHE은 이 규칙을 선택하지 않습니다.
- 유형
- 정수
- 목적
- 규칙 마스크의 구성 요소입니다.
- 필수 항목
- 제공됨
- Default
-
10
- 단계 take <bucket-name> [class-name>]
- 설명
- 버킷 이름을 사용하고 트리를 반복하기 시작합니다.
- 목적
- 규칙 구성 요소입니다.
- 필수 항목
- 제공됨
- 예제
-
Step take datastep take data class ssd
- Step choose firstn <num> type <bucket-type>
- 설명
지정된 유형의 버킷 수를 선택합니다. 일반적으로 수는 풀의 복제본 수(즉, 풀 크기)입니다.
-
&
lt;num> == 0인 경우pool-num-replicas버킷을 선택합니다. -
<
num> > 0 && < pool-num-replicas인 경우 버킷 수를 선택합니다. -
&
lt;num> < 0인 경우pool-num-replicas - {num}를 의미합니다.
-
&
- 목적
- 규칙 구성 요소입니다.
- 사전 요구 사항
-
다음
단계 단계 또는.단계를선택합니다 - 예제
-
Step choose firstn 1 type row
- 단계 chooseleaf firstn <num> 유형 <bucket-type>
- 설명
{bucket-type}의 버킷 세트를 선택하고 버킷 세트의 각 버킷의 하위 트리에서 리프 노드를 선택합니다. 세트의 버킷 수는 일반적으로 풀의 복제본 수(즉, 풀 크기)입니다.-
&
lt;num> == 0인 경우pool-num-replicas버킷을 선택합니다. -
<
num> > 0 && < pool-num-replicas인 경우 버킷 수를 선택합니다. -
<
;num> < 0인 경우pool-num-replicas - <num>을 의미합니다.
-
&
- 목적
- 규칙 구성 요소입니다. 사용량을 사용하면 두 단계를 사용하여 장치를 선택할 필요가 없습니다.
- 사전 요구 사항
-
다음
단계 take또는step choose. - 예제
-
Step chooseleaf firstn 0 유형 행
- 출력 단계
- 설명
- 현재 값을 출력하고 스택을 제거합니다. 일반적으로 규칙 마지막에 사용되지만 동일한 규칙에서 다른 플레이버에서 선택하는 데 사용할 수도 있습니다.
- 목적
- 규칙 구성 요소입니다.
- 사전 요구 사항
-
다음
단계를 선택합니다. - 예제
-
출력 단계
- FirstN 대 indep
- 설명
-
OSD가ECDHE 맵에 표시된 경우 대체 전략ECDHE 사용을 제어합니다. 이 규칙을 복제된 풀에 사용해야 하는 경우
firstn이어야 하며 periodssure-coded 풀용인 경우indep여야 합니다. - 예제
-
OSD 1, 2, 3, 4, 5에 저장된 PG가 3이 됩니다. 첫 번째 시나리오에서는
firstn모드를 사용하여 1과 2를 선택한 다음 3을 선택하도록 계산을 조정하지만 3을 선택하므로 4와 5를 재시도하고 5를 선택한 다음 새 OSD 6을 선택합니다. 최종ECDHE 매핑 변경 사항은 1, 2, 3, 4, 5 에서 1, 2, 4, 5, 6 입니다. 두 번째 시나리오에서는 dissure-coded 풀에서indep모드를 사용하여 실패한 OSD 3을 선택하고 다시 시도한 후 6을 선택하여 1, 2, 3, 4, 5 에서 1, 2, 2, 6, 4, 5.
지정된 DestinationRule 규칙을 여러 풀에 할당할 수 있지만 단일 풀에 여러ECDHE 규칙이 있을 수는 없습니다.
2.7.1. FlexVolume 규칙 나열 링크 복사링크가 클립보드에 복사되었습니다!
명령줄에서 규칙 목록을 표시하려면 다음을 실행합니다.
구문
ceph osd crush rule list ceph osd crush rule ls
ceph osd crush rule list
ceph osd crush rule ls
2.7.2. ECDHE 규칙 덤프 링크 복사링크가 클립보드에 복사되었습니다!
특정 DestinationRule 규칙의 내용을 덤프하려면 다음을 실행합니다.
구문
ceph osd crush rule dump NAME
ceph osd crush rule dump NAME
2.7.3. ECDHE 규칙 추가 링크 복사링크가 클립보드에 복사되었습니다!
DestinationRule 규칙을 추가하려면 규칙 이름, 사용하려는 계층의 루트 노드, 복제할 버킷 유형(예: 'rack', 'row' 등)을 지정해야 합니다.
구문
ceph osd crush rule create-simple RUENAME ROOT BUCKET_NAME FIRSTN_OR_INDEP
ceph osd crush rule create-simple RUENAME ROOT BUCKET_NAME FIRSTN_OR_INDEP
Ceph는 chooseleaf 및 지정한 유형의 버킷을 사용하여 규칙을 생성합니다.
예제
[ceph: root@host01 /]# ceph osd crush rule create-simple deleteme default host firstn
[ceph: root@host01 /]# ceph osd crush rule create-simple deleteme default host firstn
다음 규칙을 생성합니다.
2.7.4. 복제 풀에 대한ECDHE 규칙 생성 링크 복사링크가 클립보드에 복사되었습니다!
복제된 풀에 대한 DestinationRule 규칙을 생성하려면 다음을 실행합니다.
구문
ceph osd crush rule create-replicated NAME ROOT FAILURE_DOMAIN CLASS
ceph osd crush rule create-replicated NAME ROOT FAILURE_DOMAIN CLASS
다음과 같습니다.
-
<
;name> : 규칙의 이름입니다. -
<
root> :ECDHE 계층 구조의 루트입니다. -
<failure-domain> : 실패 도메인 예:host또는rack. -
<
class>: 스토리지 장치 클래스입니다. 예:hdd또는ssd
예제
[ceph: root@host01 /]# ceph osd crush rule create-replicated fast default host ssd
[ceph: root@host01 /]# ceph osd crush rule create-replicated fast default host ssd
2.7.5. 시간대에 코딩된 풀에 대한 rules 생성 링크 복사링크가 클립보드에 복사되었습니다!
경유 코드 풀과 함께 사용하기 위해ECDHE 규칙을 추가하려면 규칙 이름과 지하 코드 프로필을 지정할 수 있습니다.
구문
ceph osd crush rule create-erasure RULE_NAME PROFILE_NAME
ceph osd crush rule create-erasure RULE_NAME PROFILE_NAME
예제
[ceph: root@host01 /]# ceph osd crush rule create-erasure default default
[ceph: root@host01 /]# ceph osd crush rule create-erasure default default
추가 리소스
- 자세한 내용은 Erasure 코드 프로필을 참조하십시오.
2.7.6. FlexVolume 규칙 제거 링크 복사링크가 클립보드에 복사되었습니다!
규칙을 제거하려면 다음을 실행하고 DestinationRule 규칙 이름을 지정합니다.
구문
ceph osd crush rule rm NAME
ceph osd crush rule rm NAME
2.8. DestinationRule 튜닝 가능 항목 개요 링크 복사링크가 클립보드에 복사되었습니다!
Ceph 프로젝트는 많은 변경 사항과 많은 새로운 기능을 통해 기하급수적으로 증가했습니다. Ceph는 상업적으로 지원되는 Ceph, v0.48(Argonaut)의 첫 번째 주요 릴리스부터 Ceph 알고리즘의 특정 매개 변수를 조정할 수 있는 기능을 제공합니다. 즉, 설정이 소스 코드에서 고정되지 않습니다.
고려해야 할 몇 가지 중요한 사항:
- DestinationRule 값을 조정하면 스토리지 노드 간에 일부 PG가 변경될 수 있습니다. Ceph 클러스터가 이미 많은 데이터를 저장하고 있는 경우 이동할 데이터의 일부에 대비하십시오.
-
ceph-osd및ceph-mon데몬이 업데이트된 맵을 수신하는 즉시 새 연결의 기능 비트가 필요합니다. 그러나 이미 연결된 클라이언트는 효과적으로 축소되어 있으며 새 기능을 지원하지 않는 경우 제대로 작동하지 않습니다. Ceph 클라이언트를 업데이트한 Ceph Storage Cluster 데몬을 업그레이드할 때 확인하십시오. -
DestinationRule 튜닝 가능 항목을 비레거시 값으로 설정한 후 나중에 레거시 값으로 다시 변경하면 기능을 지원하는 데
ceph-osd데몬이 필요하지 않습니다. 그러나 OSD 피어링 프로세스에는 이전 맵을 검사하고 이해해야 합니다. 따라서 최신 버전의 맵이 레거시 기본값을 사용하여 전환된 경우에도 클러스터가 이전에 비-레거시 look 값을 사용한 경우ceph-osd데몬의 이전 버전을 실행하지 않아야 합니다.
2.8.1. ECDHE 튜닝 링크 복사링크가 클립보드에 복사되었습니다!
FlexVolume을 튜닝하기 전에 모든 Ceph 클라이언트와 모든 Ceph 데몬이 동일한 버전을 사용하는지 확인해야 합니다. 최근에 업그레이드한 경우 데몬을 재시작하고 클라이언트를 다시 연결했는지 확인합니다.
DestinationRule 튜닝 가능 항목을 조정하는 가장 간단한 방법은 알려진 프로필로 변경하는 것입니다. 다음과 같습니다.
-
legacy: v0.47(pre-Argonaut) 및 이전 버전의 레거시 동작입니다. -
Argonaut: v0.48 (Argonaut) 릴리스에서 지원하는 레거시 값. -
dotnettail: v0.56 (Bobtail) 릴리스에서 지원하는 값입니다. -
4.6.1fly: v0.80(Firefly) 릴리스에서 지원하는 값입니다. -
Hammer: v0.94 (Hammer) 릴리스에서 지원하는 값입니다. -
jewel: v10.0.2 (Jewel) 릴리스에서 지원하는 값입니다. -
최적의값: 현재 가장 좋은 값입니다. -
Default: 새 클러스터의 현재 기본값입니다.
다음 명령을 사용하여 실행 중인 클러스터에서 프로필을 선택할 수 있습니다.
구문
ceph osd crush tunables PROFILE
# ceph osd crush tunables PROFILE
이로 인해 일부 데이터 이동이 발생할 수 있습니다.
일반적으로 업그레이드 후 또는 경고가 표시되는 경우 DestinationRule 튜닝 가능 항목을 설정해야 합니다. 버전 v0.74부터는 Ceph에서 optimal 값으로 설정되지 않은 경우 상태 경고를 발행하며 최적의 값이 v0.73부터 기본값입니다.
기존 클러스터에서 튜닝 가능 항목을 조정하여 경고를 제거할 수 있습니다. 이로 인해 일부 데이터 이동(10 % 정도)이 발생합니다. 이 경로는 기본 경로이지만 데이터 이동이 성능에 영향을 줄 수 있는 프로덕션 클러스터에서 주의해야 합니다. 다음을 사용하여 최적의 튜닝 가능 항목을 활성화할 수 있습니다.
ceph osd crush tunables optimal
ceph osd crush tunables optimal
작업이 잘못되어(예: 너무 많은 로드) 진행이 이루어지지 않았거나 클라이언트 호환성 문제가 있는 경우 (이전 커널 cephfs 또는 rbd 클라이언트 또는 pre-bobtail librados 클라이언트) 이전 프로파일로 전환할 수 있습니다.
구문
ceph osd crush tunables PROFILE
ceph osd crush tunables PROFILE
예를 들어 pre-v0.48(Argonaut) 값을 복원하려면 다음을 실행합니다.
예제
[ceph: root@host01 /]# ceph osd crush tunables legacy
[ceph: root@host01 /]# ceph osd crush tunables legacy
2.8.2. hard way, hard way 링크 복사링크가 클립보드에 복사되었습니다!
모든 클라이언트가 최근 코드를 실행하고 있는지 확인할 수 있는 경우ECDHE 맵을 추출하고, 값을 수정하고, 클러스터에 다시 삽입하여 튜닝 가능 항목을 조정할 수 있습니다.
최신ECDHE 맵을 추출합니다.
ceph osd getcrushmap -o /tmp/crush
ceph osd getcrushmap -o /tmp/crushCopy to Clipboard Copied! Toggle word wrap Toggle overflow 튜닝 가능 항목을 조정합니다. 이러한 값은 테스트한 대규모 및 소규모 클러스터에 대해 최상의 동작을 제공하는 것으로 나타납니다. 이 작업을 수행하려면
crushtool에--enable-unsafe-tunables인수를 추가로 지정해야 합니다. 이 옵션을 극단적인 방법으로 사용하십시오.:crushtool -i /tmp/crush --set-choose-local-tries 0 --set-choose-local-fallback-tries 0 --set-choose-total-tries 50 -o /tmp/crush.new
crushtool -i /tmp/crush --set-choose-local-tries 0 --set-choose-local-fallback-tries 0 --set-choose-total-tries 50 -o /tmp/crush.newCopy to Clipboard Copied! Toggle word wrap Toggle overflow 수정된 재구성 맵:
ceph osd setcrushmap -i /tmp/crush.new
ceph osd setcrushmap -i /tmp/crush.newCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.8.3. ECDHE 레거시 값 링크 복사링크가 클립보드에 복사되었습니다!
참조를 위해 DestinationRule 튜닝 가능 항목의 레거시 값을 다음을 사용하여 설정할 수 있습니다.
crushtool -i /tmp/crush --set-choose-local-tries 2 --set-choose-local-fallback-tries 5 --set-choose-total-tries 19 --set-chooseleaf-descend-once 0 --set-chooseleaf-vary-r 0 -o /tmp/crush.legacy
crushtool -i /tmp/crush --set-choose-local-tries 2 --set-choose-local-fallback-tries 5 --set-choose-total-tries 19 --set-chooseleaf-descend-once 0 --set-chooseleaf-vary-r 0 -o /tmp/crush.legacy
다시 말해 특수 --enable-unsafe-tunables 옵션이 필요합니다. 또한 위에서 언급했듯이 기능 비트가 완벽하게 적용되지 않기 때문에 기존 값으로 되돌아간 후 ceph-osd 데몬의 이전 버전을 신중하게 실행하십시오.
2.9. FlexVolume 맵 편집 링크 복사링크가 클립보드에 복사되었습니다!
일반적으로 Ceph CLI를 사용하여 런타임에 DestinationRule 맵을 수정하는 것은 FlexVolume 맵을 수동으로 편집하는 것보다 편리합니다. 그러나 기본 버킷 유형 변경 또는 straw2 이외의 버킷 알고리즘을 사용하는 등 편집할 수 있는 경우가 있습니다.
기존ECDHE 맵을 편집하려면 다음을 수행합니다.
- DestinationRule 맵을 가져옵니다.
- ECDHE 맵 제거.
- 장치 및 버킷 및 규칙을 하나 이상 편집합니다.
- ECDHE 맵을 컴파일합니다.
- DestinationRule 맵 설정.
특정 풀에 대한ECDHE 맵 규칙을 활성화하려면 공통 규칙 번호를 확인하고 풀을 생성할 때 풀의 규칙 번호를 지정합니다.
2.9.1. /etc/map 가져오기 링크 복사링크가 클립보드에 복사되었습니다!
클러스터의 DestinationRule 맵을 가져오려면 다음을 실행합니다.
구문
ceph osd getcrushmap -o COMPILED_CRUSHMAP_FILENAME
ceph osd getcrushmap -o COMPILED_CRUSHMAP_FILENAME
Ceph는 사용자가 지정한 파일 이름에 컴파일된ECDHE 맵을 출력합니다. ECDHE 맵은 컴파일된 형식이므로 편집하기 전에 먼저 컴파일해야 합니다.
2.9.2. ECDHE 맵 제거 링크 복사링크가 클립보드에 복사되었습니다!
DestinationRule 맵을 컴파일하려면 다음을 실행합니다.
구문
crushtool -d COMPILED_CRUSHMAP_FILENAME -o DECOMPILED_CRUSHMAP_FILENAME
crushtool -d COMPILED_CRUSHMAP_FILENAME -o DECOMPILED_CRUSHMAP_FILENAME
Ceph decompiles(-d) 컴파일되고 출력(-o)을 지정한 파일 이름으로 보냅니다.
2.9.3. DestinationRule 맵 설정 링크 복사링크가 클립보드에 복사되었습니다!
클러스터의 DestinationRule 맵을 설정하려면 다음을 실행합니다.
구문
ceph osd setcrushmap -i COMPILED_CRUSHMAP_FILENAME
ceph osd setcrushmap -i COMPILED_CRUSHMAP_FILENAME
Ceph는 클러스터의ECDHE 맵으로 지정한 파일 이름의 컴파일된ECDHE 맵을 입력합니다.
2.9.4. ECDHE 맵 컴파일 링크 복사링크가 클립보드에 복사되었습니다!
ECDHE 맵을 컴파일하려면 다음을 실행합니다.
구문
crushtool -c DECOMPILED_CRUSHMAP_FILENAME -o COMPILED_CRUSHMAP_FILENAME
crushtool -c DECOMPILED_CRUSHMAP_FILENAME -o COMPILED_CRUSHMAP_FILENAME
Ceph는 컴파일된ECDHE 맵을 지정한 파일 이름에 저장합니다.
2.10. ECDHE 스토리지 전략 예 링크 복사링크가 클립보드에 복사되었습니다!
대규모 하드 드라이브에서 대부분의 풀이 기본적으로 OSD를 지원하지만 솔리드 스테이트 드라이브(SSD)에 의해 지원되는 일부 풀이 있는 경우입니다. ECDHE 이러한 시나리오를 쉽게 처리할 수 있습니다.
장치 클래스를 사용합니다. 이 프로세스는 각 장치에 클래스를 추가할 수 있습니다.
구문
ceph osd crush set-device-class CLASS OSD_ID [OSD_ID]
ceph osd crush set-device-class CLASS OSD_ID [OSD_ID]
예제
[ceph:root@host01 /]# ceph osd crush set-device-class hdd osd.0 osd.1 osd.4 osd.5 [ceph:root@host01 /]# ceph osd crush set-device-class ssd osd.2 osd.3 osd.6 osd.7
[ceph:root@host01 /]# ceph osd crush set-device-class hdd osd.0 osd.1 osd.4 osd.5
[ceph:root@host01 /]# ceph osd crush set-device-class ssd osd.2 osd.3 osd.6 osd.7
그런 다음 장치를 사용할 규칙을 만듭니다.
구문
ceph osd crush rule create-replicated RULENAME ROOT FAILURE_DOMAIN_TYPE DEVICE_CLASS
ceph osd crush rule create-replicated RULENAME ROOT FAILURE_DOMAIN_TYPE DEVICE_CLASS
예제
[ceph:root@host01 /]# ceph osd crush rule create-replicated cold default host hdd [ceph:root@host01 /]# ceph osd crush rule create-replicated hot default host ssd
[ceph:root@host01 /]# ceph osd crush rule create-replicated cold default host hdd
[ceph:root@host01 /]# ceph osd crush rule create-replicated hot default host ssd
마지막으로 규칙을 사용하도록 pool을 설정합니다.
구문
ceph osd pool set POOL_NAME crush_rule RULENAME
ceph osd pool set POOL_NAME crush_rule RULENAME
예제
[ceph:root@host01 /]# ceph osd pool set cold crush_rule hdd [ceph:root@host01 /]# ceph osd pool set hot crush_rule ssd
[ceph:root@host01 /]# ceph osd pool set cold crush_rule hdd
[ceph:root@host01 /]# ceph osd pool set hot crush_rule ssd
하나의 계층에서 여러 장치 클래스를 제공할 수 있기 때문에 FlexVolume 맵을 수동으로 편집할 필요가 없습니다.
3장. 배치 그룹 링크 복사링크가 클립보드에 복사되었습니다!
PG(배치 그룹)는 Ceph 클라이언트에 표시되지 않지만 Ceph Storage 클러스터에서 중요한 역할을 합니다.
Ceph Storage 클러스터에는 엑사바이트 수준의 스토리지 용량에 도달하기 위해 수천 개의 OSD가 필요할 수 있습니다. Ceph 클라이언트는 전체 클러스터의 논리적 하위 집합인 풀에 오브젝트를 저장합니다. 풀에 저장된 오브젝트 수를 수백만 및 그 이상으로 쉽게 실행할 수 있습니다. 수백만 개의 객체 이상을 가진 시스템은 사실적으로 객체별로 배치를 추적 할 수 없으며 여전히 잘 작동합니다. Ceph는 배치 그룹에 오브젝트를 할당하고, 배치 그룹을 OSD에 할당하여 동적이고 효율적으로 재조정할 수 있습니다.
컴퓨터 과학의 모든 문제는 너무 많은 간접적 인 문제를 제외하고 다른 수준의 간접적 인 방법으로 해결할 수 있습니다. | ||
| -- David Wheeler | ||
3.1. 배치 그룹 정보 링크 복사링크가 클립보드에 복사되었습니다!
풀 내에서 오브젝트 배치를 추적하는 것은 규모에 따라 비용이 많이 듭니다. Ceph는 대규모의 고성능을 배치 그룹으로 분류하고, 각 개별 오브젝트를 배치 그룹에 할당하고, 배치 그룹을 기본 OSD에 할당합니다. OSD가 실패하거나 클러스터를 재조정하는 경우 Ceph는 각 오브젝트를 개별적으로 처리하지 않고도 전체 배치 그룹(즉, 배치 그룹의 모든 오브젝트)을 이동하거나 복제할 수 있습니다. 이를 통해 Ceph 클러스터에서 효율적으로 재조정하거나 복구할 수 있습니다.
DestinationRule이 OSD에 배치 그룹을 할당하는 경우 일련의 OSD를 계산합니다. 첫 번째는 기본입니다. osd_pool_default_size 설정 - 복제된 풀의 경우 1 개, timessure-coded 풀에 대한 코딩 청크 수에 따라 데이터가 영구적으로 손실되지 않고 실패할 수 있는 배치 그룹을 저장하는 OSD 수가 결정됩니다. 기본 OSD는ECDHE을 사용하여 보조 OSD를 식별하고 배치 그룹의 콘텐츠를 보조 OSD에 복사합니다. 예를 들어, DestinationRule이 배치 그룹에 개체를 할당하고 배치 그룹이 OSD 5에 할당되는 경우 primary OSD 1 및 OSD 8이 배치 그룹의 보조 OSD인 경우 기본 OSD 5는 데이터를 OSD 1 및 8에 복사합니다. Ceph는 클라이언트를 대신하여 데이터를 복사하여 클라이언트 인터페이스를 단순화하고 클라이언트 워크로드를 줄입니다. 동일한 프로세스를 통해 Ceph 클러스터가 동적으로 복구 및 재조정할 수 있습니다.
기본 OSD가 실패하고 클러스터에서 표시되지 않으면 DestinationRule은 배치 그룹을 배치 그룹의 오브젝트 복사본을 수신하는 다른 OSD에 할당합니다. Up Set 의 다른 OSD에서는 기본 OSD의 역할을 가정합니다.
오브젝트 복제본 또는 코딩 청크 수를 늘리면ECDHE은 필요에 따라 각 배치 그룹을 추가 OSD에 할당합니다.
PGS는 OSD를 소유하지 않습니다. DestinationRule은 각 OSD에 무작위로 많은 배치 그룹을 할당하여 데이터가 클러스터 전체에 균등하게 분배되도록 합니다.
3.2. 배치 그룹 상태 링크 복사링크가 클립보드에 복사되었습니다!
ceph -s 또는 ceph -w 명령을 사용하여 스토리지 클러스터 상태를 확인하는 경우 Ceph는 PG(배치 그룹)의 상태를 보고합니다. PG에는 하나 이상의 상태가 있습니다. PG 맵의 PG의 상태가 active + clean 상태입니다.
- 활성화
- PG는 피어 있지만 아직 활성화되지 않았습니다.
- 활성 상태
- Ceph는 PG에 대한 요청을 처리합니다.
- backfill_toofull
- 대상 OSD가 백필션 비율을 초과하고 있기 때문에 백필 작업이 대기 중입니다.
- backfill_unfound
- unfound 개체로 인해 백필이 중지되었습니다.
- backfill_wait
- PG는 백필을 시작하기 위해 라인으로 대기 중입니다.
- Backfilling
- Ceph는 최근 작업 로그에서 콘텐츠를 동기화하는 대신 PG의 전체 콘텐츠를 스캔하고 동기화합니다. 백필은 복구의 특별한 경우입니다.
- clean
- Ceph는 PG의 모든 오브젝트를 정확하게 복제했습니다.
- 생성
- Ceph는 여전히 PG를 만들고 있습니다.
- deep
- Ceph는 저장된 체크섬에 대해 PG 데이터를 확인하고 있습니다.
- Degraded
- Ceph에서 PG의 일부 오브젝트를 정확하게 복제하지 않았습니다.
- down
-
필요한 데이터가 있는 복제본이 다운되므로 PG가 오프라인 상태입니다.
min_size복제본보다 적은 PG가 down으로 표시됩니다.ceph 상태 세부 정보를사용하여 백업 OSD 상태를 파악합니다. - forced_backfill
- 해당 PG의 높은 백필 우선 순위는 사용자가 강제 적용합니다.
- forced_recovery
- 해당 PG의 높은 복구 우선 순위는 사용자가 강제 적용합니다.
- 미완성
-
Ceph는 PG가 발생했을 수 있거나 정상적인 사본이 없는 쓰기에 대한 정보가 누락되어 있음을 감지합니다. 이 상태가 표시되면 필요한 정보가 포함될 수 있는 실패한 OSD를 시작해 보십시오. 삭제 코드 풀의 경우 임시로
min_size를 줄이면 복구를 허용할 수 있습니다. - 일치하지 않음
- Ceph는 PG에 있는 오브젝트의 하나 이상의 복제본에서 잘못된 크기(예: 오브젝트 크기)에서 불일치를 감지하며 복구 완료 후 하나의 복제본에서 오브젝트가 누락됩니다.
- 피어링
- PG는 피어링 프로세스를 진행 중입니다. 피어링 프로세스는 지연 없이 지워야 하지만, 피어링 상태의 PG 수와 피어링 상태의 PG 수가 감소하지 않으면 피어링이 정지될 수 있습니다.
- peered
-
PG는 피어되었지만 풀의 구성된
min_size매개변수에 도달하기에 충분한 복사본이 없기 때문에 클라이언트 IO를 제공할 수 없습니다. 이 상태에서 복구가 발생할 수 있으므로 PG는 결국min_size까지 유지될 수 있습니다. - 복구
- Ceph는 오브젝트와 해당 복제본을 마이그레이션하거나 동기화하고 있습니다.
- recovery_toofull
- 대상 OSD가 전체 비율보다 높기 때문에 복구 작업이 대기 중입니다.
- recovery_unfound
- unfound 개체로 인해 복구가 중지되었습니다.
- recovery_wait
- PG는 회복을 시작하기 위해 대기 중입니다.
- remapped
- PG는 IRQ가 지정한 것과 다른 OSD 세트에 일시적으로 매핑됩니다.
- 복구
- 가능한 경우 Ceph가 PG를 확인하고 불일치를 복구하고 있습니다.
- Replay
- PG는 OSD가 충돌한 후 클라이언트가 작업을 재생하도록 대기 중입니다.
- snaptrim
- 스냅 샷 트리밍.
- snaptrim_error
- 스냅 샷을 정리하는 동안 오류가 발생했습니다.
- snaptrim_wait
- 스냅을 트리밍하기 위해 대기했습니다.
- 스크럽
- Ceph가 PG 메타데이터에서 불일치를 확인하고 있습니다.
- 분할
- Ceph는 PG를 여러 PG로 분할하고 있습니다.
- 오래된
- PG는 알 수 없음 상태입니다. PG 매핑이 변경된 이후 모니터는 업데이트를 받지 못했습니다.
- undersized
- PG의 복사본이 구성된 풀 복제 수준보다 적은 수입니다.
- 알 수 없음
-
Ceph Manager가 시작된 후
ceph-mgr에서 OSD에서 PG 상태에 대한 정보를 아직 수신하지 못했습니다.
추가 리소스
- 자세한 내용은 지식 기반 Ceph 클러스터에서 가능한 배치 그룹 상태는 무엇입니까.
3.3. 배치 그룹 tradeoffs 링크 복사링크가 클립보드에 복사되었습니다!
모든 OSD 간에 데이터 및 데이터 배포는 더 많은 배치 그룹을 요구하지만 CPU 및 메모리 리소스를 절약하기 위해 최대 성능을 위해 필요한 최소 수로 줄여야 합니다.
3.3.1. 데이터 링크 복사링크가 클립보드에 복사되었습니다!
Ceph는 영구 데이터 손실을 방지하기 위해 노력합니다. 그러나 OSD에 오류가 발생하면 기존 데이터가 완전히 복구될 때까지 영구 데이터 손실 위험이 증가합니다. 영구 데이터 손실은 드물지만 여전히 가능합니다. 다음 시나리오에서는 Ceph가 세 개의 데이터 사본이 있는 단일 배치 그룹에서 데이터를 영구적으로 손실할 수 있는 방법을 설명합니다.
- OSD가 실패하고 포함된 오브젝트의 모든 복사본이 손실됩니다. OSD에 저장된 배치 그룹 내의 모든 오브젝트의 경우 복제본 수는 3개에서 2개로 떨어집니다.
- 새 OSD를 선택하여 각 배치 그룹에 대해 모든 개체의 세 번째 복사본을 다시 만들어 실패한 OSD에 저장된 각 배치 그룹에 대해 복구를 시작합니다.
- 새 OSD를 세 번째 사본으로 완전히 채우기 전에 동일한 배치 그룹의 사본을 포함하는 두 번째 OSD는 실패합니다. 그러면 일부 오브젝트에는 남은 사본이 하나만 있습니다.
- Ceph는 또 다른 OSD를 선택하고 오브젝트를 복사하여 원하는 개수의 복사본을 복원합니다.
- 복구 완료 전에 동일한 배치 그룹의 사본을 포함하는 세 번째 OSD 이 OSD에 개체의 나머지 사본만 포함된 경우 오브젝트가 영구적으로 손실됩니다.
하드웨어 오류도 예외가 아니라 예상입니다. 상장된 시나리오를 방지하기 위해, 이상적으로 복구 프로세스는 가능한 한 신속하게 실행해야합니다. 클러스터 크기, 하드웨어 구성 및 배치 그룹 수는 전체 복구 시간에 중요한 역할을 합니다.
소규모 클러스터는 빠르게 복구되지 않습니다.
3개의 복제본 풀에 512개의 배치 그룹이 있는 OSD 10개가 포함된 클러스터에서 DestinationRule은 각 배치 그룹에 3개의 OSD를 제공합니다. 각 OSD는 호스팅 (512 * 3) / 10 = ~150 배치 그룹이 됩니다. 첫 번째 OSD가 실패하면 150개의 모든 배치 그룹에 대해 클러스터가 동시에 복구를 시작합니다.
Ceph는 나머지 9개의 OSD에서 나머지 150개의 배치 그룹을 무작위로 저장할 수 있습니다. 따라서 나머지 각 OSD는 다른 모든 OSD에 오브젝트 사본을 보낼 수 있으며, 나머지 OSD는 현재 할당된 150개의 배치 그룹 중 일부에 대한 책임이 있기 때문에 새 오브젝트도 수신할 수 있습니다.
총 복구 시간은 풀을 지원하는 하드웨어에 따라 다릅니다. 예를 들어 10개의 OSD 클러스터에서 호스트에 1TB SSD가 있는 하나의 OSD가 있고 10GB/s 스위치가 10개의 호스트 각각을 연결하는 경우 복구 시간이 M 분 정도 걸립니다. 반면 호스트에 두 개의 SATA OSD가 있고 1GB/s 스위치가 5개의 호스트를 연결하는 경우 복구 시간이 훨씬 더 오래 걸립니다. 이 크기의 클러스터에서는 배치 그룹의 수가 데이터에 거의 영향을 미치지 않습니다. 배치 그룹 수는 128 또는 8192일 수 있으며 복구 속도가 느릴 수 없습니다.
그러나 10개의 OSD 대신 동일한 Ceph 클러스터를 20개의 OSD로 늘리면 복구 속도를 높이고 데이터 성능을 크게 향상시킬 수 있습니다. 이유가 무엇입니까? 각 OSD는 이제 150개 대신 75개의 배치 그룹에만 참여합니다. 20개의 OSD 클러스터에는 복구하기 위해 동일한 양의 복사 작업을 수행하려면 여전히 19개의 나머지 OSD가 필요합니다. 10개의 OSD 클러스터에서 각 OSD는 약 100GB를 복사해야 했습니다. 20개의 OSD 클러스터에서 각 OSD는 각각 50GB만 복사해야 합니다. 네트워크가 병목 현상인 경우 복구가 두 배 빠르게 수행됩니다. 즉, OSD 수가 증가함에 따라 복구 시간이 감소합니다.
대규모 클러스터에서 PG 수가 중요합니다.
예시적인 클러스터가 40개의 OSD로 증가하면 각 OSD는 35개의 배치 그룹만 호스팅합니다. OSD가 종료되면 다른 병목 현상이 발생하지 않는 한 복구 시간이 줄어듭니다. 그러나 이 클러스터가 200개의 OSD로 증가하면 각 OSD는 약 7개의 배치 그룹만 호스팅합니다. OSD가 종료되면 대부분의 21 (7 * 3) OSD에서 복구가 수행됩니다. OSD 가 40개 이상인 경우 복구에 시간이 오래 걸립니다. 즉, 배치 그룹 수가 증가해야 합니다.
복구 시간이 얼마나 짧더라도 복구가 진행되는 동안 배치 그룹을 저장하는 다른 OSD가 실패할 가능성이 있습니다.
위에서 설명한 10개의 OSD 클러스터에서는 OSD가 실패하는 경우 약 8개의 배치 그룹(즉, 75 pgs / 9 osds 가 복구됨)에 남아 있는 사본만 있습니다. 남아 있는 8개의 OSD 중 하나라도 실패하면 하나의 배치 그룹의 마지막 오브젝트가 손실될 수 있습니다(즉, 남은 사본이 한 개만 있는 8 pgs / 8 osds ). 따라서 다소 큰 클러스터로 시작하는 것이 좋습니다(예: 50개의 OSD).
클러스터 크기가 20개의 OSD로 증가하면 3개의 OSD가 손실되어 발생한 배치 그룹 수가 감소합니다. 손실된 두 번째 OSD는 약 2개(즉, 35개의 pgs / 19 osds 가 복구됨) 대신 성능이 저하되고 세 번째 OSD는 보존된 사본이 포함된 두 개의 OSD 중 하나인 경우에만 데이터가 손실됩니다. 즉, 복구 기간 동안 하나의 OSD를 손실할 가능성이 0.0001% 인 경우 OSD 10개가 있는 클러스터의 8 * 0.0001% 에서 20 개의 OSD가 있는 클러스터에서 0.0001% 로 이동합니다. 512 또는 4096 배치 그룹이 있으면 데이터와 관련된 한 50개 미만의 OSD가 있는 클러스터에서 거의 동일합니다.
간단히 말해, 더 많은 OSD를 사용하면 복구 속도가 빨라지고 단계적 실패 위험이 감소하여 배치 그룹과 해당 오브젝트가 영구적으로 손실될 수 있습니다.
OSD를 클러스터에 추가하면 새 OSD를 배치 그룹 및 오브젝트로 채우는 데 시간이 오래 걸릴 수 있습니다. 그러나 개체의 저하는 없으며 OSD를 추가하면 데이터에 영향을 미치지 않습니다.
3.3.2. 데이터 배포 링크 복사링크가 클립보드에 복사되었습니다!
Ceph는 핫스팟(즉, 일부 OSD)은 다른 OSD보다 훨씬 더 많은 트래픽을 수신합니다. 이상적으로는 배치 그룹이 OSD에 할당될 때(또한 의사 무작위로) 배치 그룹에 개체를 할당하는 것이 좋습니다. 기본 OSD는 클러스터 전체에 균등하게 분산되도록 오브젝트를 저장하고 데이터 배포로 인해 네트워크 초과 문제가 발생할 수 없습니다.
FlexVolume은 각 개체의 배치 그룹을 계산하지만 이 배치 그룹 내의 각 OSD에 저장된 데이터 양을 알 수 없으므로 배치 그룹 수와 OSD 수 간의 비율은 데이터 배포에 크게 영향을 미칠 수 있습니다.
예를 들어 복제본 풀에 10개의 OSD가 있는 배치 그룹만 있는 경우 Ceph는 다른 선택 사항이 없기 때문에 OSD 3개만 사용하여 데이터를 저장합니다. 더 많은 배치 그룹을 사용할 수 있는 경우ECDHE은 OSD 전체에 개체를 균등하게 분배할 수 있습니다. 또한 DestinationRule은 OSD에 배치 그룹을 균등하게 할당합니다.
OSD보다 배치 그룹이 하나 또는 두 개 이상인 한 두 개의 순서가 있어야 합니다. 예를 들어 OSD 3개를 위한 256개의 배치 그룹, 10개의 OSD용 512 또는 1024 배치 그룹 등이 있습니다.
OSD와 배치 그룹의 비율은 일반적으로 오브젝트 스트라이핑과 같은 고급 기능을 구현하는 Ceph 클라이언트에 대한 짝수 없는 데이터 배포 문제를 해결합니다. 예를 들어 4TB 블록 장치는 최대 4MB의 오브젝트를 분할할 수 있습니다.
OSD와 배치 그룹 간의 비율은 다른 경우에는 개체 크기를 고려하지 않기 때문에 짝수 데이터 배포를 처리하지 않습니다. librados 인터페이스를 사용하여 일부 상대적으로 작은 오브젝트를 저장하고 일부 매우 큰 오브젝트를 사용하면 데이터가 균등하게 배포될 수 있습니다. 예를 들어 총 4GB의 1억 4K 개체는 10개의 OSD에서 1000개의 배치 그룹에 균등하게 분배됩니다. 각 OSD에서 4GB/10 = 400MB 를 사용합니다. 400MB 오브젝트가 풀에 추가되는 경우 오브젝트가 배치된 배치 그룹을 지원하는 3개의 OSD는 400MB + 400MB = 800MB 로 채워지며 나머지 7개의 OSD는 400MB로만 사용됩니다.
3.3.3. 리소스 사용량 링크 복사링크가 클립보드에 복사되었습니다!
각 배치 그룹의 경우 OSD 및 Ceph 모니터에는 항상 메모리, 네트워크 및 CPU가 필요하며 복구 중에도 더 많이 필요합니다. 배치 그룹 내에서 오브젝트를 클러스터링하여 이 오버헤드를 공유하는 것은 배치 그룹이 존재하는 주요 이유 중 하나입니다.
배치 그룹 수를 최소화하면 상당한 양의 리소스를 절약할 수 있습니다.
3.4. 배치 그룹 수 링크 복사링크가 클립보드에 복사되었습니다!
풀의 배치 그룹 수는 클러스터 피어링, 데이터 배포 및 재조정 방법에 중요한 역할을 합니다. 소규모 클러스터에서는 배치 그룹 수를 늘려 대규모 클러스터에 비해 성능 개선이 많지 않습니다. 그러나 동일한 OSD에 액세스하는 풀이 많은 클러스터는 Ceph OSD에서 리소스를 효율적으로 사용하도록 PG 수를 신중하게 고려해야 할 수 있습니다.
Red Hat은 OSD당 100개에서 200개의 PG를 권장합니다.
3.4.1. 배치 그룹 계산기 링크 복사링크가 클립보드에 복사되었습니다!
PG(배치 그룹) 계산기는 특정 사용 사례를 처리하는 배치 그룹 수를 계산합니다. PG 계산기는 Ceph Object Gateway와 같은 Ceph 클라이언트를 사용하는 경우 특히 유용하며 일반적으로 동일한 규칙(CRUSH 계층 구조)을 사용하는 풀이 있습니다. 소규모 클러스터의 배치 그룹 수 및 배치 그룹 수 계산에 있는 지침을 사용하여 PG를 수동으로 계산할 수 있습니다. 그러나 PG 계산기는 PG를 계산하는 데 선호되는 방법입니다.
자세한 내용은 Red Hat 고객 포털 의 풀 계산기당 Ceph PG(배치 그룹) 를 참조하십시오.
3.4.2. 기본 배치 그룹 수 구성 링크 복사링크가 클립보드에 복사되었습니다!
풀을 생성할 때 풀에 사용할 여러 배치 그룹도 생성합니다. 배치 그룹 수를 지정하지 않으면 Ceph는 기본값 8 을 사용하며 이는 허용되지 않을 수 있습니다. 풀의 배치 그룹 수는 늘릴 수 있지만 적절한 기본값도 설정하는 것이 좋습니다.
osd pool default pg num = 100 osd pool default pgp num = 100
osd pool default pg num = 100
osd pool default pgp num = 100
배치 그룹(total)과 오브젝트에 사용되는 배치 그룹 수(PG 분할에 사용됨)를 모두 설정해야 합니다. 이 둘은 동등해야 합니다.
3.4.3. 소규모 클러스터의 배치 그룹 수 링크 복사링크가 클립보드에 복사되었습니다!
소규모 클러스터는 많은 배치 그룹의 이점을 얻지 못합니다. OSD 수가 증가함에 따라 pg_num 및 pgp_num 에 대한 올바른 값을 선택하는 것이 클러스터의 동작에 중요한 영향을 미치고 문제가 발생할 때 데이터 확보에 큰 영향을 미치므로 더 중요합니다(즉, 심각한 이벤트가 데이터 손실을 초래할 가능성이 있음). 작은 클러스터가 있는 PG 계산기 를 사용하는 것이 중요합니다.
3.4.4. 배치 그룹 수 계산 링크 복사링크가 클립보드에 복사되었습니다!
50개 이상의 OSD가 있는 경우 리소스 사용량, 데이터 배포 및 배포 균형을 유지하기 위해 OSD당 약 50~100개의 배치 그룹을 사용하는 것이 좋습니다. OSD가 50개 미만인 경우 소규모 클러스터의 PG 개수 중에서 선택하는 것이 이상적입니다. 단일 개체 풀의 경우 다음 공식을 사용하여 기준을 가져올 수 있습니다.
(OSDs * 100)
Total PGs = ------------
pool size
(OSDs * 100)
Total PGs = ------------
pool size
여기서 풀 크기는 복제된 풀의 복제본 수 또는 경유 코딩 풀의 K+M 합계입니다( ceph osdperiodsure-code-profile get에 의해 반환됨).
그런 다음 Ceph 클러스터를 설계하여 데이터 배포, 데이터 배포를 극대화하고 리소스 사용량을 최소화할 수 있는 결과가 적합한지 확인해야 합니다.
결과는 두 가지의 가장 가까운 출력으로 반올림되어야 합니다. 반올림은 선택 사항이지만 placement groups 간에 오브젝트 수의 균형을 균등하게 조정하는 것이 좋습니다.
200개의 OSD가 있고 복제본 풀 크기가 3개인 클러스터의 경우 다음과 같이 PG 수를 추정합니다.
(200 * 100)
----------- = 6667. Nearest power of 2: 8192
3
(200 * 100)
----------- = 6667. Nearest power of 2: 8192
3
200개의 OSD에 걸쳐 8192개의 배치 그룹이 배포되어 OSD당 약 41개의 배치 그룹으로 평가됩니다. 또한 각 풀이 배치 그룹을 생성하므로 클러스터에서 사용할 풀 수를 고려해야 합니다. 적절한 최대 배치 그룹 수가 있는지 확인합니다.
3.4.5. 최대 배치 그룹 수 링크 복사링크가 클립보드에 복사되었습니다!
오브젝트 저장을 위해 여러 데이터 풀을 사용하는 경우, 적절한 총 배치 그룹에 도달할 수 있도록 풀당 배치 그룹 수와 OSD당 배치 그룹 수의 균형을 조정해야 합니다. 시스템 리소스를 부과하거나 피어링 프로세스의 속도가 너무 느려지지 않도록 OSD당 분산을 적절히 낮추는 것이 목표입니다.
10개의 풀로 구성된 예시적인 Ceph Storage 클러스터에서는 10개의 OSD에서 512개의 배치 그룹이 있는 풀로 구성된 총 5,120개의 배치 그룹이 10개의 OSD 또는 OSD당 512개의 배치 그룹이 있습니다. 하드웨어 구성에 따라 리소스가 너무 많이 사용되지 않을 수 있습니다. 반면, 512개의 배치 그룹이 포함된 풀을 각각 생성하는 경우 OSD는 각각 ~50,000개의 배치 그룹을 처리하고 더 많은 리소스가 필요합니다. OSD당 너무 많은 배치 그룹으로 작동하면 특히 재조정 또는 복구 중에 성능이 크게 저하될 수 있습니다.
Ceph Storage Cluster에는 OSD당 기본 최대 배치 그룹이 300개입니다. Ceph 구성 파일에서 다른 최대값을 설정할 수 있습니다.
mon pg warn max per osd
mon pg warn max per osd
Ceph Object Gateway는 10-15개의 풀로 배포되므로 OSD당 100개 미만의 PG를 사용하여 적절한 수에 도달하는 것이 좋습니다.
3.5. 자동 확장 배치 그룹 링크 복사링크가 클립보드에 복사되었습니다!
풀의 PG(배치 그룹) 수는 클러스터 피어링, 데이터를 배포 및 재조정하는 방법에 중요한 역할을 합니다.
PG 수를 자동 확장하여 클러스터를 더 쉽게 관리할 수 있습니다. pg-autoscaling 명령은 PG를 스케일링하기 위한 권장 사항을 제공하거나 클러스터 사용 방법에 따라 PG를 자동으로 스케일링합니다.
- 자동 확장 작동 방법에 대한 자세한 내용은 3.5.1절. “배치 그룹 자동 확장” 을 참조하십시오.
- 자동 확장을 활성화하거나 비활성화하려면 3.5.3절. “배치 그룹 자동 확장 모드 설정” 을 참조하십시오.
- 배치 그룹 스케일링 권장 사항을 보려면 3.5.4절. “배치 그룹 스케일링 권장 사항 보기” 을 참조하십시오.
- 배치 그룹 자동 스케일링을 설정하려면 3.5.5절. “배치 그룹 자동 확장 설정” 을 참조하십시오.
-
자동 스케일러를 전역적으로 업데이트하려면 다음을 참조하십시오. 3.5.6절. “
noautoscale플래그 업데이트” - 대상 풀 크기를 설정하려면 3.6절. “대상 풀 크기 지정” 을 참조하십시오.
3.5.1. 배치 그룹 자동 확장 링크 복사링크가 클립보드에 복사되었습니다!
Auto-scaler의 작동 방식
자동 확장기에서는 풀을 분석하고 하위 트리별로 조정합니다. 각 풀은 서로 다른 rule에 매핑될 수 있으며 각 규칙이 서로 다른 장치에 데이터를 배포할 수 있으므로 Ceph는 계층 구조의 각 하위 트리의 사용률을 독립적으로 고려합니다. 예를 들어 클래스 ssd 의 OSD에 매핑되는 풀과 클래스 hdd 의 OSD에 매핑되는 풀은 각 장치 유형의 수에 따라 최적의 PG 개수를 갖습니다.
3.5.2. 배치 그룹 분할 및 병합 링크 복사링크가 클립보드에 복사되었습니다!
분할
Red Hat Ceph Storage는 기존 배치 그룹(PG)을 작은 PG로 분할할 수 있으므로 지정된 풀의 총 PG 수를 늘립니다. 기존 배치 그룹(PG)을 분할하면 스토리지 요구 사항이 증가함에 따라 소규모 Red Hat Ceph Storage 클러스터를 시간이 지남에 따라 확장할 수 있습니다. PG 자동 확장 기능은 pg_num 값을 늘릴 수 있으므로 스토리지 클러스터가 확장되면 기존 PG가 분할됩니다. PG 자동 확장 기능이 비활성화된 경우 pg_num 값을 수동으로 늘릴 수 있으므로 PG 분할 프로세스가 시작됩니다. 예를 들어 pg_num 값을 4 에서 16 으로 늘리면 4개의 조각으로 나뉩니다. pg_num 값을 늘리면 pgp_num 값도 증가하지만, 점진적으로 pgp_num 값이 증가합니다. 개체 데이터를 마이그레이션하면 시스템에 상당한 로드가 추가되기 때문에 스토리지 클러스터의 성능과 클라이언트 워크로드에 미치는 영향을 최소화하기 위해 이러한 점차 증가가 수행됩니다. 기본적으로 Ceph 대기열 및 는 "미플레이" 상태의 오브젝트 데이터의 5%를 초과하지 않습니다. 이 기본 백분율은 target_max_misplaced_ratio 옵션을 사용하여 조정할 수 있습니다.
병합
Red Hat Ceph Storage는 두 개의 기존 PG를 더 큰 PG로 병합하여 총 PG 수를 줄입니다. 두 PG를 함께 병합하면 특히 풀의 상대적 개체가 시간이 지남에 따라 감소하거나 선택한 PG의 초기 수가 너무 큰 경우 유용할 수 있습니다. PG를 병합하는 것은 유용할 수 있지만 복잡하고 민감한 과정이기도 합니다. 병합을 수행할 때 PG에 I/O를 일시 중지하면 한 번에 하나의 PG만 병합되어 스토리지 클러스터의 성능에 미치는 영향을 최소화합니다. 새 pg_num 값에 도달할 때까지 오브젝트 데이터를 병합하는 과정에서 Ceph가 느리게 작동합니다.
3.5.3. 배치 그룹 자동 확장 모드 설정 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat Ceph Storage 클러스터의 각 풀에는 PG에 대한 pg_autoscale_mode 속성이 있으며, , 또는 경고를 해제 하도록 설정할 수 있습니다.
-
off: 풀에 대해 자동 확장을 비활성화합니다. 관리자는 각 풀에 적절한 PG 번호를 선택합니다. 자세한 내용은 배치 그룹 수 섹션을 참조하십시오. -
On: 지정된 풀에 PG 수를 자동으로 조정할 수 있습니다. -
경고: PG 수가 조정되어야 할 때 상태 경고를 발생시킵니다.
Red Hat Ceph Storage 5 이상 릴리스에서 pg_autoscale_mode 는 기본적으로 켜져 있습니다. 업그레이드된 스토리지 클러스터는 기존 pg_autoscale_mode 설정을 유지합니다. 새로 생성된 풀의 pg_auto_scale 모드가 켜져 있습니다. PG 수가 자동으로 조정되고 ceph 상태가 PG 수가 조정되는 동안 복구 상태가 표시될 수 있습니다.
자동 스케일러는 대규모 플래그를 사용하여 PG를 완전히 보완하여 시작해야 하는 풀을 결정하고 풀 전체의 사용량 비율도 그렇지 않은 경우에만 축소됩니다. 그러나 풀에 대규모 플래그가 없는 경우 풀은 최소한의 PG로 시작하고 풀에 더 많은 사용량이 있을 때만 풀이 시작됩니다.
자동 스케일러는 겹치는 루트를 식별하고 이러한 루트가 있는 풀을 스케일링하지 못하도록 합니다. 중복되는 루트는 확장 프로세스에 문제가 발생할 수 있기 때문입니다.
절차
기존 풀에서 자동 확장을 활성화합니다.
구문
ceph osd pool set POOL_NAME pg_autoscale_mode on
ceph osd pool set POOL_NAME pg_autoscale_mode onCopy to Clipboard Copied! Toggle word wrap Toggle overflow 예제
[ceph: root@host01 /]# ceph osd pool set testpool pg_autoscale_mode on
[ceph: root@host01 /]# ceph osd pool set testpool pg_autoscale_mode onCopy to Clipboard Copied! Toggle word wrap Toggle overflow 새로 생성된 풀에서 자동 확장을 활성화합니다.
구문
ceph config set global osd_pool_default_pg_autoscale_mode MODE
ceph config set global osd_pool_default_pg_autoscale_mode MODECopy to Clipboard Copied! Toggle word wrap Toggle overflow 예제
[ceph: root@host01 /]# ceph config set global osd_pool_default_pg_autoscale_mode on
[ceph: root@host01 /]# ceph config set global osd_pool_default_pg_autoscale_mode onCopy to Clipboard Copied! Toggle word wrap Toggle overflow 대규모 플래그를 사용하여
풀을생성합니다.구문
ceph osd pool create POOL_NAME --bulk
ceph osd pool create POOL_NAME --bulkCopy to Clipboard Copied! Toggle word wrap Toggle overflow 예제
[ceph: root@host01 /]# ceph osd pool create testpool --bulk
[ceph: root@host01 /]# ceph osd pool create testpool --bulkCopy to Clipboard Copied! Toggle word wrap Toggle overflow 기존 풀의 대규모
플래그를 설정하거나 설정 해제합니다.중요값은
true,false,1또는0으로 작성되어야 합니다.1은true와 같고0은false와 동일합니다. 다른 대문자로 작성하거나 다른 콘텐츠로 작성된 경우 오류가 발생합니다.다음은 잘못된 구문으로 작성된 명령의 예입니다.
[ceph: root@host01 /]# ceph osd pool set ec_pool_overwrite bulk True Error EINVAL: expecting value 'true', 'false', '0', or '1'
[ceph: root@host01 /]# ceph osd pool set ec_pool_overwrite bulk True Error EINVAL: expecting value 'true', 'false', '0', or '1'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 구문
ceph osd pool set POOL_NAME bulk true/false/1/0
ceph osd pool set POOL_NAME bulk true/false/1/0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예제
[ceph: root@host01 /]# ceph osd pool set testpool bulk true
[ceph: root@host01 /]# ceph osd pool set testpool bulk trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 기존 풀
의대규모 플래그를 가져옵니다.구문
ceph osd pool get POOL_NAME bulk
ceph osd pool get POOL_NAME bulkCopy to Clipboard Copied! Toggle word wrap Toggle overflow 예제
[ceph: root@host01 /]# ceph osd pool get testpool bulk bulk: true
[ceph: root@host01 /]# ceph osd pool get testpool bulk bulk: trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.5.4. 배치 그룹 스케일링 권장 사항 보기 링크 복사링크가 클립보드에 복사되었습니다!
풀, 상대 사용률 및 스토리지 클러스터에서 PG 수에 대한 제안된 변경 사항을 볼 수 있습니다.
사전 요구 사항
- 실행 중인 Red Hat Ceph Storage 클러스터
- 모든 노드에 대한 루트 수준 액세스.
절차
다음을 사용하여 각 풀, 상대 사용률 및 PG 수에 권장되는 모든 변경 사항을 볼 수 있습니다.
[ceph: root@host01 /]# ceph osd pool autoscale-status
[ceph: root@host01 /]# ceph osd pool autoscale-statusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력은 다음과 유사합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
크기 조정은 풀에 저장된 데이터 양입니다.
TARGET 크기 (있는 경우)는 관리자가 지정한 데이터 양입니다. 시스템은 두 값 중 더 큰 계산을 사용합니다.
RATE 는 풀에서 사용하는 원시 스토리지 용량의 양을 결정하는 풀의 곱셈입니다. 예를 들어 3 개의 복제본 풀은 3.0 의 비율을 가지며 k=4,m=2 dissure 코딩된 풀은 1.5 의 비율을 갖습니다.
RAW CAPACITY 는 풀의 데이터를 저장하는 OSD의 총 원시 스토리지 용량입니다.
RATIO 는 풀이 사용하는 총 용량의 비율입니다. 즉, ratio = size * rate / raw capacity입니다.
TARGET RATIO (있는 경우 TARGET RATIO)는 관리자가 대상 비율이 설정된 다른 풀과 상대적으로 풀이 소비되도록 지정한 스토리지 비율입니다. 대상 크기 바이트와 비율을 모두 지정하면 비율이 우선합니다. TARGET RATIO 의 기본값은 풀을 생성하는 동안 지정된 경우를 제외하고 0 입니다. 풀에 제공할 --target_ratio 가 많을수록 풀이 예상하는 PG가 커집니다.
ECDHEFECTIVE RATIO 는 두 가지 방법으로 조정한 후 대상 비율입니다. 1. 대상 크기 집합을 가진 풀에서 사용할 것으로 예상되는 용량을 뺀다. 2. 대상 비율로 풀 간에 대상 비율을 표준화하여 나머지 공간을 전체적으로 대상으로 합니다. 예를 들어 대상 비율 1.0이 있는 풀 4는 유효 비율이 0.25입니다. 시스템은 실제 비율과 계산에 유효 비율을 사용합니다.
BIAS 는 특정 풀이 보유할 것으로 예상되는 PG에 대한 사전 정보를 기반으로 풀의 PG를 수동으로 조정하는 멀티플라이어로 사용됩니다. 기본적으로 풀을 만들 때 지정하지 않는 한 1.0인 경우 값입니다. 풀에서 제공하는 --bias 가 많을수록 풀에 있을 것으로 예상되는 PG가 더 커집니다.
PG_NUM 은 풀의 현재 PG 수 또는 pg_num 변경이 진행 중인 경우 풀이 진행 중인 PG의 현재 수입니다. NEW PG_NUM (있는 경우)은 제안된 PG 수입니다 (pg_num). 이는 항상 2의 힘이며 제안된 값이 현재 값과 3개 이상의 요인에 따라 달라지는 경우에만 존재합니다.
AUTOSCALE, pg_autoscale_mode 풀이며, ,off 또는 warn 에 있습니다.
BULK 는 PG를 완전히 보완하여 시작해야 하는 풀을 결정하는 데 사용됩니다. 사용량 비율이 풀에서 교차하는 경우에만 BULK 가 축소됩니다. 풀에 이 플래그가 없는 경우 풀은 최소 양의 PG로 시작하고 풀에 더 많은 사용량이 있을 때만 사용됩니다.
BULK 값은 true,false,1 또는 0 입니다. 여기서 1 은 true 와 같고 0 은 false 와 동일합니다. 기본값은 false입니다.
풀 생성 중 또는 후에 BULK 값을 설정합니다.
일괄 플래그를 사용하는 방법에 대한 자세한 내용은 풀 생성 및 배치 그룹 자동 확장 모드를 참조하십시오.
3.5.5. 배치 그룹 자동 확장 설정 링크 복사링크가 클립보드에 복사되었습니다!
클러스터가 클러스터 사용량에 따라 PG를 자동으로 스케일링할 수 있도록 허용하는 것이 PG를 확장하는 가장 간단한 방법입니다. Red Hat Ceph Storage는 전체 시스템에 사용할 수 있는 총 스토리지와 대상 PG 수를 가져와서 각 풀에 저장된 데이터 양을 비교하고 이에 따라 PG를 적용합니다. 이 명령은 현재 PG 수(pg_num)가 계산된 또는 제안된 PG 번호에서 3배 이상 떨어져 있는 풀만 변경합니다.
OSD당 대상 PG 수는 구성 가능한 mon_target_pg_per_osd 를 기반으로 합니다. 기본값은 100 으로 설정됩니다.
절차
mon_target_pg_per_osd:구문
ceph config set global mon_target_pg_per_osd number
ceph config set global mon_target_pg_per_osd numberCopy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들면 다음과 같습니다.
[ceph: root@host01 /]# ceph config set global mon_target_pg_per_osd 150
[ceph: root@host01 /]# ceph config set global mon_target_pg_per_osd 150Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.5.6. noautoscale 플래그 업데이트 링크 복사링크가 클립보드에 복사되었습니다!
모든 풀에 대해 자동 스케일러를 동시에 활성화하거나 비활성화하려면 noautoscale 글로벌 플래그를 사용할 수 있습니다. 이 글로벌 플래그는 일부 OSD가 초과되거나 클러스터가 유지 관리 중인 경우 스토리지 클러스터를 업그레이드하는 동안 유용합니다. 활동 전에 플래그를 설정하고 작업이 완료되면 설정을 해제할 수 있습니다.
기본적으로 noautoscale 플래그는 off 로 설정됩니다. 이 플래그가 설정되면 모든 풀에 pg_autoscale_mode 가 해제 되고 모든 풀이 자동 스케일러가 비활성화되어 있습니다.
사전 요구 사항
- 실행 중인 Red Hat Ceph Storage 클러스터
- 모든 노드에 대한 루트 수준 액세스.
절차
noautoscale플래그 값을 가져옵니다.예제
[ceph: root@host01 /]# ceph osd pool get noautoscale
[ceph: root@host01 /]# ceph osd pool get noautoscaleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 활동 전에
noautoscale플래그를 설정합니다.예제
[ceph: root@host01 /]# ceph osd pool set noautoscale
[ceph: root@host01 /]# ceph osd pool set noautoscaleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 작업이 완료되면
noautoscale플래그를 설정 해제합니다.예제
[ceph: root@host01 /]# ceph osd pool unset noautoscale
[ceph: root@host01 /]# ceph osd pool unset noautoscaleCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.6. 대상 풀 크기 지정 링크 복사링크가 클립보드에 복사되었습니다!
새로 생성된 풀은 전체 클러스터 용량의 작은 부분을 소비하며 소수의 PG가 필요한 시스템에 나타납니다. 그러나 대부분의 경우 클러스터 관리자는 시간이 지남에 따라 대부분의 시스템 용량을 사용해야 하는 풀을 알고 있습니다. Red Hat Ceph Storage에 대상 크기로 알려진 이 정보를 제공하는 경우 이러한 풀은 처음부터 더 적절한 PG 수(pg_num)를 사용할 수 있습니다. 이 접근 방식은 pg_num 의 후속 변경과 이러한 조정을 수행할 때 데이터 이동과 관련된 오버헤드를 방지합니다.
다음과 같은 방법으로 풀의 대상 크기를 지정할 수 있습니다.
3.6.1. 풀의 절대 크기를 사용하여 대상 크기 지정 링크 복사링크가 클립보드에 복사되었습니다!
절차
풀의 절대
크기를 바이트 단위로 사용하여 대상크기를 설정합니다.ceph osd pool set pool-name target_size_bytes value
ceph osd pool set pool-name target_size_bytes valueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들어
mypool이 100T 공간을 사용할 것으로 예상되는 시스템에 지시하려면 다음을 수행합니다.ceph osd pool set mypool target_size_bytes 100T
$ ceph osd pool set mypool target_size_bytes 100TCopy to Clipboard Copied! Toggle word wrap Toggle overflow
선택 사항 --target-size-bytes <bytes > 인수를 ceph osd pool create 명령에 추가하여 생성 시 풀의 대상 크기를 설정할 수도 있습니다.
3.6.2. 총 클러스터 용량을 사용하여 대상 크기 지정 링크 복사링크가 클립보드에 복사되었습니다!
절차
총 클러스터 용량의 비율을 사용하여
대상 크기를설정합니다.구문
ceph osd pool set pool-name target_size_ratio ratio
ceph osd pool set pool-name target_size_ratio ratioCopy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들면 다음과 같습니다.
[ceph: root@host01 /]# ceph osd pool set mypool target_size_ratio 1.0
[ceph: root@host01 /]# ceph osd pool set mypool target_size_ratio 1.0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 시스템에
target_size_ratio가 설정된 다른 풀과 비교하여mypool풀이 1.0을 소비할 것으로 예상됩니다.mypool이 클러스터에서 유일한 풀인 경우 이는 전체 용량의 100%를 예상되는 것을 의미합니다.target_size_ratio가 1.0인 두 번째 풀이 있는 경우 두 풀은 클러스터 용량의 50%를 사용할 것으로 예상됩니다.
선택 사항 --target-size-ratio <ratio > 인수를 ceph osd pool create 명령에 추가하여 생성 시 풀의 대상 크기를 설정할 수도 있습니다.
예를 들어 총 클러스터보다 큰 용량 또는 1.0보다 큰 용량 크기를 지정하는 경우 클러스터는 POOL_TARGET_SIZE_RATIO_OVERCOMMITTED 또는 POOL_TARGET_TARGET_BYTES_OVERCOMMITTED 상태 경고를 발생시킵니다.
풀에 target_size_ratio 및 target_size_bytes 를 모두 지정하는 경우 클러스터는 비율만 고려하고 POOL_HAS_TARGET_SIZE_BYTES_AND_RATIO 상태 경고를 발생시킵니다.
3.7. 배치 그룹 명령줄 인터페이스 링크 복사링크가 클립보드에 복사되었습니다!
ceph CLI를 사용하면 풀의 배치 그룹을 설정하고, PG 맵을 보고, PG 통계를 검색할 수 있습니다.
3.7.1. 풀에서 배치 그룹 수 설정 링크 복사링크가 클립보드에 복사되었습니다!
풀에서 배치 그룹 수를 설정하려면 풀을 생성할 때 배치 그룹 수를 지정해야 합니다. 자세한 내용은 풀 생성 을 참조하십시오. 풀에 배치 그룹을 설정한 후에는 배치 그룹 수를 늘릴 수 있지만 배치 그룹 수는 줄일 수 없습니다. 배치 그룹 수를 늘리려면 다음을 실행합니다.
구문
ceph osd pool set POOL_NAME pg_num PG_NUM
ceph osd pool set POOL_NAME pg_num PG_NUM
배치 그룹 수를 늘리면 클러스터가 재조정되기 전에 배치 그룹(pgp_num)도 늘려야 합니다. pgp_num 은 pg_num 과 같아야 합니다. 배치할 배치 그룹 수를 늘리려면 다음을 실행합니다.
구문
ceph osd pool set POOL_NAME pgp_num PGP_NUM
ceph osd pool set POOL_NAME pgp_num PGP_NUM
3.7.2. 풀에서 배치 그룹 수 가져오기 링크 복사링크가 클립보드에 복사되었습니다!
풀에서 배치 그룹 수를 가져오려면 다음을 실행합니다.
구문
ceph osd pool get POOL_NAME pg_num
ceph osd pool get POOL_NAME pg_num
3.7.3. 배치 그룹에 대한 통계 가져오기 링크 복사링크가 클립보드에 복사되었습니다!
storag 클러스터에서 배치 그룹에 대한 통계를 가져오려면 다음을 실행합니다.
구문
ceph pg dump [--format FORMAT]
ceph pg dump [--format FORMAT]
유효한 형식은 plain (기본값) 및 json 입니다.
3.7.4. 정지된 배치 그룹에 대한 통계 가져오기 링크 복사링크가 클립보드에 복사되었습니다!
지정된 상태에 있는 모든 배치 그룹에 대한 통계를 가져오려면 다음을 실행합니다.
구문
ceph pg dump_stuck {inactive|unclean|stale|undersized|degraded [inactive|unclean|stale|undersized|degraded...]} INTERVAL
ceph pg dump_stuck {inactive|unclean|stale|undersized|degraded [inactive|unclean|stale|undersized|degraded...]} INTERVAL
비활성 배치 그룹은 최신 데이터가 표시되는 OSD를 대기하고 있기 때문에 읽기 또는 쓰기를 처리할 수 없습니다.
불명확한 배치 그룹에는 원하는 횟수를 복제하지 않는 오브젝트가 포함되어 있습니다. 이들은 회복되어야 합니다.
오래된 배치 그룹은 알 수 없음 상태이며, 이를 호스팅하는 OSD는 잠시 동안 모니터 클러스터에 보고하지 않았습니다( mon_osd_report_timeout로 구성).
유효한 형식은 plain (기본값) 및 json 입니다. 임계값은 반환된 통계에 포함하기 전에 배치 그룹이 정지되는 최소 시간(기본값 300초)을 정의합니다.
3.7.5. 배치 그룹 맵 가져오기 링크 복사링크가 클립보드에 복사되었습니다!
특정 배치 그룹의 배치 그룹 맵을 가져오려면 다음을 실행합니다.
구문
ceph pg map PG_ID
ceph pg map PG_ID
예제
[ceph: root@host01 /]# ceph pg map 1.6c
[ceph: root@host01 /]# ceph pg map 1.6c
Ceph는 배치 그룹 맵, 배치 그룹 및 OSD 상태를 반환합니다.
osdmap e13 pg 1.6c (1.6c) -> up [1,0] acting [1,0]
osdmap e13 pg 1.6c (1.6c) -> up [1,0] acting [1,0]
3.7.6. 배치 그룹 제거 링크 복사링크가 클립보드에 복사되었습니다!
배치 그룹을 검사하려면 다음을 실행합니다.
구문
ceph pg scrub PG_ID
ceph pg scrub PG_ID
Ceph는 기본 노드 및 모든 복제본 노드를 확인하고, 배치 그룹에 있는 모든 오브젝트 카탈로그를 생성한 후 이를 비교하여 오브젝트가 누락되거나 일치하지 않으며 해당 내용이 일관되도록 합니다. 복제본이 모두 일치한다고 가정하면 최종 의미 체계가 있으면 모든 스냅샷 관련 개체 메타데이터가 일관되게 유지됩니다. 로그를 통해 오류가 보고됩니다.
3.7.7. unfound 오브젝트 표시 링크 복사링크가 클립보드에 복사되었습니다!
클러스터에서 하나 이상의 오브젝트를 손실하고 손실된 데이터에 대한 검색을 중단하기로 결정한 경우 unfound 오브젝트를 lost 로 표시해야 합니다.
가능한 모든 위치가 쿼리되어도 개체가 여전히 손실된 경우 손실된 오브젝트를 포기해야 할 수 있습니다. 이는 쓰기가 자체적으로 복구되기 전에 수행된 쓰기에 대해 클러스터에서 확인할 수 있는 비정상적인 오류 조합이 발생할 수 있습니다.
현재 유일하게 지원되는 옵션은 "revert"이며 이전 버전의 오브젝트로 롤백하거나 (새 오브젝트인 경우) 완전히 잊어 버립니다. "unfound" 오브젝트를 "lost"로 표시하려면 다음을 실행합니다.
구문
ceph pg PG_ID mark_unfound_lost revert|delete
ceph pg PG_ID mark_unfound_lost revert|delete
오브젝트가 존재할 것으로 예상되는 애플리케이션을 혼동할 수 있으므로 이 기능을 주의해서 사용하십시오.
4장. 풀 개요 링크 복사링크가 클립보드에 복사되었습니다!
Ceph 클라이언트는 풀에 데이터를 저장합니다. 풀을 생성할 때 클라이언트가 데이터를 저장할 수 있는 I/O 인터페이스를 생성합니다. Ceph 클라이언트(즉, 블록 장치, 게이트웨이 및 기타)의 관점에서 Ceph 스토리지 클러스터와 상호 작용하는 것은 매우 간단합니다. 클러스터 처리 및 클러스터에 연결한 다음 오브젝트 및 확장된 속성을 읽고 작성하는 I/O 컨텍스트를 생성합니다.
클러스터 핸드플 생성 및 클러스터에 연결
Ceph 스토리지 클러스터에 연결하려면 Ceph 클라이언트에는 기본적으로 ceph 이고 초기 모니터 주소인 클러스터 이름이 필요합니다. Ceph 클라이언트는 일반적으로 Ceph 구성 파일의 기본 경로를 사용하여 이러한 매개 변수를 검색한 다음 파일에서 읽습니다. 그러나 사용자는 명령줄에서 매개 변수를 지정할 수도 있습니다. Ceph 클라이언트는 또한 사용자 이름 및 시크릿 키를 제공하며 인증은 기본적으로 on 입니다. 그런 다음 클라이언트는 Ceph 모니터 클러스터에 연결하여 모니터, OSD 및 풀을 포함하여 클러스터 맵의 최근 사본을 검색합니다.
풀 I/O 컨텍스트 생성
Ceph 클라이언트는 데이터를 읽고 쓰기 위해 Ceph 스토리지 클러스터의 특정 풀에 대한 I/O 컨텍스트를 생성합니다. 지정된 사용자에게 풀에 대한 권한이 있는 경우 Ceph 클라이언트에서 지정된 풀에서 읽고 쓸 수 있습니다.
Ceph의 아키텍처를 사용하면 스토리지 클러스터에서 Ceph 클라이언트에 이러한 눈에 띄게 간단한 인터페이스를 제공할 수 있으므로 클라이언트는 풀 이름을 지정하고 I/O 컨텍스트를 생성할 때 간단히 정의하는 정교한 스토리지 전략 중 하나를 선택할 수 있습니다. 스토리지 전략은 용량 및 성능을 제외한 모든 Ceph 클라이언트에 표시되지 않습니다. 마찬가지로 오브젝트를 블록 장치 표현에 매핑하거나 S3/Swift RESTful 서비스를 제공하는 것과 같은 Ceph 클라이언트의 복잡성은 Ceph 스토리지 클러스터에 표시되지 않습니다.
풀은 다음을 제공합니다.
-
복원력: 데이터를 손실하지 않고 허용되는 OSD 수를 설정할 수 있습니다. 복제된 풀의 경우 원하는 수의 오브젝트 복사본 또는 복제본입니다. 일반적인 구성에서는 오브젝트와 하나의 추가 사본(즉,
size = 2)을 저장하지만 사본 또는 복제본 수를 확인할 수 있습니다. 리브리저 코딩 풀의 경우, 배경 코드 프로파일 에서m=2인 코딩 청크 수입니다. - 배치 그룹: 풀에 대한 배치 그룹 수를 설정할 수 있습니다. 일반적인 구성은 OSD당 약 50~100개의 배치 그룹을 사용하여 너무 많은 컴퓨팅 리소스를 사용하지 않고 최적의 균형을 유지합니다. 여러 풀을 설정할 때 풀과 클러스터 모두에 대해 적절한 수의 배치 그룹을 설정해야 합니다.
- FlexVolume 규칙: 풀에 데이터를 저장할 때 풀에 매핑된 DestinationRule 규칙을 통해 이름이 클러스터의 각 오브젝트 및 복제본 또는 청크를 배치하기 위한 규칙을 식별할 수 있습니다. 풀에 대한 사용자 지정 rule을 만들 수 있습니다.
-
Quotas:
ceph osd pool set-quota가 있는 풀에서 할당량을 설정하면 지정된 풀에 저장된 최대 오브젝트 수 또는 최대 바이트 수를 제한할 수 있습니다.
4.1. 풀 및 스토리지 전략 개요 링크 복사링크가 클립보드에 복사되었습니다!
풀을 관리하려면 풀을 나열, 생성 및 제거할 수 있습니다. 각 풀의 사용률 통계를 볼 수도 있습니다.
4.2. 풀 나열 링크 복사링크가 클립보드에 복사되었습니다!
클러스터 풀을 나열합니다.
예제
[ceph: root@host01 /]# ceph osd lspools
[ceph: root@host01 /]# ceph osd lspools
4.3. 풀 생성 링크 복사링크가 클립보드에 복사되었습니다!
풀 생성 전에 자세한 내용은 구성 가이드를 참조하십시오.
기본값이 요구 사항에 맞게 필요하지 않으므로 배치 그룹 수에 대한 기본값을 조정하는 것이 좋습니다.
예제
[ceph: root@host01 /]# ceph config set global osd_pool_default_pg_num 250 [ceph: root@host01 /]# ceph config set global osd_pool_default_pgp_num 250
[ceph: root@host01 /]# ceph config set global osd_pool_default_pg_num 250
[ceph: root@host01 /]# ceph config set global osd_pool_default_pgp_num 250
복제된 풀을 생성합니다.
구문
ceph osd pool create POOL_NAME PG_NUM PGP_NUM [replicated] \
[CRUSH_RULE_NAME] [EXPECTED_NUMBER_OBJECTS]
ceph osd pool create POOL_NAME PG_NUM PGP_NUM [replicated] \
[CRUSH_RULE_NAME] [EXPECTED_NUMBER_OBJECTS]
Overridesure-coded 풀을 생성합니다.
구문
ceph osd pool create POOL_NAME PG_NUM PGP_NUM erasure \
[ERASURE_CODE_PROFILE] [CRUSH_RULE_NAME] [EXPECTED_NUMBER_OBJECTS]
ceph osd pool create POOL_NAME PG_NUM PGP_NUM erasure \
[ERASURE_CODE_PROFILE] [CRUSH_RULE_NAME] [EXPECTED_NUMBER_OBJECTS]
대량 풀을 생성합니다.
구문
ceph osd pool create POOL_NAME [--bulk]
ceph osd pool create POOL_NAME [--bulk]
다음과 같습니다.
- POOL_NAME
- 설명
- 풀의 이름입니다. 고유해야 합니다.
- 유형
- 문자열
- 필수 항목
- 제공됨 지정하지 않으면 기본값으로 설정됩니다.
- Default
-
Ceph
- PG_NUM
- 설명
-
풀의 총 배치 그룹 수입니다. 적절한 수를 계산하는 방법에 대한 자세한 내용은 배치 그룹 섹션 및 풀당 Ceph 배치 그룹(PG) 을 참조하십시오. 기본값은
8이 대부분의 시스템에 적합하지 않습니다. - 유형
- 정수
- 필수 항목
- 제공됨
- Default
-
8
- PGP_NUM
- 설명
- 배치 목적을 위한 총 배치 그룹 수입니다. 이 값은 배치 그룹 분할 시나리오를 제외하고 총 배치 그룹 수와 같아야 합니다.
- 유형
- 정수
- 필수 항목
- 제공됨 지정하지 않으면 기본값으로 설정됩니다.
- Default
-
8
복제또는삭제- 설명
-
풀 유형은 오브젝트의 여러 복사본을 유지하여 손실된 OSD에서 복구하도록
복제할 수 있으며 일종의 일반화된 RAID5 기능을 얻을 수 있습니다.복제된 풀에는 더 많은 원시 스토리지가 필요하지만 모든 Ceph 작업을 구현합니다. erasure-coded 풀에는 원시 스토리지가 덜 필요하지만 사용 가능한 작업 서브 세트만 구현합니다. - 유형
- 문자열
- 필수 항목
- 없음
- Default
-
복제
- CRUSH_RULE_NAME
- 설명
-
풀에 대한 crush 규칙의 이름입니다. 규칙은 존재해야 합니다. 복제된 풀의 경우 이름은
osd_pool_default_crush_rule구성 설정에서 지정한 규칙입니다. 삭제 코드 프로필 또는POOL_NAME을 지정하는 경우 이름이erasure-code입니다. 규칙이 없는 경우 Ceph는 지정된 이름으로 이 규칙을 암시적으로 생성합니다. - 유형
- 문자열
- 필수 항목
- 없음
- Default
-
삭제 코딩된 풀에
erasure-code를 사용합니다. 복제된 풀의 경우 Ceph 구성의osd_pool_default_crush_rule변수 값을 사용합니다.
- EXPECTED_NUMBER_OBJECTS
- 설명
-
풀에 예상되는 오브젝트 수입니다. 이 값을 음수
filestore_merge_threshold변수와 함께 설정하면 Ceph에서 풀 생성 시 배치 그룹을 분할하여 런타임 디렉터리 분할에 미치는 영향을 방지합니다. - 유형
- 정수
- 필수 항목
- 없음
- Default
-
0, 풀 생성 시 분할하지 않습니다.
- ERASURE_CODE_PROFILE
- 설명
-
삭제 코딩된 풀의 경우에만 해당됩니다. 삭제 코드 프로필을 사용합니다. Ceph 구성 파일의
osd erasure-code-profile변수에서 정의한 기존 프로필이어야 합니다. 자세한 내용은 Erasure Code Profiles 섹션을 참조하십시오. - 유형
- 문자열
- 필수 항목
- 없음
풀을 생성할 때 배치 그룹 수를 적절한 값(예: 100 )으로 설정합니다. OSD당 총 배치 그룹 수를 고려하십시오. 배치 그룹은 계산상 비용이 많이 들기 때문에 배치 그룹이 많은 풀(예: 각각 100개의 배치 그룹이 있는 풀 50개)이 있을 때 성능이 저하됩니다. 감소 시점은 OSD 호스트의 기능에 따라 달라집니다.
4.4. 풀 할당량 설정 링크 복사링크가 클립보드에 복사되었습니다!
최대 바이트 수와 풀당 최대 오브젝트 수에 대한 풀 할당량을 설정할 수 있습니다.
구문
ceph osd pool set-quota POOL_NAME [max_objects OBJECT_COUNT] [max_bytes BYTES]
ceph osd pool set-quota POOL_NAME [max_objects OBJECT_COUNT] [max_bytes BYTES]
예제
[ceph: root@host01 /]# ceph osd pool set-quota data max_objects 10000
[ceph: root@host01 /]# ceph osd pool set-quota data max_objects 10000
할당량을 제거하려면 해당 값을 0 으로 설정합니다.
진행 중 쓰기 작업은 Ceph가 클러스터 전체에서 풀 사용량을 전파할 때까지 잠시 풀 할당량을 초과할 수 있습니다. 이는 정상적인 동작입니다. 진행 중인 쓰기 작업에서 풀 할당량을 적용하면 상당한 성능 저하가 발생할 수 있습니다.
4.5. 풀 삭제 링크 복사링크가 클립보드에 복사되었습니다!
풀을 삭제합니다.
구문
ceph osd pool delete POOL_NAME [POOL_NAME --yes-i-really-really-mean-it]
ceph osd pool delete POOL_NAME [POOL_NAME --yes-i-really-really-mean-it]
데이터를 보호하기 위해 스토리지 관리자는 기본적으로 풀을 삭제할 수 없습니다. 풀 삭제 전에 mon_allow_pool_delete 구성 옵션을 설정합니다.
풀에 자체 규칙이 있는 경우 풀을 삭제한 후 제거하는 것이 좋습니다. 풀에 엄격하게 사용 가능한 사용자가 있는 경우 풀을 삭제한 후 해당 사용자를 삭제하는 것이 좋습니다.
4.6. 풀 이름 변경 링크 복사링크가 클립보드에 복사되었습니다!
풀의 이름을 변경합니다.
구문
ceph osd pool rename CURRENT_POOL_NAME NEW_POOL_NAME
ceph osd pool rename CURRENT_POOL_NAME NEW_POOL_NAME
풀 이름을 바꾸고 인증된 사용자에 대해 풀당 기능이 있는 경우 사용자의 기능, 즉 새 풀 이름으로 업데이트해야 합니다.
4.7. 풀 마이그레이션 링크 복사링크가 클립보드에 복사되었습니다!
경우에 따라 모든 오브젝트를 한 풀에서 다른 풀로 마이그레이션해야 합니다. 이 작업은 특정 풀에서 수정할 수 없는 매개 변수를 변경해야 하는 경우 수행됩니다. 예를 들어 풀의 배치 그룹 수를 줄여야 합니다.
워크로드가 Ceph 블록 장치 이미지 만 사용하는 경우 Red Hat Ceph Storage 블록 장치 가이드 내에서 풀을 이동 및 마이그레이션하는 데 설명된 절차를 따르십시오.
Ceph Block Device에 대해 설명된 마이그레이션 방법은 여기에 설명된 것보다 더 권장됩니다. cppool을 사용하면 모든 스냅샷 및 스냅샷 관련 메타데이터를 유지하지 않으므로 데이터의 치명적이지 않은 사본이 생성됩니다. 예를 들어 RBD 풀을 복사해도 이미지를 완전히 복사하지는 않습니다. 이 경우 스냅이 존재하지 않으며 제대로 작동하지 않습니다. cppool은 일부 librados 사용자가 의존하는 user_version 필드도 유지하지 않습니다.
풀을 마이그레이션하고 사용자 워크로드에 Ceph 블록 장치 이외의 이미지가 포함된 경우 여기에 설명된 절차 중 하나를 계속 진행하십시오.
사전 요구 사항
rados cppool명령을 사용하는 경우:- 풀에 대한 읽기 전용 액세스가 필요합니다.
-
librados에서 사용하는 RBD 이미지와 해당 snaps 및
user_version이 없는 경우에만 이 명령을 사용합니다.
- 로컬 드라이브 RADOS 명령을 사용하는 경우 충분한 클러스터 공간을 사용할 수 있는지 확인합니다. 풀 복제 요인에 따라 두 개, 세 개 이상의 데이터 사본이 표시됩니다.
절차
방법 1 - 권장 직접 방법
rados cppool 명령을 사용하여 모든 오브젝트를 복사합니다.
복사 중에 풀에 대한 읽기 전용 액세스가 필요합니다.
구문
ceph osd pool create NEW_POOL PG_NUM [ <other new pool parameters> ] rados cppool SOURCE_POOL NEW_POOL ceph osd pool rename SOURCE_POOL NEW_SOURCE_POOL_NAME ceph osd pool rename NEW_POOL SOURCE_POOL
ceph osd pool create NEW_POOL PG_NUM [ <other new pool parameters> ]
rados cppool SOURCE_POOL NEW_POOL
ceph osd pool rename SOURCE_POOL NEW_SOURCE_POOL_NAME
ceph osd pool rename NEW_POOL SOURCE_POOL
예제
[ceph: root@host01 /]# ceph osd pool create pool1 250 [ceph: root@host01 /]# rados cppool pool2 pool1 [ceph: root@host01 /]# ceph osd pool rename pool2 pool3 [ceph: root@host01 /]# ceph osd pool rename pool1 pool2
[ceph: root@host01 /]# ceph osd pool create pool1 250
[ceph: root@host01 /]# rados cppool pool2 pool1
[ceph: root@host01 /]# ceph osd pool rename pool2 pool3
[ceph: root@host01 /]# ceph osd pool rename pool1 pool2
방법 2 - 로컬 드라이브 사용
rados 내보내기및rados 가져오기명령과 임시 로컬 디렉터리를 사용하여 내보낸 모든 데이터를 저장합니다.구문
ceph osd pool create NEW_POOL PG_NUM [ <other new pool parameters> ] rados export --create SOURCE_POOL FILE_PATH rados import FILE_PATH NEW_POOL
ceph osd pool create NEW_POOL PG_NUM [ <other new pool parameters> ] rados export --create SOURCE_POOL FILE_PATH rados import FILE_PATH NEW_POOLCopy to Clipboard Copied! Toggle word wrap Toggle overflow 예제
[ceph: root@host01 /]# ceph osd pool create pool1 250 [ceph: root@host01 /]# rados export --create pool2 <path of export file> [ceph: root@host01 /]# rados import <path of export file> pool1
[ceph: root@host01 /]# ceph osd pool create pool1 250 [ceph: root@host01 /]# rados export --create pool2 <path of export file> [ceph: root@host01 /]# rados import <path of export file> pool1Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 필수 항목입니다. 소스 풀의 모든 I/O를 중지합니다.
필수 항목입니다. 수정된 모든 오브젝트를 다시 동기화합니다.
구문
rados export --workers 5 SOURCE_POOL FILE_PATH rados import --workers 5 FILE_PATH NEW_POOL
rados export --workers 5 SOURCE_POOL FILE_PATH rados import --workers 5 FILE_PATH NEW_POOLCopy to Clipboard Copied! Toggle word wrap Toggle overflow 예제
[ceph: root@host01 /]# rados export --workers 5 pool2 <path of export file> [ceph: root@host01 /]# rados import --workers 5 <path of export file> pool1
[ceph: root@host01 /]# rados export --workers 5 pool2 <path of export file> [ceph: root@host01 /]# rados import --workers 5 <path of export file> pool1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.8. 풀 통계 보기 링크 복사링크가 클립보드에 복사되었습니다!
풀의 사용률 통계를 표시합니다.
예제
[ceph: root@host01 /] rados df
[ceph: root@host01 /] rados df
4.9. 풀 값 설정 링크 복사링크가 클립보드에 복사되었습니다!
값을 풀로 설정합니다.
구문
ceph osd pool set POOL_NAME KEY VALUE
ceph osd pool set POOL_NAME KEY VALUE
Pool Values 섹션에는 설정할 수 있는 모든 키-값 쌍이 나열됩니다.
4.10. 풀 값 가져오기 링크 복사링크가 클립보드에 복사되었습니다!
풀에서 값을 가져옵니다.
구문
ceph osd pool get POOL_NAME KEY
ceph osd pool get POOL_NAME KEY
Pool Values 섹션에서 가져올 수 있는 모든 키-값 쌍 목록을 볼 수 있습니다.
4.11. 클라이언트 애플리케이션 활성화 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat Ceph Storage는 무단 유형의 클라이언트가 풀에 데이터를 쓰지 못하도록 추가 보호를 제공합니다. 즉, 시스템 관리자는 Ceph 블록 장치, Ceph Object Gateway, Ceph Filesystem 또는 사용자 지정 애플리케이션에서 I/O 작업을 수신할 수 있도록 명시적으로 활성화해야 합니다.
클라이언트에서 I/O 작업을 수행하여 풀에서 I/O 작업을 수행할 수 있습니다.
구문
ceph osd pool application enable POOL_NAME APP {--yes-i-really-mean-it}
ceph osd pool application enable POOL_NAME APP {--yes-i-really-mean-it}
여기서 APP 는 다음과 같습니다.
-
Ceph 파일 시스템용 CephFS.
-
Ceph 블록 장치용 RBD입니다.
-
Ceph Object Gateway의 경우
rgw.
사용자 지정 애플리케이션에 대해 다른 APP 값을 지정합니다.
활성화되지 않은 풀은 HEALTH_WARN 상태를 생성합니다. 이 시나리오에서 ceph 상태 세부 정보 -f json-pretty 의 출력은 다음과 같은 출력을 제공합니다.
rbd 풀 init POOL_NAME을 사용하여 Ceph 블록 장치의 풀 을 초기화합니다.
4.12. 클라이언트 애플리케이션 비활성화 링크 복사링크가 클립보드에 복사되었습니다!
풀에서 I/O 작업을 수행하지 못하도록 클라이언트 애플리케이션을 비활성화합니다.
구문
ceph osd pool application disable POOL_NAME APP {--yes-i-really-mean-it}
ceph osd pool application disable POOL_NAME APP {--yes-i-really-mean-it}
여기서 APP 는 다음과 같습니다.
-
Ceph 파일 시스템용 CephFS.
-
Ceph 블록 장치용 RBD입니다.
-
Ceph Object Gateway의 경우
rgw.
사용자 지정 애플리케이션에 대해 다른 APP 값을 지정합니다.
4.13. 애플리케이션 메타데이터 설정 링크 복사링크가 클립보드에 복사되었습니다!
클라이언트 애플리케이션의 특성을 설명하는 키-값 쌍을 설정하는 기능을 제공합니다.
풀에서 클라이언트 애플리케이션 메타데이터를 설정합니다.
구문
ceph osd pool application set POOL_NAME APP KEY VALUE
ceph osd pool application set POOL_NAME APP KEY VALUE
여기서 APP 는 다음과 같습니다.
-
Ceph 파일 시스템용 CephFS.
-
Ceph 블록 장치용 RBD
-
Ceph Object Gateway용rgw
-
사용자 지정 애플리케이션에 대해 다른
APP값을 지정합니다. -
이 명령은
ceph osd pool application enable POOL APP명령과 다릅니다.
4.14. 애플리케이션 메타데이터 제거 링크 복사링크가 클립보드에 복사되었습니다!
풀에서 클라이언트 애플리케이션 메타데이터를 제거합니다.
구문
ceph osd pool application rm POOL_NAME APP KEY
ceph osd pool application rm POOL_NAME APP KEY
여기서 APP 는 다음과 같습니다.
-
Ceph 파일 시스템용 CephFS.
-
Ceph 블록 장치용 RBD
-
Ceph Object Gateway용rgw
사용자 지정 애플리케이션에 대해 다른 APP 값을 지정합니다.
4.15. 오브젝트 복제본 수 설정 링크 복사링크가 클립보드에 복사되었습니다!
복제 풀에서 오브젝트 복제본 수를 설정합니다.
구문
ceph osd pool set POOL_NAME size NUMBER_OF_REPLICAS
ceph osd pool set POOL_NAME size NUMBER_OF_REPLICAS
각 풀에 대해 이 명령을 실행할 수 있습니다.
NUMBER_OF_REPLICAS 매개변수에는 오브젝트 자체가 포함됩니다. 오브젝트의 총 세 개 인스턴스에 대해 오브젝트의 두 복사본과 두 개의 개체 복사본을 포함하려면 3 을 지정합니다.
예제
[ceph: root@host01 /]# ceph osd pool set data size 3
[ceph: root@host01 /]# ceph osd pool set data size 3
오브젝트는 풀 크기 설정에서 지정한 복제본보다 적은 복제본 수가 있는 I/O 작업 성능이 저하될 수 있습니다. I/O에 필요한 최소 복제본 수를 설정하려면 min_size 설정을 사용합니다.
예제
[ceph: root@host01 /]# ceph osd pool set data min_size 2
[ceph: root@host01 /]# ceph osd pool set data min_size 2
이렇게 하면 데이터 풀의 오브젝트가 min_size 설정에서 지정한 복제본보다 적은 I/O가 수신되지 않습니다.
4.16. 오브젝트 복제본 수 가져오기 링크 복사링크가 클립보드에 복사되었습니다!
오브젝트 복제본 수를 가져옵니다.
예제
[ceph: root@host01 /]# ceph osd dump | grep 'replicated size'
[ceph: root@host01 /]# ceph osd dump | grep 'replicated size'
Ceph는 복제된 크기 속성이 강조 표시된 풀을 나열합니다. 기본적으로 Ceph는 총 3개의 사본 또는 크기가 3 인 오브젝트의 두 복제본을 만듭니다.
4.17. 풀 값 링크 복사링크가 클립보드에 복사되었습니다!
다음 목록에는 설정하거나 가져올 수 있는 키-값 쌍이 포함되어 있습니다. 자세한 내용은 풀 값 설정 및 풀 값 가져오기 섹션을 참조하십시오.
- 크기
- 설명
- 풀에 있는 개체의 복제본 수를 지정합니다. 자세한 내용은 오브젝트 복제본 수 설정 섹션을 참조하십시오. 복제된 풀에만 적용됩니다.
- 유형
- 정수
- min_size
- 설명
-
I/O에 필요한 최소 복제본 수를 설정합니다. 자세한 내용은 오브젝트 복제본 수 설정 섹션을 참조하십시오. 삭제 코드 풀의 경우
k보다 큰 값으로 설정해야 합니다. 값k에서 I/O가 허용되면 중복이 없으며 영구 OSD 오류가 발생할 경우 데이터가 손실됩니다. 자세한 내용은 Erasure 코드 풀 개요 를 참조하십시오. - 유형
- 정수
- crash_replay_interval
- 설명
- 클라이언트가 승인되었지만 커밋되지 않은 요청을 재생할 수 있도록 하는 시간(초)을 지정합니다.
- 유형
- 정수
- pg-num
- 설명
-
풀의 총 배치 그룹 수입니다. 적절한 수 계산에 대한 자세한 내용은 Red Hat Ceph Storage 구성 가이드의 Pool, placement groups, CRUSH 구성 참조 섹션을 참조하십시오. 기본값은
8이 대부분의 시스템에 적합하지 않습니다. - 유형
- 정수
- 필수 항목
- 제공됨
- Default
- 8
- pgp-num
- 설명
- 배치 목적을 위한 총 배치 그룹 수입니다. 이는 배치 그룹 분할 시나리오 를 제외하고 총 배치 그룹 수와 같아야 합니다.
- 유형
- 정수
- 필수 항목
- 제공됨 지정하지 않는 경우 기본 또는 Ceph 구성 값을 선택합니다.
- Default
- 8
- 유효한 범위
-
pg_num변수에서 지정한 값보다 크거나 같습니다.
- crush_rule
- 설명
- 클러스터에서 오브젝트 배치를 매핑하는 데 사용할 규칙입니다.
- 유형
- 문자열
- hashpspool
- 설명
-
지정된 풀에서
HASHPSPOOL플래그를 활성화하거나 비활성화합니다. 이 옵션을 사용하면 풀 및 배치 그룹이 중복되는 방식을 개선하기 위해 풀 해시 및 배치 그룹 매핑이 변경됩니다. - 유형
- 정수
- 유효한 범위
1플래그를 활성화합니다.0은 플래그를 비활성화합니다.중요많은 양의 OSD 및 데이터가 있는 클러스터의 프로덕션 풀에서 이 옵션을 활성화하지 마십시오. 풀의 모든 배치 그룹은 다시 매핑되어야 하므로 너무 많은 데이터 이동이 발생할 수 있습니다.
- fast_read
- 설명
-
삭제 코딩을 사용하는 풀에서 이 플래그가 활성화되면 읽기 요청 문제가 모든 shard에 대해 나중에 읽고, 클라이언트에 서비스를 제공하기 위해 디코딩할 충분한 shard를 수신할 때까지 기다립니다.
jerasure및isa erasure플러그인의 경우 첫 번째 K 응답이 반환되면 클라이언트의 요청이 이러한 응답에서 디코딩된 데이터를 사용하여 즉시 제공됩니다. 이는 더 나은 성능을 위해 일부 리소스를 할당하는 데 도움이 됩니다. 현재 이 플래그는 삭제 코딩 풀에서만 지원됩니다. - 유형
- 부울
- 기본값
-
0
- allow_ec_overwrites
- 설명
- 삭제 코딩된 풀에 쓰기를 통해 오브젝트의 일부를 업데이트할 수 있으므로 Ceph Filesystem 및 Ceph Block Device에서 사용할 수 있습니다.
- 유형
- 부울
- compression_algorithm
- 설명
-
BlueStore 스토리지 백엔드에 사용할 인라인 압축 알고리즘을 설정합니다. 이 설정은
bluestore_compression_algorithm구성 설정을 재정의합니다. - 유형
- 문자열
- 유효한 설정
-
lz4,snappy,zlib,zstd
- compression_mode
- 설명
-
BlueStore 스토리지 백엔드에 대한 인라인 압축 알고리즘의 정책을 설정합니다. 이 설정은
bluestore_compression_mode구성 설정을 재정의합니다. - 유형
- 문자열
- 유효한 설정
-
없음,수동적,공격적인,강제
- compression_min_blob_size
- 설명
-
BlueStore는 이 크기보다 작은 청크를 압축하지 않습니다. 이 설정은
bluestore_compression_min_blob_size구성 설정을 재정의합니다. - 유형
- 서명되지 않은 정수
- compression_max_blob_size
- 설명
-
BlueStore는 이 크기보다 큰 청크를 압축하기 전에
compression_max_blob_size의 작은 Blob으로 나눕니다. - 유형
- 서명되지 않은 정수
- nodelete
- 설명
-
지정된 풀에서
NODELETE플래그를 설정하거나 설정 해제합니다. - 유형
- 정수
- 유효한 범위
-
1세트 플래그.0unsets 플래그입니다.
- nopgchange
- 설명
-
지정된 풀에서
NOPGCHANGE플래그를 설정하거나 설정 해제합니다. - 유형
- 정수
- 유효한 범위
-
1플래그를 설정합니다.0플래그를 설정하지 않습니다.
- nosizechange
- 설명
-
지정된 풀에서
NOSIZE change 플래그를 설정하거나 설정 해제합니다. - 유형
- 정수
- 유효한 범위
-
1플래그를 설정합니다.0플래그를 설정하지 않습니다.
- write_fadvise_dontneed
- 설명
-
지정된 풀에서
WRITE_FADVISE_DONTNEED플래그를 설정하거나 설정 해제합니다. - 유형
- 정수
- 유효한 범위
-
1플래그를 설정합니다.0플래그를 설정하지 않습니다.
- noscrub
- 설명
-
지정된 풀에서
NOSCRUB플래그를 설정하거나 설정 해제합니다. - 유형
- 정수
- 유효한 범위
-
1플래그를 설정합니다.0플래그를 설정하지 않습니다.
- nodeep-scrub
- 설명
-
지정된 풀에서
NODEEP_SCRUB플래그를 설정하거나 설정 해제합니다. - 유형
- 정수
- 유효한 범위
-
1플래그를 설정합니다.0플래그를 설정하지 않습니다.
- scrub_min_interval
- 설명
-
로드가 낮은 경우 풀 스크럽의 최소 간격(초)입니다. 이 값이
0인 경우 Ceph는osd_scrub_min_interval구성 설정을 사용합니다. - 유형
- double
- Default
-
0
- scrub_max_interval
- 설명
-
클러스터 로드와 관계없이 풀 스크럽의 최대 간격(초)입니다. 이 값이
0인 경우 Ceph는osd_scrub_max_interval구성 설정을 사용합니다. - 유형
- double
- Default
-
0
- deep_scrub_interval
- 설명
-
'deep' 풀의 간격(초)입니다. 이 값이
0인 경우 Ceph는osd_deep_scrub_interval구성 설정을 사용합니다. - 유형
- double
- Default
-
0
5장. 코드 풀 삭제 개요 링크 복사링크가 클립보드에 복사되었습니다!
Ceph 스토리지 전략에는 데이터 지속성 요구 사항을 정의하는 작업이 포함됩니다. 데이터 지속성은 데이터 손실 없이 하나 이상의 OSD의 손실을 유지할 수 있는 기능을 의미합니다.
Ceph는 데이터를 풀에 저장하고 다음 두 가지 유형의 풀이 있습니다.
- 복제됨
- erasure-coded
Ceph는 기본적으로 복제된 풀을 사용합니다. 즉, Ceph는 기본 OSD 노드에서 하나 이상의 보조 OSD로 모든 오브젝트를 복사합니다.
삭제 코딩 풀은 데이터 지속성을 보장하는 데 필요한 디스크 공간을 줄일 수 있지만 복제보다 비용이 약간 더 많이 듭니다.
삭제 코딩은 Ceph 스토리지 클러스터에 오브젝트를 저장하는 방법으로, 삭제 코드 알고리즘이 오브젝트를k(데이터 청크) 및 코딩 청크(m)로 분할하고 이러한 청크를 다른 OSD에 저장하는 방법입니다.
OSD가 실패하는 경우 Ceph는 다른 OSD에서 나머지 데이터(k) 및 코딩(m) 청크를 검색하고 삭제 코드 알고리즘은 해당 청크에서 오브젝트를 복원합니다.
Red Hat은 쓰기 및 데이터 손실을 방지하기 위해 삭제 코드 풀의 min_size 를 K+1 이상을 권장합니다.
삭제 코딩은 복제보다 스토리지 용량을 더 효율적으로 사용합니다. n-replication 접근 방식은 오브젝트의 n 복사본(기본적으로 Ceph에서 3x)을 유지 관리하지만 삭제 코딩은 k + m 청크만 유지합니다. 예를 들어 3 데이터 및 2 코딩 청크는 원래 오브젝트의 저장 공간 1.5x를 사용합니다.
삭제 코딩은 복제보다 스토리지 오버헤드가 적지만 삭제 코드 알고리즘은 개체에 액세스하거나 복구할 때 복제보다 더 많은 RAM과 CPU를 사용합니다. 삭제 코딩은 데이터 스토리지가 지속성 및 내결함성이어야 하지만 빠른 읽기 성능(예: 콜드 스토리지, 기록 레코드 등)이 필요하지 않은 경우 유용합니다.
Ceph에서 코드를 지우는 방법에 대한 수치적이고 자세한 설명은 Red Hat Ceph Storage 6 아키텍처 가이드 의 Ceph Erasure Coding 섹션을 참조하십시오.
Ceph는 k=2 및 m=2 로 클러스터를 초기화할 때 기본 삭제 코드 프로필을 생성합니다. 즉, Ceph는 오브젝트 데이터를 4개의 OSD(k+m == 4)에 분배하고 Ceph는 데이터 손실 없이 OSD 중 하나를 손실할 수 있습니다. 삭제 코드 프로파일링에 대한 자세한 내용은 Erasure Code Profiles 섹션을 참조하십시오.
.rgw.buckets 풀만 erasure-coded 및 기타 모든 Ceph Object Gateway 풀만 복제된 것으로 구성하십시오. 그렇지 않으면 다음 오류와 함께 새 버킷을 생성하려는 시도가 실패합니다.
set_req_state_err err_no=95 resorting to 500
set_req_state_err err_no=95 resorting to 500
그 이유는 Desure-coded 풀이 omap 작업을 지원하지 않기 때문에 특정 Ceph Object Gateway 메타데이터 풀에는 omap 지원이 필요하기 때문입니다.
5.1. 샘플 삭제 코드 풀 생성 링크 복사링크가 클립보드에 복사되었습니다!
다른 프로필을 지정하지 않는 한 ceph osd pool create 명령은 기본 프로필로 erasure-coded 풀을 생성합니다. 프로필은 두 개의 매개 변수 k 및 m 을 설정하여 데이터 중복성을 정의합니다. 이러한 매개변수는 데이터 조각이 분할되고 코딩 청크 수가 생성되는 청크 수를 정의합니다.
가장 간단한 삭제 코드 풀은 RAID5와 동일하며 최소 3개의 호스트가 필요합니다.
예제
ceph osd pool create ecpool 32 32 erasure pool 'ecpool' created echo ABCDEFGHI | rados --pool ecpool put NYAN - rados --pool ecpool get NYAN - ABCDEFGHI
$ ceph osd pool create ecpool 32 32 erasure
pool 'ecpool' created
$ echo ABCDEFGHI | rados --pool ecpool put NYAN -
$ rados --pool ecpool get NYAN -
ABCDEFGHI
풀 생성 의 32는 배치 그룹 수를 나타냅니다.
5.2. 코드 프로필 삭제 링크 복사링크가 클립보드에 복사되었습니다!
Ceph는 프로필 을 사용하여 삭제 코딩 풀을 정의합니다. Ceph는 삭제 코딩된 풀 및 관련 CRUSH 규칙을 생성할 때 프로필을 사용합니다.
Ceph는 클러스터를 초기화할 때 기본 삭제 코드 프로필을 생성하고 복제된 풀에서 두 개의 사본과 동일한 수준의 중복성을 제공합니다. 그러나 스토리지 용량이 25% 더 적게 사용됩니다. 기본 프로필은 k=2 및 m=2 를 정의합니다. 즉 Ceph는 오브젝트 데이터를 4개의 OSD(k+m=4)에 분배하고 Ceph는 데이터 손실 없이 OSD 중 하나를 손실할 수 있습니다.
기본 삭제 코드 프로필은 단일 OSD의 손실을 유지할 수 있습니다. 이 풀은 크기가 2개인 복제 풀과 동일하지만 1TB의 데이터를 저장하려면 2TB 대신 1.5TB가 필요합니다. 기본 프로필을 표시하려면 다음 명령을 사용합니다.
ceph osd erasure-code-profile get default k=2 m=2 plugin=jerasure technique=reed_sol_van
$ ceph osd erasure-code-profile get default
k=2
m=2
plugin=jerasure
technique=reed_sol_van
원시 스토리지 요구 사항을 늘리지 않고 중복성을 개선하기 위해 새 프로필을 생성할 수 있습니다. 예를 들어 k=8 및 m=4 인 프로필은 12개(k+m=12) OSD에 오브젝트를 배포하여 4개(m=4) OSD의 손실을 유지할 수 있습니다. Ceph는 오브젝트를 8 개의 청크로 분할하고 복구를 위해 4 개의 코딩 청크를 계산합니다. 예를 들어 오브젝트 크기가 8MB인 경우 각 데이터 청크는 1MB이고 각 코딩 청크는 데이터 청크와 동일한 크기이며 1MB이기도 합니다. 4개의 OSD가 동시에 실패하더라도 오브젝트가 손실되지 않습니다.
프로파일의 가장 중요한 매개변수는 스토리지 오버헤드와 데이터 지속성을 정의하기 때문에 k,m 및 crush-failure-domain 입니다.
풀을 생성한 후에는 프로필을 변경할 수 없으므로 올바른 프로필을 선택하는 것이 중요합니다. 프로필을 수정하려면 다른 프로필을 사용하여 새 풀을 생성하고 이전 풀에서 새 풀로 오브젝트를 마이그레이션해야 합니다.
예를 들어, 원하는 아키텍처가 스토리지 오버헤드로 두 랙의 손실을 유지해야 하는 경우 다음 프로필을 정의할 수 있습니다.
기본 OSD는 Cryostat AN 오브젝트를 4개(k=4) 데이터 청크로 분할하고 두 개의 추가 청크(m=2)를 생성합니다. m 값은 데이터를 손실하지 않고 동시에 손실될 수 있는 OSD 수를 정의합니다. crush-failure-domain=rack 은 두 개의 청크가 동일한 랙에 저장되지 않도록 하는 CRUSH 규칙을 생성합니다.
Red Hat은 k 및 m 에 대해 다음과 같은 jerasure 코딩 값을 지원합니다.
- k=8 m=3
- k=8 m=4
- k=4 m=2
누락된 OSD 수가 코딩 청크(m) 수와 일치하는 경우 삭제 코딩 풀의 일부 배치 그룹은 불완전한 상태가 됩니다. 손실된 OSD 수가 m 보다 작으면 배치 그룹이 불완전한 상태가 되지 않습니다. 두 경우 모두 데이터 손실이 발생하지 않습니다. 배치 그룹이 불완전한 상태인 경우 삭제 코딩 풀의 min_size 를 일시적으로 줄이면 복구가 가능합니다.
5.2.1. OSD 삭제-코드 프로파일설정 링크 복사링크가 클립보드에 복사되었습니다!
새 삭제 코드 프로필을 생성하려면 다음을 수행합니다.
구문
다음과 같습니다.
- 디렉터리
- 설명
- 삭제 코드 플러그인이 로드되는 디렉터리 이름을 설정합니다.
- 유형
- 문자열
- 필수 항목
- 아니요.
- Default
-
/usr/lib/ceph/erasure-code
- plugin
- 설명
- 삭제 코드 플러그인을 사용하여 코딩 청크를 계산하고 누락된 청크를 복구합니다. 자세한 내용은 Erasure Code Plug-ins 섹션을 참조하십시오.
- 유형
- 문자열
- 필수 항목
- 아니요.
- Default
-
jerasure
- stripe_unit
- 설명
-
스트라이프당 데이터 청크의 데이터 양입니다. 예를 들어, 두 개의 데이터 청크와
stripe_unit=4K가 있는 프로필은 청크 0에 0-4K의 범위를 청크 0, 4K-8K에 청크 1에 다음 8K-12K를 다시 청크 0으로 설정합니다. 최상의 성능을 위해 4K의 배수여야 합니다. 기본값은 풀이 생성될 때 monitor 구성 옵션osd_pool_erasure_code_stripe_unit에서 가져옵니다. 이 프로필을 사용하는 풀의 stripe_width는 이 strip_unit을 곱한 데이터 청크 수입니다. - 유형
- 문자열
- 필수 항목
- 아니요.
- Default
-
4K
- crush-device-class
- 설명
-
장치 클래스 (예:
hdd또는ssd) - 유형
- 문자열
- 필수 항목
- 없음
- Default
-
none, 즉 CRUSH는 클래스에 관계없이 모든 장치를 사용합니다.
- crush-failure-domain
- 설명
-
실패 도메인(예:
host또는rack) - 유형
- 문자열
- 필수 항목
- 없음
- Default
-
host
- key
- 설명
- 나머지 키-값 쌍의 의미 체계는 삭제 코드 플러그인에 의해 정의됩니다.
- 유형
- 문자열
- 필수 항목
- 아니요.
- --force
- 설명
- 동일한 이름으로 기존 프로필을 재정의합니다.
- 유형
- 문자열
- 필수 항목
- 아니요.
5.2.2. OSD 삭제-코드 프로파일제거 링크 복사링크가 클립보드에 복사되었습니다!
삭제 코드 프로필을 제거하려면 다음을 수행합니다.
구문
ceph osd erasure-code-profile rm NAME
ceph osd erasure-code-profile rm NAME
풀에서 프로필을 참조하는 경우 삭제가 실패합니다.
osd erasure-code-profile rm 명령을 사용하여 삭제 코드 프로필을 제거해도 삭제 코드 프로필과 관련된 관련 CRUSH 규칙이 자동으로 삭제되지는 않습니다. Red Hat은 ceph osd crush 규칙을 사용하여 관련 CRUSH 규칙을 수동으로 제거하여 예기치 않은 동작을 방지하기 위해 RULE_NAME 명령을 제거하는 것이 좋습니다.
5.2.3. OSD 삭제-코드 프로파일가져오기 링크 복사링크가 클립보드에 복사되었습니다!
삭제 코드 프로필을 표시하려면 다음을 수행합니다.
구문
ceph osd erasure-code-profile get NAME
ceph osd erasure-code-profile get NAME
5.2.4. OSD 삭제-코드 프로파일나열 링크 복사링크가 클립보드에 복사되었습니다!
모든 삭제 코드 프로필의 이름을 나열하려면 다음을 수행합니다.
구문
ceph osd erasure-code-profile ls
ceph osd erasure-code-profile ls
5.3. Overwrites를 사용하여 삭제 코딩 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 삭제 코딩된 풀은 전체 개체 쓰기 및 추가 기능을 수행하는 Ceph Object Gateway에서만 작동합니다.
덮어쓰기와 함께 삭제 코딩된 풀을 사용하면 Ceph 블록 장치 및 CephFS에서 해당 데이터를 삭제 코딩 풀에 저장할 수 있습니다.
구문
ceph osd pool set ERASURE_CODED_POOL_NAME allow_ec_overwrites true
ceph osd pool set ERASURE_CODED_POOL_NAME allow_ec_overwrites true
예제
[ceph: root@host01 /]# ceph osd pool set ec_pool allow_ec_overwrites true
[ceph: root@host01 /]# ceph osd pool set ec_pool allow_ec_overwrites true
덮어쓰기를 사용하여 코딩된 풀을 활성화하면 BlueStore OSD를 사용하여 풀에만 존재할 수 있습니다. BlueStore의 체크섬은 딥 스크러브 중에 비트 레이드 또는 기타 손상을 감지하는 데 사용됩니다.
코딩된 풀 삭제는 omap을 지원하지 않습니다. Ceph 블록 장치 및 CephFS에서 삭제 코딩된 풀을 사용하려면 데이터를 삭제 코딩 풀에 저장하고 메타데이터를 복제 풀에 저장합니다.
Ceph 블록 장치의 경우 이미지를 생성하는 동안 --data-pool 옵션을 사용합니다.
구문
rbd create --size IMAGE_SIZE_M|G|T --data-pool _ERASURE_CODED_POOL_NAME REPLICATED_POOL_NAME/IMAGE_NAME
rbd create --size IMAGE_SIZE_M|G|T --data-pool _ERASURE_CODED_POOL_NAME REPLICATED_POOL_NAME/IMAGE_NAME
예제
[ceph: root@host01 /]# rbd create --size 1G --data-pool ec_pool rep_pool/image01
[ceph: root@host01 /]# rbd create --size 1G --data-pool ec_pool rep_pool/image01
CephFS에 삭제 코딩 풀을 사용하는 경우 파일 레이아웃에서 덮어쓰기를 설정해야 합니다.
5.4. 삭제 코드 플러그인 링크 복사링크가 클립보드에 복사되었습니다!
Ceph는 플러그인 아키텍처를 사용하여 삭제 코딩 기능을 지원하므로 다양한 유형의 알고리즘을 사용하여 삭제 코딩 풀을 생성할 수 있습니다. Ceph는 Jerasure를 지원합니다.
5.4.1. jerasure deletesure 코드 플러그인을 사용하여 새로운 삭제 코드 프로파일 생성 링크 복사링크가 클립보드에 복사되었습니다!
jerasure 플러그인은 가장 일반적이고 유연한 플러그인입니다. Ceph 삭제 코딩 풀의 기본값이기도 합니다.
jerasure 플러그인은 JerasureH 라이브러리를 캡슐화합니다. 매개변수에 대한 자세한 내용은 jerasure 문서를 참조하십시오.
jerasure 플러그인을 사용하여 새 삭제 코드 프로필을 생성하려면 다음 명령을 실행합니다.
구문
다음과 같습니다.
- k
- 설명
- 각 오브젝트는 data-chunks 부분으로 분할되며 각각 다른 OSD에 저장됩니다.
- 유형
- 정수
- 필수 항목
- 제공됨
- 예제
-
4
- m
- 설명
- 각 오브젝트의 코딩 청크 를 컴퓨팅하여 서로 다른 OSD에 저장합니다. 코딩 청크 수는 데이터 손실 없이 중단할 수 있는 OSD 수이기도 합니다.
- 유형
- 정수
- 필수 항목
- 제공됨
- 예제
- 2
- technique
- 설명
- 더 유연한 기술은 reed_sol_van 입니다; k 및 m 을 설정하는 것으로 충분합니다. cauchy_good 기술은 더 빨라질 수 있지만 신중하게 패킷을 선택해야 합니다. reed_sol_r6_op,liberation,blaum_roth,liber8tion 은 m=2 로만 구성할 수 있다는 점에서 RAID6 동등한 것입니다.
- 유형
- 문자열
- 필수 항목
- 아니요.
- 유효한 설정
-
reed_sol_vanreed_sol_r6_opcauchy_origcauchy_goodliberationblaum_rothliber8tion - Default
-
reed_sol_van
- packetSize
- 설명
- 인코딩은 한 번에 바이트 크기의 패킷에서 수행됩니다. 올바른 패킷 크기를 선택하는 것은 어렵습니다. jerasure 문서에는 이 주제에 대한 광범위한 정보가 포함되어 있습니다.
- 유형
- 정수
- 필수 항목
- 아니요.
- Default
-
2048
- crush-root
- 설명
- 규칙의 첫 번째 단계에 사용된 CRUSH 버킷의 이름입니다. 예를 들어 단계는 기본값을 사용합니다.
- 유형
- 문자열
- 필수 항목
- 아니요.
- Default
- default
- crush-failure-domain
- 설명
- 동일한 실패 도메인이 있는 버킷에 두 개의 청크가 없는지 확인합니다. 예를 들어 실패 도메인이 호스트 인 경우 동일한 호스트에 두 개의 청크가 저장되지 않습니다. 단계 chooseleaf 호스트와 같은 규칙 단계를 생성하는 데 사용됩니다.
- 유형
- 문자열
- 필수 항목
- 아니요.
- Default
-
host
- 디렉터리
- 설명
- 삭제 코드 플러그인이 로드되는 디렉터리 이름을 설정합니다.
- 유형
- 문자열
- 필수 항목
- 아니요.
- Default
-
/usr/lib/ceph/erasure-code
- --force
- 설명
- 동일한 이름으로 기존 프로필을 재정의합니다.
- 유형
- 문자열
- 필수 항목
- 아니요.
5.4.2. CRUSH 배치 제어 링크 복사링크가 클립보드에 복사되었습니다!
기본 CRUSH 규칙은 다른 호스트에 있는 OSD를 제공합니다. 예를 들면 다음과 같습니다.
chunk nr 01234567 step 1 _cDD_cDD step 2 cDDD____ step 3 ____cDDD
chunk nr 01234567
step 1 _cDD_cDD
step 2 cDDD____
step 3 ____cDDD
각 청크마다 정확히 8 개의 OSD가 필요합니다. 호스트가 두 개의 인접한 랙에 있는 경우 첫 번째 랙에 처음 4개의 청크를 배치하고 두 번째 랙에서 마지막 네 개의 청크를 배치할 수 있습니다. 단일 OSD 손실에서 복구하려면 두 랙 사이의 대역폭을 사용할 필요가 없습니다.
예를 들면 다음과 같습니다.
crush-steps='[ [ "choose", "rack", 2 ], [ "chooseleaf", "host", 4 ] ]'
crush-steps='[ [ "choose", "rack", 2 ], [ "chooseleaf", "host", 4 ] ]'
유형 랙 의 두 개의 크루쉬 버킷을 선택하고 각각에 대해 유형 host 의 다른 버킷에 있는 4개의 OSD를 선택하는 규칙을 생성합니다.
세분화된 제어를 위해 규칙을 수동으로 생성할 수도 있습니다.