검색

4장. Ceph 스토리지용 클러스터 확장

download PDF

스토리지 관리자는 2개의 사이트 클러스터로 스트레치 모드로 전환하여 확장 클러스터를 구성할 수 있습니다.

Red Hat Ceph Storage는 CRUSH 맵에 무작위로 배포된 실패와 함께 네트워크 및 클러스터로 인해 Ceph OSD의 손실에도 불구하고 사용할 수 있습니다. 여러 OSD가 종료되면 나머지 OSD 및 모니터가 계속 작동합니다.

그러나 이는 Ceph 클러스터의 중요한 부분이 단일 네트워크 구성 요소만 사용할 수 있는 일부 확장 클러스터 구성에 적합하지 않을 수 있습니다. 이 예제에서는 여러 데이터 센터에 있는 단일 클러스터로, 사용자가 전체 데이터 센터의 손실을 유지하려고 합니다.

표준 구성은 두 개의 데이터 센터가 있습니다. 기타 구성은 클라우드 또는 가용성 영역에 있습니다. 각 사이트에는 두 개의 데이터 사본이 있으므로 복제 크기는 4입니다. 세 번째 사이트에는 연결 장치 모니터가 있어야 합니다. 이 모니터는 기본 사이트에 비해 가상 머신 또는 대기 시간이 길 수 있습니다. 이 모니터는 네트워크 연결이 실패하고 두 데이터 센터 모두 활성 상태로 유지되는 경우 데이터를 복원할 사이트 중 하나를 선택합니다.

참고

표준 Ceph 구성은 네트워크 또는 데이터 센터의 많은 실패로 인해 유지되며 데이터 일관성은 손상되지 않습니다. 실패 후 충분한 Ceph 서버를 복원하면 복구됩니다. 데이터 센터가 손실되었지만 모니터의 쿼럼을 형성하고 풀의 min_size 또는 크기를 충족하기 위해 다시 복제하는 CRUSH 규칙을 충족하기에 충분한 사본으로 모든 데이터를 사용할 수 있는 경우 Ceph는 가용성을 유지합니다.

참고

확장 클러스터의 전원을 끄는 추가 단계는 없습니다. 자세한 내용은 Red Hat Ceph Storage 클러스터 전원을 끄고 재부팅하는 것을 확인할 수 있습니다.

클러스터 장애 확장

Red Hat Ceph Storage는 데이터 무결성 및 일관성을 손상시키지 않습니다. 네트워크 오류 또는 노드 손실이 발생하고 서비스를 복원할 수 있는 경우에도 Ceph는 일반 기능으로 돌아갑니다.

그러나 Ceph의 일관성 및 크기 조정 제약 조건을 충족하기에 충분한 서버가 있거나 예기치 않게 제약 조건을 충족하지 않는 경우에도 데이터 가용성을 손실하는 경우가 있습니다.

첫 번째 중요한 유형의 오류는 일관되지 않은 네트워크에 의해 발생합니다. 네트워크 분할이 있는 경우 Ceph에서 기본 OSD를 복제할 수 없는 경우에도 작업 배치 그룹(PG) 세트에서 OSD를 아래로 표시할 수 없습니다. 이 경우 Ceph가 지속성 보장을 충족할 수 없기 때문에 I/O가 허용되지 않습니다.

두 번째 중요한 실패 범주는 데이터가 데이터 입력 간에 복제된 것처럼 보이지만 제약 조건은 이를 보장하는 데 충분하지 않습니다. 예를 들어 데이터 센터 A 및 B가 있을 수 있으며 CRUSH 규칙은 세 개의 사본을 대상으로 하고 각 데이터 센터에 min_size2 인 복사본을 배치합니다. PG는 사이트 A에 있는 두 개의 사본과 사이트 B에 복사본이 없는 상태에서 활성화될 수 있습니다. 즉, 사이트 A가 손실되면 데이터가 손실되고 Ceph가 작동할 수 없습니다. 이 상황은 표준 CRUSH 규칙으로 방지하기 어렵습니다.

4.1. 스토리지 클러스터의 스트레치 모드

확장 클러스터를 구성하려면 스트레치 모드로 전환해야 합니다. 스트레치 모드가 활성화되면 Ceph OSD는 데이터 센터 간에 피어링할 때만 PG를 활성 상태로 사용하거나 지정한 다른 CRUSH 버킷 유형이 둘 다 활성 상태라고 가정합니다. 풀 크기는 기본 3에서 4로 증가하고 각 사이트에 복사본이 두 개씩 증가합니다.

