5.3. Ceph Storage 노드 디스크 레이아웃 매핑

컨테이너화된 Ceph Storage를 배포할 때 디스크 레이아웃을 매핑하고 Ceph OSD 서비스의 전용 블록 장치를 지정해야 합니다. 이전에 만든 환경 파일에서 이 매핑을 수행하여 사용자 지정 Ceph 매개 변수 /home/stack/templates/ceph-config.yaml 을 정의할 수 있습니다.

parameter_defaultsCephAnsibleDisksConfig 리소스를 사용하여 디스크 레이아웃을 매핑합니다. 이 리소스는 다음 변수를 사용합니다.

Variable필수 여부기본값(설정되지 않은 경우)설명

osd_scenario

있음

lvm

알림: 기본값은 lvm 입니다.

lvm 값을 사용하면 ceph-volume 을 사용하여 OSD, block.db 및 BlueStore WAL 장치를 구성할 수 있습니다.

장치

있음

없음. 변수를 설정해야 합니다.

노드의 OSD에 사용할 블록 장치 목록입니다.

dedicated_devices

예 (osd _scenario할당되지 않은경우에만)

장치

devices 매개 변수의 각 항목을 전용 저널링 블록 장치에 매핑하는 블록 장치 목록입니다. osd_scenario=non-collocated 경우에만 이 변수를 사용할 수 있습니다.

dmcrypt

없음

false

OSD에 저장된 데이터(true) 또는 암호화되지 않은(false) 여부를설정합니다.

osd_objectstore

없음

블루스토어

알림: 기본값은 bluestore 입니다.

Ceph에서 사용하는 스토리지 백엔드를 설정합니다.

알림: 값이 기본적으로 bluestore로 지정되지만, 집계된 또는 비축정된 시나리오에서 osd_scenariofilestore 로 설정할 수 있습니다. dedicated_devices 가 저널링 디스크를 식별하는 비차별 시나리오에서 값을 filestore 로 설정할 수 있습니다. 장치에 정의된 디스크를 파티셔닝하고 동일한 장치에 OSD 데이터와 저널링 데이터를 저장하는 집계된 시나리오에서 값을 filestore 로 설정할 수 있습니다.

5.3.1. BlueStore 사용

절차

  1. Ceph OSD로 사용할 블록 장치를 지정하려면 다음 스니펫의 변형을 사용합니다.

    parameter_defaults:
      CephAnsibleDisksConfig:
        devices:
          - /dev/sdb
          - /dev/sdc
          - /dev/sdd
          - /dev/nvme0n1
        osd_scenario: lvm
        osd_objectstore: bluestore
  2. /dev/nvme0n1 은 고성능 장치 클래스에 있으므로 예제 parameter_defaults/dev/sdb, /dev/ sdc 및 /dev/ sdd 에서 실행되는 OSD 3개를 생성합니다. 3개의 OSD는 /dev/nvme0n1block.db 및 BlueStore WAL 장치로 사용합니다. ceph-volume 툴은 batch 하위 명령을 사용하여 이 작업을 수행합니다. 각 Ceph Storage 노드에 대해 동일한 구성이 중복되며 일관된 하드웨어가 가정됩니다. block.db 및 BlueStore WAL 데이터가 OSD와 동일한 디스크에 있는 경우 매개변수 기본값을 다음과 같이 변경합니다.

    parameter_defaults:
      CephAnsibleDisksConfig:
        devices:
          - /dev/sdb
          - /dev/sdc
          - /dev/sdd
        osd_scenario: lvm
        osd_objectstore: bluestore

5.3.2. 영구 이름이 있는 장치 참조

