검색

1.2. 컨테이너에 Red Hat Ceph Storage 클러스터 설치

download PDF

ceph-ansible 플레이북과 함께 Ansible 애플리케이션을 사용하여 컨테이너에 Red Hat Ceph Storage 3을 설치합니다.

프로덕션에서 사용되는 Ceph 클러스터는 일반적으로 10개 이상의 노드로 구성됩니다. Red Hat Ceph Storage를 컨테이너 이미지로 배포하려면 3개 이상의 OSD 노드와 모니터 3개로 구성된 Ceph 클러스터를 사용하는 것이 좋습니다.

중요

그러나 프로덕션 클러스터에서 고가용성을 보장하기 위해 Ceph를 하나의 모니터로 실행할 수 있지만, Red Hat은 최소 3개의 모니터 노드가 있는 배포만 지원합니다.

사전 요구 사항

  • Ansible 관리 노드에서 root 사용자 계정을 사용하여 Red Hat Ceph Storage 3 툴 리포지토리 및 Ansible 리포지토리를 활성화합니다.

    [root@admin ~]# subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-els-rpms --enable=rhel-7-server-ansible-2.6-rpms
  • ceph-ansible 패키지를 설치합니다.

    [root@admin ~]# yum install ceph-ansible

절차

달리 지침이 없는 경우 Ansible 관리 노드에서 다음 명령을 실행합니다.

  1. Ansible 사용자로 Ansible에서 ceph-ansible 플레이북에서 생성한 임시 값을 저장하는 ceph-ansible-keys 디렉터리를 생성합니다.

    [user@admin ~]$ mkdir ~/ceph-ansible-keys
  2. root로 /etc/ansible/ 디렉터리의 /usr/share/ceph-ansible/group_vars 디렉터리에 대한 심볼릭 링크를 생성합니다.

    [root@admin ~]# ln -s /usr/share/ceph-ansible/group_vars /etc/ansible/group_vars
  3. /usr/share/ceph-ansible/ 디렉터리로 이동합니다.

    [root@admin ~]$ cd /usr/share/ceph-ansible
  4. yml.sample 파일의 새 복사본을 생성합니다.

    [root@admin ceph-ansible]# cp group_vars/all.yml.sample group_vars/all.yml
    [root@admin ceph-ansible]# cp group_vars/osds.yml.sample group_vars/osds.yml
    [root@admin ceph-ansible]# cp site-docker.yml.sample site-docker.yml
  5. 복사된 파일을 편집합니다.

    1. group_vars/all.yml 파일을 편집합니다. 주석 처리를 위해 가장 일반적인 필수 매개 변수와 선택적 매개변수는 아래 표를 참조하십시오. 테이블에는 모든 매개 변수가 포함되어 있지 않습니다.

      중요

      사용자 지정 클러스터 이름 사용은 지원되지 않으므로 cluster: ceph 매개변수를 ceph 이외의 값으로 설정하지 마십시오.

      표 1.1. 일반 Ansible 설정
      옵션필수 항목참고

      monitor_interface

      모니터 노드가 수신하는 인터페이스

      monitor_interface,monitor_address 또는 monitor_address_block 이 필요합니다.

       

      monitor_address

      모니터 노드가 수신하는 주소입니다.

       

      monitor_address_block

      Ceph 공용 네트워크의 서브넷

      노드의 IP 주소를 알 수 없지만 서브넷을 알 수 없는 경우 사용합니다.

      ip_version

      ipv6

      예: IPv6 주소를 사용하는 경우

       

      journal_size

      저널의 필요한 크기(MB)

      없음

       

      public_network

      Ceph 공용 네트워크의 IP 주소 및 넷마스크

      있음

      Red Hat Enterprise Linux 용 설치 가이드의 Red Hat Ceph Storage의 네트워크 구성 확인 섹션

      cluster_network

      Ceph 클러스터 네트워크의 IP 주소 및 넷마스크

      없음

      ceph_docker_image

      로컬 Docker 레지스트리를 사용하는 경우 rhceph/rhceph-3-rhel7 또는 cephimageinlocalreg

      있음

       

      containerized_deployment

      true

      있음

       

      ceph_docker_registry

      로컬 Docker 레지스트리를 사용하는 경우 registry.access.redhat.com 또는 <local-host-fqdn>

      있음

       

      all.yml 파일의 예는 다음과 같습니다.

      monitor_interface: eth0
      journal_size: 5120
      public_network: 192.168.0.0/24
      ceph_docker_image: rhceph/rhceph-3-rhel7
      containerized_deployment: true
      ceph_docker_registry: registry.access.redhat.com

      자세한 내용은 all.yml 파일을 참조하십시오.

    2. group_vars/osds.yml 파일을 편집합니다. 주석 처리를 위해 가장 일반적인 필수 매개 변수와 선택적 매개변수는 아래 표를 참조하십시오. 테이블에는 모든 매개 변수가 포함되어 있지 않습니다.

      중요

      다른 물리적 장치를 사용하여 운영 체제가 설치된 장치와 OSD를 설치합니다. 운영 체제와 OSD 간에 동일한 장치를 공유하면 성능에 문제가 발생합니다.

      표 1.2. OSD Ansible 설정
      옵션필수 항목참고

      osd_scenario

      쓰기 로깅 및 키/값 데이터(BlueStore) 또는 저널(FileStore) 및 OSD 데이터에 동일한 장치를 사용하도록 배치

      SSD 또는 NVMe 미디어와 같은 전용 장치를 사용하여 쓰기 로그 및 키/값 데이터(BlueStore) 또는 저널 데이터(FileStore)를 저장합니다.

      LVM 에서 논리 볼륨 관리자를 사용하여 OSD 데이터를 저장합니다.

      있음

      osd_scenario 를 사용하는 경우,ceph-ansible장치dedicated_devices 의 변수 수가 일치할 것으로 예상합니다. 예를 들어 장치에서 10 디스크를 지정하는 경우 dedicated_devices 에 10 개의 항목을 지정해야 합니다.

      osd_auto_discovery

      OSD를 자동으로 검색하려면 true

      예: osd_scenario: collocated

      장치 설정을 사용할 때는 사용할 수 없습니다.

      devices

      ceph 데이터가 저장된 장치 목록

      예: 장치 목록을 지정합니다.

      osd_auto_discovery 설정이 사용되는 경우 사용할 수 없습니다. lvmosd_scenario 로 사용하고 devices 옵션을 설정하면 ceph-volume lvm 배치 모드를 사용하면 최적화된 OSD 구성이 생성됩니다.

      dedicated_devices

      ceph 저널이 저장된 non-collocated OSD의 전용 장치 목록

      osd_scenario: non-collocated

      파티션되지 않은 장치여야 합니다.

      dmcrypt

      OSD 암호화

      없음

      기본값은 false

      lvm_volumes

      FileStore 또는 BlueStore 사전 목록

      예: osd_scenario를 사용하는 경우: lvm 및 스토리지 장치는 장치를사용하여 정의되지 않습니다.

      각 사전에는 데이터,journaldata_vg 키가 포함되어야 합니다. 논리 볼륨 또는 볼륨 그룹은 전체 경로가 아닌 이름이어야 합니다. 데이터, 및 저널 키는 논리 볼륨(LV) 또는 파티션이 될 수 있지만 여러 데이터 LV에는 저널을 사용하지 않습니다. data_vg 키는 data LV를 포함하는 볼륨 그룹이어야 합니다. 필요한 경우 journal_vg 키를 사용하여 저널 LV가 포함된 볼륨 그룹을 지정할 수 있습니다. 지원되는 다양한 구성은 아래 예제를 참조하십시오.

      osds_per_device

      장치당 생성할 OSD 수입니다.

      없음

      기본값은 1입니다.

      osd_objectstore

      OSD의 Ceph 오브젝트 저장소 유형입니다.

      없음

      기본값은 bluestore 입니다. 다른 옵션은 filestore 입니다. 업그레이드에 필요합니다.

      다음은 세 개의 OSD 시나리오(, 결합되지 않은, , lvm )를 사용할 때 osds.yml 파일의 예입니다. 기본 OSD 개체 저장소 형식은 지정되지 않은 경우 BlueStore입니다.

      collocated

      osd_objectstore: filestore
      osd_scenario: collocated
      devices:
        - /dev/sda
        - /dev/sdb

      지원되지 않는 - BlueStore

      osd_objectstore: bluestore
      osd_scenario: non-collocated
      devices:
       - /dev/sda
       - /dev/sdb
       - /dev/sdc
       - /dev/sdd
      dedicated_devices:
       - /dev/nvme0n1
       - /dev/nvme0n1
       - /dev/nvme1n1
       - /dev/nvme1n1

      이 지원되지 않는 예에서는 장치당 하나씩 4개의 BlueStore OSD를 생성합니다. 이 예에서 기존의 하드 드라이브(sda,sdb,sdc,sdd)는 오브젝트 데이터에 사용되며 솔리드 상태 드라이브(SSD) (/dev/nvme0n1,/dev/nvme1n1)는 BlueStore 데이터베이스 및 write-ahead 로그에 사용됩니다. 이 구성은 /dev/sda/dev/sdb 장치를 /dev/nvme0n1 장치를 사용하여 연결하고 /dev/sdc/dev/sdd 장치를 /dev/nvme1n1 장치와 쌍으로 연결합니다.

      지원되지 않음 - 파일 저장소

      osd_objectstore: filestore
      osd_scenario: non-collocated
      devices:
        - /dev/sda
        - /dev/sdb
        - /dev/sdc
        - /dev/sdd
      dedicated_devices:
         - /dev/nvme0n1
         - /dev/nvme0n1
         - /dev/nvme1n1
         - /dev/nvme1n1

      LVM simple

      osd_objectstore: bluestore
      osd_scenario: lvm
      devices:
        - /dev/sda
        - /dev/sdb

      또는

      osd_objectstore: bluestore
      osd_scenario: lvm
      devices:
        - /dev/sda
        - /dev/sdb
        - /dev/nvme0n1

      이러한 간단한 구성으로 ceph-ansible 은 배치 모드(ceph-volume lvm batch)를 사용하여 OSD를 생성합니다.

      첫 번째 시나리오에서는 장치가 기존 하드 드라이브 또는 SSD인 경우 장치당 하나의 OSD가 생성됩니다.

      두 번째 시나리오에서는 기존 하드 드라이브와 SSD가 혼합되어 있는 경우 데이터는 기존 하드 드라이브(sda,sdb)에 배치되고 BlueStore 데이터베이스(block.db)는 SSD(nvme0n1)에서 최대한 크게 생성됩니다.

      LVM advance

      osd_objectstore: filestore
      osd_scenario: lvm
      lvm_volumes:
         - data: data-lv1
           data_vg: vg1
           journal: journal-lv1
           journal_vg: vg2
         - data: data-lv2
           journal: /dev/sda
           data_vg: vg1

      또는

      osd_objectstore: bluestore
      osd_scenario: lvm
      lvm_volumes:
        - data: data-lv1
          data_vg: data-vg1
          db: db-lv1
          db_vg: db-vg1
          wal: wal-lv1
          wal_vg: wal-vg1
        - data: data-lv2
          data_vg: data-vg2
          db: db-lv2
          db_vg: db-vg2
          wal: wal-lv2
          wal_vg: wal-vg2

      이러한 고급 시나리오 예제를 사용하면 볼륨 그룹과 논리 볼륨을 사전에 생성해야 합니다. ceph-ansible 에서 생성되지 않습니다.

      참고

      모든 NVMe SSD를 사용하는 경우 osd_scenario: lvmosds_per_device를 설정합니다. 4 옵션. 자세한 내용은 Red Hat Ceph Storage Container 가이드 의 모든 NVMe 스토리지에 대한 OSD Ansible 설정 구성 섹션을 참조하십시오.

      자세한 내용은 osds.yml 파일의 주석을 참조하십시오.

  6. /etc/ansible/hosts 에 기본적으로 있는 Ansible 인벤토리 파일을 편집합니다. 예제 호스트를 주석 처리하십시오.

    1. [mons] 섹션 아래에 모니터 노드를 추가합니다.

      [mons]
      <monitor-host-name>
      <monitor-host-name>
      <monitor-host-name>
    2. [osds] 섹션 아래에 OSD 노드를 추가합니다. 노드의 이름이 순차적인 경우 범위를 사용하는 것이 좋습니다.

      [osds]
      <osd-host-name[1:10]>
      참고

      새 설치의 OSD의 경우 기본 오브젝트 저장소 형식은 BlueStore입니다.

      또는 [mons][osds] 섹션에 동일한 노드를 추가하여 한 노드에서 OSD 데몬과 함께 모니터를 배치할 수 있습니다. 자세한 내용은 2장. 컨테이너화된 Ceph 데몬 공동 배치 을 참조하십시오.

  7. 필요한 경우 모든 배포, 베어 메탈 또는 컨테이너 의 경우 ansible- playbook 을 사용하여 사용자 지정 CRUSH 계층을 생성할 수 있습니다.

    1. Ansible 인벤토리 파일을 설정합니다. osd_crush_location 매개변수를 사용하여 OSD 호스트가 CRUSH 맵 계층 구조에 있을 위치를 지정합니다. OSD 위치를 지정하려면 최소 2개의 CRUSH 버킷 유형을 지정해야 하며 하나의 버킷 유형이 호스트여야 합니다. 기본적으로 루트,데이터 센터,,,pod, du ,,섀시호스트가 포함됩니다.

      구문

      [osds]
      CEPH_OSD_NAME osd_crush_location="{ 'root': ROOT_BUCKET_', 'rack': 'RACK_BUCKET', 'pod': 'POD_BUCKET', 'host': 'CEPH_HOST_NAME' }"

      예제

      [osds]
      ceph-osd-01 osd_crush_location="{ 'root': 'default', 'rack': 'rack1', 'pod': 'monpod', 'host': 'ceph-osd-01' }"

    2. crush_rule_configcreate_crush_tree 매개변수를 True 로 설정하고 기본 CRUSH 규칙을 사용하지 않으려면 최소 하나의 CRUSH 규칙을 만듭니다. 예를 들어 HDD 장치를 사용하는 경우 다음과 같이 매개 변수를 편집합니다.

      crush_rule_config: True
      crush_rule_hdd:
          name: replicated_hdd_rule
          root: root-hdd
          type: host
          class: hdd
          default: True
      crush_rules:
        - "{{ crush_rule_hdd }}"
      create_crush_tree: True

      SSD 장치를 사용하는 경우 다음과 같이 매개변수를 편집합니다.

      crush_rule_config: True
      crush_rule_ssd:
          name: replicated_ssd_rule
          root: root-ssd
          type: host
          class: ssd
          default: True
      crush_rules:
        - "{{ crush_rule_ssd }}"
      create_crush_tree: True
      참고

      기본 규칙에는 이제 정의해야 하는 class 매개 변수가 포함되어 있으므로 ssdhdd OSD 둘 다 배포되지 않으면 기본 CRUSH 규칙이 실패합니다.

      참고

      아래 단계에 설명된 대로 host_vars 디렉터리의 OSD 파일에 사용자 지정 nmap 계층 구조를 추가하여 이 구성 작업을 수행합니다.

    3. group_vars/clients.yml 파일에서 생성된 crush_rules 를 사용하여 생성.

      예제

      copy_admin_key: True
      user_config: True
      pool1:
        name: "pool1"
        pg_num: 128
        pgp_num: 128
        rule_name: "HDD"
        type: "replicated"
        device_class: "hdd"
      pools:
        - "{{ pool1 }}"

    4. 트리를 봅니다.

      [root@mon ~]# ceph osd tree
    5. 풀을 검증합니다.

      # for i in $(rados lspools);do echo "pool: $i"; ceph osd pool get $i crush_rule;done
      
      pool: pool1
      crush_rule: HDD
  8. 모든 배포, 베어 메탈 또는 컨테이너 의 경우 기본적으로 /etc/ansible/hosts 파일을 통해 Ansible 인벤토리 파일을 편집하기 위해 를 엽니다. 예제 호스트를 주석 처리합니다.

    1. [mgrs] 섹션에 Ceph Manager(ceph-mgr) 노드를 추가합니다. Ceph Manager 데몬을 모니터 노드와 분리합니다.

      [mgrs]
      <monitor-host-name>
      <monitor-host-name>
      <monitor-host-name>
  9. Ansible 사용자로 Ansible이 Ceph 호스트에 연결할 수 있는지 확인합니다.

    [user@admin ~]$ ansible all -m ping
  10. root 로서 /var/log/ansible/ 디렉터리를 생성하고 ansible 사용자에게 적절한 권한을 할당합니다.

    [root@admin ~]# mkdir /var/log/ansible
    [root@admin ~]# chown ansible:ansible  /var/log/ansible
    [root@admin ~]# chmod 755 /var/log/ansible
    1. /usr/share/ceph-ansible/ansible.cfg 파일을 편집하여 다음과 같이 log_path 값을 업데이트합니다.

      log_path = /var/log/ansible/ansible.log
  11. Ansible 사용자로 /usr/share/ceph-ansible/ 디렉터리로 변경합니다.

    [user@admin ~]$ cd /usr/share/ceph-ansible/
  12. ceph-ansible 플레이북을 실행합니다.

    [user@admin ceph-ansible]$ ansible-playbook site-docker.yml
    참고

    Red Hat Ceph Storage를 Red Hat Enterprise Linux Atomic Host 호스트에 배포하는 경우 --skip-tags=with_pkg 옵션을 사용합니다.

    [user@admin ceph-ansible]$ ansible-playbook site-docker.yml --skip-tags=with_pkg
    참고

    배포 속도를 높이려면 --forks 옵션을 ansible-playbook 에 사용합니다. 기본적으로 ceph-ansible 은 포크를 20 으로 설정합니다. 이 설정을 사용하면 최대 20개의 노드가 동시에 설치됩니다. 한 번에 최대 30개의 노드를 설치하려면 ansible-playbook --forks 30 PLAYBOOK FILE 실행합니다. 사용하지 않도록 관리 노드의 리소스를 모니터링해야 합니다. 이 값이 있는 경우 --forks 에 전달된 수를 줄입니다.

  13. Monitor 노드에서 root 계정을 사용하여 Ceph 클러스터의 상태를 확인합니다.

    docker exec ceph-<mon|mgr>-<id> ceph health

    교체:

    • Monitor 노드의 호스트 이름이 있는 <id>:

    예를 들면 다음과 같습니다.

    [root@monitor ~]# docker exec ceph-mon-mon0 ceph health
    HEALTH_OK
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.