확장 모드에서는 Ceph OSD가 동일한 데이터 센터 내의 모니터에만 연결할 수 있습니다. 새 모니터는 지정된 위치 없이 클러스터에 참여할 수 없습니다.

데이터 센터의 모든 OSD 및 모니터에 한 번에 액세스할 수 없게 되면 남아 있는 데이터 센터가 성능이 저하된 스트레치 모드가 됩니다. 이렇게 하면 경고가 발행되고 min_size1 로 줄이고 클러스터가 나머지 사이트의 데이터로 활성 상태에 도달할 수 있습니다.

참고

풀 크기가 변경되지 않기 때문에 성능이 저하된 상태도 풀이 너무 작다는 경고를 트리거합니다. 그러나 특수 스트레치 모드 플래그를 사용하면 OSD에서 나머지 데이터 센터에 추가 복사본을 생성하지 못하므로 여전히 2개의 복사본을 유지합니다.

누락된 데이터 센터가 다시 시도되면 클러스터가 복구 스트레치 모드로 전환됩니다. 이렇게 하면 경고가 변경되고 피어링을 허용하지만 데이터 센터의 OSD만 있으면 전체 시간이 걸렸습니다.

모든 PG가 알려진 상태에 있고 성능이 저하되거나 불완전하지 않으면 클러스터는 일반 스트레치 모드로 돌아가 경고를 종료하고 min_size 를 시작 값 2 로 복원합니다. 클러스터에 다시 두 사이트 피어가 있어야 전체 시간을 유지하는 사이트뿐만 아니라 피어가 필요하므로 필요한 경우 다른 사이트로 장애 조치 할 수 있습니다.

스트레치 모드 제한

  • 이 모드가 입력되면 스트레치 모드를 종료할 수 없습니다.
  • 스트레치 모드의 클러스터와 함께 삭제 코딩된 풀을 사용할 수 없습니다. 삭제 코딩된 풀을 사용하여 스트레치 모드로 전환하거나 스트레치 모드가 활성 상태일 때 삭제 코딩된 풀을 생성할 수 없습니다.
  • 두 사이트 이상의 스트레치 모드가 지원됩니다.
  • 두 사이트의 가중치는 동일해야 합니다. 그렇지 않으면 다음과 같은 오류가 발생합니다.

    예제

    [ceph: root@host01 /]# ceph mon enable_stretch_mode host05 stretch_rule datacenter
    
    Error EINVAL: the 2 datacenter instances in the cluster have differing weights 25947 and 15728 but stretch mode currently requires they be the same!

    두 사이트 모두에서 동일한 가중치를 달성하려면 두 사이트에 배포된 Ceph OSD는 크기가 같아야 합니다. 즉, 첫 번째 사이트의 스토리지 용량은 두 번째 사이트의 스토리지 용량과 동일합니다.

  • 적용되지는 않지만 각 사이트에서 두 개의 Ceph 모니터를 실행하고 총 5 개에 대해 묶인 모니터를 실행해야 합니다. 이는 OSD가 스트레치 모드일 때 자체 사이트의 모니터에만 연결할 수 있기 때문입니다.
  • 각 사이트에 두 개의 복사본을 제공하는 고유한 CRUSH 규칙을 생성해야 하며 두 사이트 모두에서 총 4개의 복사본을 제공해야 합니다.
  • 기본 크기가 아닌 기존 풀이 있거나 min_size 인 경우 스트레치 모드를 활성화할 수 없습니다.
  • 성능이 저하된 경우 클러스터는 min_size 1 로 실행되므로 all-flash OSD가 있는 스트레치 모드만 사용해야 합니다. 이렇게 하면 연결이 복원되면 복구에 필요한 시간이 최소화되고 데이터 손실 가능성을 최소화합니다.

추가 리소스

4.1.1. 데몬의 CRUSH 위치 설정

확장 모드로 전환하기 전에 CRUSH 위치를 Red Hat Ceph Storage 클러스터의 데몬으로 설정하여 클러스터를 준비해야 합니다. 이 작업을 수행하는 방법은 다음 두 가지가 있습니다.

  • 배포의 일부로 위치가 호스트에 추가되는 서비스 구성 파일을 통해 클러스터를 부트스트랩합니다.
  • 클러스터가 배포된 후 ceph osd crush add-bucketceph osd crush move 명령을 통해 수동으로 위치를 설정합니다.

방법 1: 클러스터 부팅

사전 요구 사항

  • 노드에 대한 루트 수준 액세스.

