2.7. CRUSH 규칙
CRUSH 규칙은 Ceph 클라이언트가 오브젝트를 저장하기 위해 버킷과 기본 OSD를 선택하는 방법과 기본 OSD가 버킷 및 보조 OSD를 선택하는 방법과 복제본 또는 코딩 청크를 저장하는 방법을 정의합니다. 예를 들어 두 개의 오브젝트 복제본에 대해 SSD에서 지원하는 대상 OSD 쌍을 선택하는 규칙과 세 개의 복제본에서 다른 데이터 센터의 SAS 드라이브에서 지원하는 세 개의 대상 OSD를 선택하는 또 다른 규칙을 만들 수 있습니다.
규칙은 다음 형식을 사용합니다.
rule <rulename> { id <unique number> type [replicated | erasure] min_size <min-size> max_size <max-size> step take <bucket-type> [class <class-name>] step [choose|chooseleaf] [firstn|indep] <N> <bucket-type> step emit }
rule <rulename> {
id <unique number>
type [replicated | erasure]
min_size <min-size>
max_size <max-size>
step take <bucket-type> [class <class-name>]
step [choose|chooseleaf] [firstn|indep] <N> <bucket-type>
step emit
}
- id
- 설명
- 규칙을 식별하기 위한 고유한 전체 번호입니다.
- 목적
- 규칙 마스크의 구성 요소입니다.
- 유형
- 정수
- 필수 항목
- 있음
- 기본값
-
0
- type
- 설명
- 코딩된 스토리지 드라이브 복제 또는 삭제 규칙에 대해 설명합니다.
- 목적
- 규칙 마스크의 구성 요소입니다.
- 유형
- 문자열
- 필수 항목
- 있음
- 기본값
-
replicated
- 유효한 값
-
현재
복제
만
- min_size
- 설명
- 풀이 이 숫자보다 복제본을 더 적게 만드는 경우 CRUSH는 이 규칙을 선택하지 않습니다.
- 유형
- 정수
- 목적
- 규칙 마스크의 구성 요소입니다.
- 필수 항목
- 있음
- 기본값
-
1
- max_size
- 설명
- 풀이 이 번호보다 복제본을 더 많이 만드는 경우 CRUSH는 이 규칙을 선택하지 않습니다.
- 유형
- 정수
- 목적
- 규칙 마스크의 구성 요소입니다.
- 필수 항목
- 있음
- 기본값
-
10
- Step take <bucket-name> [class <class-name>]
- 설명
- 버킷 이름을 가져와서 트리 반복을 시작합니다.
- 목적
- 규칙의 구성 요소입니다.
- 필수 항목
- 있음
- 예제
-
Step take data
step take data class ssd
- step select firstn <num> type <bucket-type>
- 설명
지정된 유형의 버킷 수를 선택합니다. 수는 일반적으로 풀의 복제본 수(즉, 풀 크기)입니다.
-
<
;num> == 0 인
경우pool-num-replicas
버킷(사용 가능한 모든)을 선택합니다. -
<
num> > 0 && < pool-num-replicas
이면 여러 버킷을 선택합니다. -
&
lt;num> < 0
이면pool-num-replicas - {num}
을 의미합니다.
-
<
- 목적
- 규칙의 구성 요소입니다.
- 사전 요구 사항
-
단계를 따르거나
.단계를
선택합니다 - 예제
-
Step select firstn 1 type row
- Step selectleaf firstn <num> type <bucket-type>
- 설명
{bucket-type}
의 버킷을 선택하고 버킷 세트에 있는 각 버킷의 하위 트리에서 리프 노드를 선택합니다. 집합의 버킷 수는 일반적으로 풀의 복제본 수(즉, 풀 크기)입니다.-
<
;num> == 0 인
경우pool-num-replicas
버킷(사용 가능한 모든)을 선택합니다. -
<
num> > 0 && < pool-num-replicas
이면 여러 버킷을 선택합니다. -
<
;num> < 0
이면pool-num-replicas - <num> 을 의미합니다
.
-
<
- 목적
- 규칙의 구성 요소입니다. 사용량은 두 단계를 사용하여 장치를 선택할 필요가 없습니다.
- 사전 요구 사항
-
다음
단계는 단계 또는
.단계를
선택합니다 - 예제
-
Step selectleaf firstn 0 type row
- Step emit
- 설명
- 현재 값을 출력하고 스택을 의미합니다. 일반적으로 규칙의 끝에서 사용되지만 동일한 규칙의 다른 트리에서 선택하는 데 사용될 수도 있습니다.
- 목적
- 규칙의 구성 요소입니다.
- 사전 요구 사항
-
다음
단계는 을 선택합니다
. - 예제
-
Step emit
- FirstN vdep 비교
- 설명
-
CRUSH 맵에서 OSD가 다운된 경우 CRUSH가 사용하는 대체 전략을 제어합니다. 이 규칙을 복제 풀과 함께 사용해야 하는 경우
먼저
수행해야 하며 소거 코드된 풀의 경우 이 규칙을 사용하지 않아야합니다
. - 예제
-
PG가 OSD 1, 2, 3, 4, 5에 저장되어 있습니다. 첫 번째 시나리오에서 CRUSH는
첫
번째 모드를 사용하여 1 및 2를 선택한 다음 3을 선택하지만 4 및 5를 다시 시도하여 4 및 5를 선택한 다음 계속 진행합니다. 마지막 CRUSH 매핑 변경은 1, 2, 3, 4, 5 에서 1, 2, 4, 5, 6 입니다. 두 번째 시나리오에서는 삭제 코드된 풀의dep
모드를 사용하여, CRUSH가 실패한 OSD 3을 다시 선택하고, 6을 선택하여 1, 2, 3, 4, 5 에서 1, 2, 6, 4, 5 로부터 최종 변환을 시도합니다.
지정된 CRUSH 규칙을 여러 풀에 할당할 수 있지만 단일 풀에 여러 CRUSH 규칙이 있을 수 없습니다.
2.7.1. 규칙 나열
명령줄에서 CRUSH 규칙을 나열하려면 다음을 실행합니다.
ceph osd crush rule list ceph osd crush rule ls
ceph osd crush rule list
ceph osd crush rule ls
2.7.2. 규칙 덤프
특정 CRUSH 규칙의 내용을 덤프하려면 다음을 실행합니다.
ceph osd crush rule dump {name}
ceph osd crush rule dump {name}
2.7.3. 간단한 규칙 추가
CRUSH 규칙을 추가하려면 사용하려는 계층 구조의 루트 노드, 복제할 버킷 유형(예: 'rack', 'row' 등) 및 버킷 선택 모드를 지정해야 합니다.
ceph osd crush rule create-simple {rulename} {root} {bucket-type} {firstn|indep}
ceph osd crush rule create-simple {rulename} {root} {bucket-type} {firstn|indep}
Ceph는 지정한 유형의 chooseleaf
및 1개의 버킷으로 규칙을 만듭니다.
예를 들어 다음과 같습니다.
ceph osd crush rule create-simple deleteme default host firstn
ceph osd crush rule create-simple deleteme default host firstn
다음 규칙을 생성합니다.
{ "id": 1, "rule_name": "deleteme", "type": 1, "min_size": 1, "max_size": 10, "steps": [ { "op": "take", "item": -1, "item_name": "default"}, { "op": "chooseleaf_firstn", "num": 0, "type": "host"}, { "op": "emit"}]}
{ "id": 1,
"rule_name": "deleteme",
"type": 1,
"min_size": 1,
"max_size": 10,
"steps": [
{ "op": "take",
"item": -1,
"item_name": "default"},
{ "op": "chooseleaf_firstn",
"num": 0,
"type": "host"},
{ "op": "emit"}]}
2.7.4. 복제된 규칙 추가
복제된 풀에 대한 CRUSH 규칙을 만들려면 다음을 실행합니다.
ceph osd crush rule create-replicated <name> <root> <failure-domain> <class>
# ceph osd crush rule create-replicated <name> <root> <failure-domain> <class>
다음과 같습니다.
-
<
;name
>: 규칙의 이름입니다. -
<
root
>: CRUSH 계층 구조의 루트입니다. -
<failure-domain
> : 실패 도메인 예:host
또는rack
. -
<
class
>: 스토리지 장치 클래스입니다. 예:hdd
또는ssd
.
예를 들어 다음과 같습니다.
ceph osd crush rule create-replicated fast default host ssd
# ceph osd crush rule create-replicated fast default host ssd
2.7.5. 평가 코드 규칙 추가
삭제 코딩된 풀과 함께 사용할 NetNamespace 규칙을 추가하려면 규칙 이름과 삭제 코드 프로필을 지정할 수 있습니다.
구문
ceph osd crush rule create-erasure {rulename} {profilename}
ceph osd crush rule create-erasure {rulename} {profilename}
예제
[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. 규칙 제거
규칙을 제거하려면 다음을 실행하고 CRUSH 규칙 이름을 지정합니다.
ceph osd crush rule rm {name}
ceph osd crush rule rm {name}