절차

  1. 일부 노드에서는 재부팅하는 동안 /dev/sdb/dev/sdc 와 같은 디스크 경로가 동일한 블록 장치를 가리키지 않을 수 있습니다. Ceph Storage 노드의 경우 /dev/disk/by-path/ symlink로 각 디스크를 지정하여 배포 전체에서 일관된 블록 장치 매핑을 보장합니다.

    parameter_defaults:
      CephAnsibleDisksConfig:
        devices:
          - /dev/disk/by-path/pci-0000:03:00.0-scsi-0:0:10:0
          - /dev/disk/by-path/pci-0000:03:00.0-scsi-0:0:11:0
    
        dedicated_devices:
          - /dev/nvme0n1
          - /dev/nvme0n1
  2. 선택 사항: 오버클라우드를 배포하기 전에 OSD 장치 목록을 설정해야 하므로 디스크 장치의 PCI 경로를 식별하고 설정할 수 없습니다. 이 경우 인트로스펙션 중 블록 장치에 대한 /dev/disk/by-path/symlink 데이터를 수집합니다.

    다음 예제에서는 첫 번째 명령을 실행하여 b08-h03-r620-hci 서버에 대한 언더클라우드 오브젝트 스토리지 서비스(swift)에서 인트로스펙션 데이터를 다운로드하고 b08-h03-r620-hci.json 이라는 파일에 데이터를 저장합니다. "by-path"에 대해 grep에 대해 두 번째 명령을 실행합니다. 이 명령의 출력에는 디스크를 식별하는 데 사용할 수 있는 고유한 /dev/disk/by-path 값이 포함되어 있습니다.

    (undercloud) [stack@b08-h02-r620 ironic]$ openstack baremetal introspection data save b08-h03-r620-hci | jq . > b08-h03-r620-hci.json
    (undercloud) [stack@b08-h02-r620 ironic]$ grep by-path b08-h03-r620-hci.json
            "by_path": "/dev/disk/by-path/pci-0000:02:00.0-scsi-0:2:0:0",
            "by_path": "/dev/disk/by-path/pci-0000:02:00.0-scsi-0:2:1:0",
            "by_path": "/dev/disk/by-path/pci-0000:02:00.0-scsi-0:2:3:0",
            "by_path": "/dev/disk/by-path/pci-0000:02:00.0-scsi-0:2:4:0",
            "by_path": "/dev/disk/by-path/pci-0000:02:00.0-scsi-0:2:5:0",
            "by_path": "/dev/disk/by-path/pci-0000:02:00.0-scsi-0:2:6:0",
            "by_path": "/dev/disk/by-path/pci-0000:02:00.0-scsi-0:2:7:0",
            "by_path": "/dev/disk/by-path/pci-0000:02:00.0-scsi-0:2:0:0",

스토리지 장치의 이름 지정 규칙에 대한 자세한 내용은 스토리지 장치 관리 가이드 의 영구 명명 속성 개요 를 참조하십시오.

5.3.3. 고급 시나리오에서 OSD 구성

환경 파일에서 CephAnsibleDisksConfig 리소스의 devices 변수에서 OSD에 사용할 블록 장치를 나열합니다.

다른 장치 구성 매개 변수 없이 device 변수를 사용하는 경우 ceph-volume lvm 배치는 느린 장치에 대해 더 높은 성능 장치를 block.db 로 균등하게 공유하여 OSD 구성을 자동으로 최적화합니다.

다음 절차에 따라 ceph-volume lvm 배치 모드에서 실행되지 않도록 장치를 구성할 수 있습니다.

5.3.3.1. block.db를 사용하여 성능 개선

block.db 를 사용하면 처리량을 높이고 응답 시간을 개선하여 Ceph Storage 클러스터의 성능을 향상시킬 수 있습니다. block.db 는 데이터 세그먼트와 BlueStore 쓰기-ahead 로그(WAL)로 구성된 데이터베이스입니다.

절차

  1. 환경 파일에 다음 내용을 추가합니다.

    parameter_defaults:
      CephAnsibleDisksConfig:
        devices:
          - /dev/sda
          - /dev/sdb
          - /dev/nvme0n1
          - /dev/sdc
          - /dev/sdd
          - /dev/nvme0n2
        osd_scenario: lvm
        osd_objectstore: bluestore

    그러면 4개의 OSD, sdb ,sdc, sdd 가 구성됩니다. 각 쌍에는 자체 데이터베이스 nvem0n1nvme0n2 가 있습니다.

    참고

    devices 목록의 장치 순서가 중요합니다. 드라이브와 block.db 및 BlueStore WAL(DB-WAL) 장치를 차례로 나열합니다. 이 예에서 nvme0n1 은 DB-WAL for sdasdb 이며 nvme0n2 는dc sdd 의 DB-WAL입니다. 자세한 내용은 BlueStore 사용을 참조하십시오.

  2. 오버클라우드를 배포할 때 -e 옵션을 사용하여 배포 명령에 새 콘텐츠가 포함된 환경 파일을 포함합니다.

5.3.3.2. 전용 WAL( write-ahead log) 장치 사용

전용 WAL( write-ahead log) 장치를 지정할 수 있습니다. 장치,dedicated_devicesbluestore_wal_devices 를 함께 사용하면 OSD의 모든 구성 요소를 에 분리하여 성능을 향상시킬 수 있습니다.