프로세스

  1. 새 스토리지 클러스터를 부트 스트랩하는 경우 노드를 Red Hat Ceph Storage 클러스터에 추가하는 서비스 구성 .yaml 파일을 생성하고 서비스가 실행되어야 하는 위치에 대한 특정 레이블을 설정할 수 있습니다.

    예제

    service_type: host
    addr: host01
    hostname: host01
    location:
      root: default
      datacenter: DC1
    labels:
      - osd
      - mon
      - mgr
    ---
    service_type: host
    addr: host02
    hostname: host02
    location:
      datacenter: DC1
    labels:
      - osd
      - mon
    ---
    service_type: host
    addr: host03
    hostname: host03
    location:
      datacenter: DC1
    labels:
      - osd
      - mds
      - rgw
    ---
    service_type: host
    addr: host04
    hostname: host04
    location:
      root: default
      datacenter: DC2
    labels:
      - osd
      - mon
      - mgr
    ---
    service_type: host
    addr: host05
    hostname: host05
    location:
      datacenter: DC2
    labels:
      - osd
      - mon
    ---
    service_type: host
    addr: host06
    hostname: host06
    location:
      datacenter: DC2
    labels:
      - osd
      - mds
      - rgw
    ---
    service_type: host
    addr: host07
    hostname: host07
    labels:
      - mon
    ---
    service_type: mon
    placement:
      label: "mon"
    ---
    service_id: cephfs
    placement:
      label: "mds"
    ---
    service_type: mgr
    service_name: mgr
    placement:
      label: "mgr"
    ---
    service_type: osd
    service_id: all-available-devices
    service_name: osd.all-available-devices
    placement:
      label: "osd"
    spec:
      data_devices:
        all: true
    ---
    service_type: rgw
    service_id: objectgw
    service_name: rgw.objectgw
    placement:
      count: 2
      label: "rgw"
    spec:
      rgw_frontend_port: 8080

  2. --apply-spec 옵션을 사용하여 스토리지 클러스터를 부트스트랩합니다.

    구문

    cephadm bootstrap --apply-spec CONFIGURATION_FILE_NAME --mon-ip MONITOR_IP_ADDRESS --ssh-private-key PRIVATE_KEY --ssh-public-key PUBLIC_KEY --registry-url REGISTRY_URL --registry-username USER_NAME --registry-password PASSWORD

    예제

    [root@host01 ~]# cephadm bootstrap --apply-spec initial-config.yaml --mon-ip 10.10.128.68 --ssh-private-key /home/ceph/.ssh/id_rsa --ssh-public-key /home/ceph/.ssh/id_rsa.pub --registry-url registry.redhat.io --registry-username myuser1 --registry-password mypassword1

    중요

    cephadm bootstrap 명령과 함께 다양한 명령 옵션을 사용할 수 있습니다. 그러나 서비스 구성 파일을 사용하고 호스트 위치를 구성하려면 항상 --apply-spec 옵션을 포함합니다.

방법 2: 배포 후 위치 설정

사전 요구 사항

  • 노드에 대한 루트 수준 액세스.

프로세스

  1. tiebreaker 모니터의 위치를 CRUSH 맵에 설정하려는 두 개의 버킷을 CRUSH 맵으로 추가하여 버킷 유형을 데이터 센터로 지정합니다.

    구문

    ceph osd crush add-bucket BUCKET_NAME BUCKET_TYPE

    예제

    [ceph: root@host01 /]# ceph osd crush add-bucket DC1 datacenter
    [ceph: root@host01 /]# ceph osd crush add-bucket DC2 datacenter

  2. root=default 아래의 버킷을 이동합니다.

    구문

    ceph osd crush move BUCKET_NAME root=default

    예제

    [ceph: root@host01 /]# ceph osd crush move DC1 root=default
    [ceph: root@host01 /]# ceph osd crush move DC2 root=default

  3. 필요한 CRUSH 배치에 따라 OSD 호스트를 이동합니다.

    구문

    ceph osd crush move HOST datacenter=DATACENTER

    예제

    [ceph: root@host01 /]# ceph osd crush move host01 datacenter=DC1

4.1.2. 스트레치 모드 입력

새로운 스트레치 모드는 두 개의 사이트를 처리하도록 설계되었습니다. 2개 사이트 클러스터에서 구성 요소 가용성 중단의 위험이 줄어 듭니다.

사전 요구 사항

  • 노드에 대한 루트 수준 액세스.
  • CRUSH 위치는 호스트로 설정됩니다.

프로세스

  1. CRUSH 맵과 일치하는 각 모니터의 위치를 설정합니다.

    구문

    ceph mon set_location HOST datacenter=DATACENTER

    예제

    [ceph: root@host01 /]# ceph mon set_location host01 datacenter=DC1
    [ceph: root@host01 /]# ceph mon set_location host02 datacenter=DC1
    [ceph: root@host01 /]# ceph mon set_location host04 datacenter=DC2
    [ceph: root@host01 /]# ceph mon set_location host05 datacenter=DC2
    [ceph: root@host01 /]# ceph mon set_location host07 datacenter=DC3

  2. 각 데이터 센터에 두 개의 복사본을 배치하는 CRUSH 규칙을 생성합니다.

    구문

    ceph osd getcrushmap > COMPILED_CRUSHMAP_FILENAME
    crushtool -d COMPILED_CRUSHMAP_FILENAME -o DECOMPILED_CRUSHMAP_FILENAME

    예제

    [ceph: root@host01 /]# ceph osd getcrushmap > crush.map.bin
    [ceph: root@host01 /]# crushtool -d crush.map.bin -o crush.map.txt

    1. 해제된 CRUSH 맵 파일을 편집하여 새 규칙을 추가합니다.

      예제

      rule stretch_rule {
              id 1 1
              type replicated
              min_size 1
              max_size 10
              step take DC1 2
              step chooseleaf firstn 2 type host
              step emit
              step take DC2 3
              step chooseleaf firstn 2 type host
              step emit
      }

      1
      규칙 ID 고유해야 합니다. 이 예에서는 id 0 이 있는 규칙이 하나만 있으므로 id 1 이 사용되지만 기존 규칙 수에 따라 다른 규칙 ID를 사용해야 할 수 있습니다.
      2 3
      이 예제에는 DC1DC2 라는 두 개의 데이터 센터 버킷이 있습니다.
      참고

      이 규칙은 클러스터에 데이터 센터 DC1 에 대한 읽기 방지를 제공합니다. 따라서 모든 읽기 또는 쓰기는 DC1 에 배치된 Ceph OSD를 통해 수행됩니다.

      이 방법이 바람직하지 않고 읽기 또는 쓰기를 영역에 균등하게 분산하는 경우 CRUSH 규칙은 다음과 같습니다.

      예제

      rule stretch_rule {
      id 1
      type replicated
      min_size 1
      max_size 10
      step take default
      step choose firstn 0 type datacenter
      step chooseleaf firstn 2 type host
      step emit
      }

      이 규칙에서는 데이터 센터가 임의로 자동으로 선택됩니다.

      firstnindep 옵션에 대한 자세한 내용은 CRUSH 규칙을 참조하십시오.

  3. CRUSH 맵을 삽입하여 클러스터에서 규칙을 사용할 수 있도록 합니다.

    구문

    crushtool -c DECOMPILED_CRUSHMAP_FILENAME -o COMPILED_CRUSHMAP_FILENAME
    ceph osd setcrushmap -i COMPILED_CRUSHMAP_FILENAME

    예제

    [ceph: root@host01 /]# crushtool -c crush.map.txt -o crush2.map.bin
    [ceph: root@host01 /]# ceph osd setcrushmap -i crush2.map.bin

  4. 연결 모드에서 모니터를 실행하지 않으면 선택 전략을 connectivity 로 설정합니다.

    예제

    [ceph: root@host01 /]# ceph mon set election_strategy connectivity

  5. 데이터 센터 간에 분할되도록 연결 장치 모니터의 위치를 설정하여 스트레치 모드로 전환합니다.

    구문

    ceph mon set_location HOST datacenter=DATACENTER
    ceph mon enable_stretch_mode HOST stretch_rule datacenter

    예제

    [ceph: root@host01 /]# ceph mon set_location host07 datacenter=DC3
    [ceph: root@host01 /]# ceph mon enable_stretch_mode host07 stretch_rule datacenter

    이 예에서 모니터 mon.host07 은 타이블러입니다.

    중요

    tiebreaker 모니터의 위치는 이전에 비대신 모니터를 설정한 데이터 센터와 달라야 합니다. 위의 예에서 데이터 센터 DC3 입니다.

    중요

    이 데이터 센터를 CRUSH 맵에 추가하지 마십시오. 이 데이터 센터를 스트레치 모드로 전환하려고 할 때 다음과 같은 오류가 발생합니다.

    Error EINVAL: there are 3 datacenters in the cluster but stretch mode currently only works with 2!
    참고

    Ceph 배포를 위해 자체 툴링을 작성하는 경우 ceph mon set_location 명령을 실행하는 대신 모니터를 부팅할 때 새로운 --set-crush-location 옵션을 사용할 수 있습니다. 이 옵션은 enable_stretch_mode 명령을 실행할 때 지정한 버킷 유형과 일치해야 하는 ceph-mon --set-crush-location 'datacenter=DC1' 과 같은 단일 bucket=location 쌍만 허용합니다.

  6. 스트레치 모드가 성공적으로 활성화되었는지 확인합니다.

    예제

    [ceph: root@host01 /]# ceph osd dump
    
    epoch 361
    fsid 1234ab78-1234-11ed-b1b1-de456ef0a89d
    created 2023-01-16T05:47:28.482717+0000
    modified 2023-01-17T17:36:50.066183+0000
    flags sortbitwise,recovery_deletes,purged_snapdirs,pglog_hardlimit
    crush_version 31
    full_ratio 0.95
    backfillfull_ratio 0.92
    nearfull_ratio 0.85
    require_min_compat_client luminous
    min_compat_client luminous
    require_osd_release quincy
    stretch_mode_enabled true
    stretch_bucket_count 2
    degraded_stretch_mode 0
    recovering_stretch_mode 0
    stretch_mode_bucket 8

    stretch_mode_enabledtrue 로 설정해야 합니다. 스트레치 버킷 수, 스트레치 모드 버킷, 스트레치 모드의 성능이 저하되거나 복구되는 경우에도 볼 수 있습니다.

  7. 모니터가 적절한 위치에 있는지 확인합니다.

    예제

    [ceph: root@host01 /]# ceph mon dump
    
    epoch 19
    fsid 1234ab78-1234-11ed-b1b1-de456ef0a89d
    last_changed 2023-01-17T04:12:05.709475+0000
    created 2023-01-16T05:47:25.631684+0000
    min_mon_release 16 (pacific)
    election_strategy: 3
    stretch_mode_enabled 1
    tiebreaker_mon host07
    disallowed_leaders host07
    0: [v2:132.224.169.63:3300/0,v1:132.224.169.63:6789/0] mon.host07; crush_location {datacenter=DC3}
    1: [v2:220.141.179.34:3300/0,v1:220.141.179.34:6789/0] mon.host04; crush_location {datacenter=DC2}
    2: [v2:40.90.220.224:3300/0,v1:40.90.220.224:6789/0] mon.host01; crush_location {datacenter=DC1}
    3: [v2:60.140.141.144:3300/0,v1:60.140.141.144:6789/0] mon.host02; crush_location {datacenter=DC1}
    4: [v2:186.184.61.92:3300/0,v1:186.184.61.92:6789/0] mon.host05; crush_location {datacenter=DC2}
    dumped monmap epoch 19

    또한 어떤 모니터가 묶인 모니터와 모니터 선택 전략을 확인할 수 있습니다.