다음 예제 절차에서 또 다른 사전 bluestore_wal_devices 는 NVMe 장치 nvme0n1 및 nvme0n 2 에서 쓰기-ahead 로그를 격리합니다.

절차

  1. 환경 파일에 다음 내용을 추가합니다.

    parameter_defaults:
      CephAnsibleDisksConfig:
        devices:
          - /dev/sda
          - /dev/sdb
        dedicated_devices:
          - /dev/sdx
          - /dev/sdy
        bluestore_wal_devices:
          - /dev/nvme0n1
          - /dev/nvme0n2
  2. 오버클라우드를 배포할 때 -e 옵션을 사용하여 배포 명령에 새 콘텐츠가 포함된 환경 파일을 포함합니다.

5.3.3.3. 사전 생성된 LVM을 사용하여 제어 강화

이전의 고급 시나리오에서 ceph-volume 은 다양한 유형의 장치 목록을 사용하여 OSD의 논리 볼륨을 생성합니다. ceph-volume이 실행되기 전에 논리 볼륨을 생성한 다음 ceph- volumes 해당 논리 볼륨의 lvm_volumes 목록에 전달할 수도 있습니다. 이 경우 논리 볼륨을 사전에 생성해야 하지만 보다 정확한 제어가 가능합니다. director는 하드웨어 프로비저닝도 담당하므로 최초 부팅 스크립트를 사용하여 이러한 LVM을 사전에 생성해야 합니다.

절차

  1. OS::TripleO::NodeUserData 리소스 유형으로 Heat 템플릿을 등록하고 다음 콘텐츠를 포함하는 환경 파일 /home/stack/templates/firstboot.yaml 을 생성합니다.

    resource_registry:
      OS::TripleO::NodeUserData: /home/stack/templates/ceph-lvm.yaml
  2. 환경 파일 /home/stack/templates/ceph-lvm.yaml 을 생성합니다. 세 개의 물리 볼륨을 포함하는 다음 예제와 유사한 목록을 추가합니다. 장치 목록이 길어지면 요구 사항에 따라 예제를 확장합니다.

    heat_template_version: 2014-10-16
    
    description: >
      Extra hostname configuration
    
    resources:
      userdata:
        type: OS::Heat::MultipartMime
        properties:
          parts:
          - config: {get_resource: ceph_lvm_config}
    
      ceph_lvm_config:
        type: OS::Heat::SoftwareConfig
        properties:
          config: |
            #!/bin/bash -x
            pvcreate /dev/sda
            vgcreate ceph_vg_hdd /dev/sda
            pvcreate /dev/sdb
            vgcreate ceph_vg_ssd /dev/sdb
            pvcreate /dev/nvme0n1
            vgcreate ceph_vg_nvme /dev/nvme0n1
            lvcreate -n ceph_lv_wal1 -L 50G ceph_vg_nvme
            lvcreate -n ceph_lv_db1 -L 500G ceph_vg_ssd
            lvcreate -n ceph_lv_data1 -L 5T ceph_vg_hdd
            lvs
    
    outputs:
      OS::stack_id:
        value: {get_resource: userdata}
  3. 다음과 같은 방법으로 devices 목록 대신 lvm_volumes 매개 변수를 사용합니다. 이는 볼륨 그룹과 논리 볼륨이 이미 생성되었다고 가정합니다. 이 시나리오의 일반적인 사용 사례는 WAL 및 DB LV가 SSD에 있고 data LV는 HDD에 있다는 것입니다.

    parameter_defaults:
      CephAnsibleDisksConfig:
        osd_objectstore: bluestore
        osd_scenario: lvm
        lvm_volumes:
          - data: ceph_lv_data1
            data_vg: ceph_vg_hdd
            db: ceph_lv_db1
            db_vg: ceph_vg_ssd
            wal: ceph_lv_wal1
            wal_vg: ceph_vg_nvme
  4. 오버클라우드를 배포할 때 -e 옵션을 사용하여 배포 명령에 새 콘텐츠가 포함된 환경 파일을 포함합니다.

    참고
    별도의 WAL 장치를 지정하려면 WAL 장치가 DB 장치보다 나은 하드웨어에 있는 경우에만 필요합니다. 일반적으로 별도의 DB 장치를 만드는 것이 충분하며 WAL 기능에 동일한 파티션을 사용합니다.