4.1.3. 스트레치 모드에서 OSD 호스트 추가

확장 모드에서 Ceph OSD를 추가할 수 있습니다. 절차는 스트레치 모드가 활성화되지 않은 클러스터에서 OSD 호스트를 추가하는 것과 유사합니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • 클러스터에서 활성화된 스트레치 모드입니다.
  • 노드에 대한 루트 수준 액세스.

프로세스

  1. OSD를 배포할 사용 가능한 장치를 나열합니다.

    구문

    ceph orch device ls [--hostname=HOST_1 HOST_2] [--wide] [--refresh]

    예제

    [ceph: root@host01 /]# ceph orch device ls

  2. 특정 호스트 또는 사용 가능한 모든 장치에 OSD를 배포합니다.

    • 특정 호스트의 특정 장치에서 OSD를 생성합니다.

      구문

      ceph orch daemon add osd HOST:DEVICE_PATH

      예제

      [ceph: root@host01 /]# ceph orch daemon add osd host03:/dev/sdb

    • 사용 가능한 사용되지 않는 장치에 OSD를 배포합니다.

      중요

      이 명령은 배치된 WAL 및 DB 장치를 생성합니다. 공동 배치되지 않은 장치를 생성하려면 이 명령을 사용하지 마십시오.

      예제

      [ceph: root@host01 /]# ceph orch apply osd --all-available-devices

  3. CRUSH 버킷 아래의 OSD 호스트를 이동합니다.

    구문

    ceph osd crush move HOST datacenter=DATACENTER

    예제

    [ceph: root@host01 /]# ceph osd crush move host03 datacenter=DC1
    [ceph: root@host01 /]# ceph osd crush move host06 datacenter=DC2

    참고

    두 사이트 모두에 동일한 토폴로지 노드를 추가해야 합니다. 호스트가 한 사이트에만 추가되면 문제가 발생할 수 있습니다.

추가 리소스

  • Ceph OSD 추가 에 대한 자세한 내용은 OSD 추가를 참조하십시오.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.