7.3. Ansible을 사용하여 스토리지 클러스터 업그레이드

Ansible 배포 툴을 사용하면 롤링 업그레이드를 수행하여 Red Hat Ceph Storage 클러스터를 업그레이드할 수 있습니다. 이러한 단계는 달리 명시되지 않는 한 베어 메탈 및 컨테이너 배포에 모두 적용됩니다.

사전 요구 사항

  • Ansible 관리 노드에 대한 루트 수준 액세스.
  • ansible 사용자 계정.

절차

  1. /usr/share/ceph-ansible/ 디렉토리로 이동합니다.

    예제

    [root@admin ~]# cd /usr/share/ceph-ansible/

  2. Red Hat Ceph Storage 3에서 Red Hat Ceph Storage 4로 업그레이드하는 경우 group_vars/all.yml,group_vars/osds.yml 파일의 백업 사본, group_vars/clients.yml 파일의 백업 사본을 만듭니다.

    [root@admin ceph-ansible]# cp group_vars/all.yml group_vars/all_old.yml
    [root@admin ceph-ansible]# cp group_vars/osds.yml group_vars/osds_old.yml
    [root@admin ceph-ansible]# cp group_vars/clients.yml group_vars/clients_old.yml
  3. Red Hat Ceph Storage 3에서 Red Hat Ceph Storage 4로 업그레이드하는 경우 group_vars/all.yml.sample,group_vars/osds.yml.samplegroup_vars/clients.yml.sample 파일의 새 복사본을 생성하고 group_vars/all.yml 파일 이름을 group_vars/all.yml , group_vars/osds.yml ,group_vars/osds.yml, group_vars/osds.yml.yml 로 변경합니다. 그에 따라 열고 편집하여 이전에 백업한 사본에 변경 사항을 적용합니다.

    [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 group_vars/clients.yml.sample group_vars/clients.yml
  4. group_vars/osds.yml 파일을 편집합니다. 다음 옵션을 추가하고 설정합니다.

    nb_retry_wait_osd_up: 60
    delay_wait_osd_up: 10
    참고

    이는 기본값입니다. 사용 사례에 따라 값을 수정할 수 있습니다.

  5. Red Hat Ceph Storage 4의 새 마이너 버전으로 업그레이드하는 경우 group_vars/all.ymlgrafana_container_image 값이 group_vars/all.yml.sample 과 동일한지 확인합니다. 동일하지 않은 경우 다음과 같이 편집합니다.

    예제

    grafana_container_image: registry.redhat.io/rhceph/rhceph-4-dashboard-rhel8:4

    참고

    표시된 이미지 경로는 ceph-ansible 버전 4.0.23-1에 포함되어 있습니다.

  6. 샘플 파일에서 최신 site.yml 또는 site-container.yml 파일을 복사합니다.

    1. 베어 메탈 배포의 경우:

      [root@admin ceph-ansible]# cp site.yml.sample site.yml
    2. 컨테이너 배포의 경우:

      [root@admin ceph-ansible]# cp site-container.yml.sample site-container.yml
  7. group_vars/all.yml 파일을 열고 다음 옵션을 편집합니다.

    1. fetch_directory 옵션을 추가합니다.

      fetch_directory: FULL_DIRECTORY_PATH
      대체 버전
      • Ansible 사용자의 홈 디렉터리와 같이 쓰기 가능한 위치가 있는 FULL_DIRECTORY_PATH.
    2. 업그레이드하려는 클러스터에 Ceph Object Gateway 노드가 포함된 경우 radosgw_interface 옵션을 추가합니다.

      radosgw_interface: INTERFACE
      대체 버전
      • Ceph Object Gateway 노드가 수신 대기하는 인터페이스를 사용하여 인터넷 연결을 수행합니다.
    3. 현재 설정에 SSL 인증서가 구성된 경우 다음을 편집해야 합니다.

      radosgw_frontend_ssl_certificate: /etc/pki/ca-trust/extracted/CERTIFICATE_NAME
      radosgw_frontend_port: 443
    4. 기본 OSD 오브젝트 저장소는 BlueStore입니다. 기존 OSD 오브젝트 저장소를 유지하려면 osd_objectstore 옵션을 filestore 로 명시적으로 설정해야 합니다.

      osd_objectstore: filestore
      참고

      osd_objectstore 옵션을 filestore 로 설정하면 OSD는 BlueStore 대신 FileStore를 사용합니다.

      중요

      Red Hat Ceph Storage 4부터 FileStore는 더 이상 사용되지 않는 기능입니다. Red Hat은 FileStore OSD를 BlueStore OSD로 마이그레이션하는 것이 좋습니다.

    5. Red Hat Ceph Storage 4.1부터 /usr/share/ceph-ansible/group_vars/all.yml 에서 dashboard_admin_passwordgrafana_admin_password 의 주석 처리를 해제하거나 설정해야 합니다. 각각에 대해 보안 암호를 설정합니다. dashboard_admin_usergrafana_admin_user 의 사용자 지정 사용자 이름도 설정합니다.
    6. 베어 메탈컨테이너 배포 모두에 대해 다음을 수행합니다.

      1. upgrade_ceph_packages 옵션의 주석을 제거하고 True 로 설정합니다.

        upgrade_ceph_packages: True
      2. ceph_rhcs_version 옵션을 4 로 설정합니다.

        ceph_rhcs_version: 4
        참고

        ceph_rhcs_version 옵션을 4 로 설정하면 최신 버전의 Red Hat Ceph Storage 4가 표시됩니다.

      3. ceph_docker_registry 정보를 all.yml 에 추가합니다.

        구문

        ceph_docker_registry: registry.redhat.io
        ceph_docker_registry_username: SERVICE_ACCOUNT_USER_NAME
        ceph_docker_registry_password: TOKEN

        참고

        Red Hat Registry Service 계정이 없는 경우 레지스트리 서비스 계정 웹 페이지를 사용하여 생성합니다. 자세한 내용은 Red Hat Container Registry Authentication Knowledgebase 문서를 참조하십시오.

        참고

        ceph_docker_registry_usernameceph_docker_registry_password 매개변수에 서비스 계정을 사용하는 것 외에도 고객 포털 자격 증명을 사용하지만 보안을 보장하기 위해 ceph_docker_registry_password 매개변수를 암호화할 수 있습니다. 자세한 내용은 ansible-vault를 사용하여 Ansible 암호 변수 암호화 를 참조하십시오.

    7. 컨테이너 배포의 경우 다음을 수행합니다.

      1. ceph_docker_image 옵션을 변경하여 Ceph 4 컨테이너 버전을 가리킵니다.

        ceph_docker_image: rhceph/rhceph-4-rhel8
      2. rhceph/rhceph-4-rhel8 의 최신 버전을 가리키도록 ceph_docker_image_tag 옵션을 변경합니다.

        ceph_docker_image_tag: latest
  8. Red Hat Ceph Storage 3에서 Red Hat Ceph Storage 4로 업그레이드하는 경우 Ansible 인벤토리 파일을 기본적으로 열고 [grafana-server] 섹션에 Ceph 대시보드 노드 이름 또는 IP 주소를 추가합니다. 이 섹션이 없는 경우 노드 이름 또는 IP 주소와 함께 이 섹션을 추가합니다.
  9. Ansible 사용자로 전환하거나 Ansible 사용자로 로그인한 다음 rolling_update.yml 플레이북을 실행합니다.

    [ansible@admin ceph-ansible]$ ansible-playbook infrastructure-playbooks/rolling_update.yml -i hosts
    중요

    rolling_update.yml 플레이북에 --limit Ansible 옵션을 사용하는 것은 지원되지 않습니다.

  10. RBD 미러링 데몬 노드의 root 사용자로 rbd-mirror 패키지를 수동으로 업그레이드합니다.

    [root@rbd ~]# yum upgrade rbd-mirror
  11. rbd-mirror 데몬을 다시 시작합니다.

    systemctl restart ceph-rbd-mirror@CLIENT_ID
  12. 스토리지 클러스터의 상태를 확인합니다.

    1. 베어 메탈 배포의 경우 root 사용자로 모니터 노드에 로그인하고 Ceph status 명령을 실행합니다.

      [root@mon ~]# ceph -s
    2. 컨테이너 배포의 경우 root 사용자로 Ceph Monitor 노드에 로그인합니다.

      1. 실행 중인 컨테이너를 모두 나열합니다.

        Red Hat Enterprise Linux 7

        [root@mon ~]# docker ps

        Red Hat Enterprise Linux 8

        [root@mon ~]# podman ps

      2. 상태 점검:

        Red Hat Enterprise Linux 7

        [root@mon ~]# docker exec ceph-mon-MONITOR_NAME ceph -s

        Red Hat Enterprise Linux 8

        [root@mon ~]# podman exec ceph-mon-MONITOR_NAME ceph -s

        대체 버전
        • 이전 단계에서 찾은 Ceph Monitor 컨테이너의 이름이 MONITOR_NAME 입니다.

          예제

          [root@mon ~]# podman exec ceph-mon-mon01 ceph -s

  13. 선택 사항: Red Hat Ceph Storage 3.x에서 Red Hat Ceph Storage 4.x로 업그레이드하는 경우 다음 상태 경고가 표시될 수 있습니다. 336 OSD에서 탐지된 레거시 BlueStore 통계 보고 이는 최신 코드가 풀 통계를 다르게 계산하기 때문에 발생합니다. bluestore_fsck_quick_fix_on_mount 매개변수를 설정하여 이 문제를 해결할 수 있습니다.

    1. bluestore_fsck_quick_fix_on_mounttrue 로 설정합니다.

      예제

      [root@mon ~]# ceph config set osd bluestore_fsck_quick_fix_on_mount true

    2. OSD가 중단된 동안 데이터 이동을 방지하려면 nooutnorebalance 플래그를 설정합니다.

      예제

      [root@mon ~]# ceph osd set noout
      [root@mon ~]# ceph osd set norebalance

    3. 베어 메탈 배포의 경우 스토리지 클러스터의 모든 OSD 노드에서 ceph-osd.target 을 다시 시작합니다.

      예제

      [root@osd ~]# systemctl restart ceph-osd.target

    4. 컨테이너화된 배포의 경우 개별 OSD를 하나씩 다시 시작하고 모든 배치 그룹이 active+clean 상태가 될 때까지 기다립니다.

      구문

      systemctl restart ceph-osd@OSD_ID.service

      예제

      [root@osd ~]# systemctl restart ceph-osd@0.service

    5. 모든 OSD가 복구되면 noutnorebalance 플래그를 설정 해제합니다.

      예제

      [root@mon ~]# ceph osd unset noout
      [root@mon ~]# ceph osd unset norebalance

    6. 모든 OSD 가 복구되면 Bluestore_fsck_quick_fix_on_mountfalse 로 설정합니다.

      예제

      [root@mon ~]# ceph config set osd bluestore_fsck_quick_fix_on_mount false

    7. 선택 사항: 베어 메탈 배포를 위한 대체 방법은 OSD 서비스를 중지하고, ceph- bluestore-tool 명령을 사용하여 OSD에서 복구 기능을 실행한 다음, OSD 서비스를 시작하는 것입니다.

      1. OSD 서비스를 중지합니다.

        [root@osd ~]# systemctl stop ceph-osd.target
      2. OSD에서 복구 기능을 실행하여 실제 OSD ID를 지정합니다.

        구문

        ceph-bluestore-tool --path /var/lib/ceph/osd/ceph-OSDID repair

        예제

        [root@osd ~]# ceph-bluestore-tool --path /var/lib/ceph/osd/ceph-2 repair

      3. OSD 서비스를 시작합니다.

        [root@osd ~]# systemctl start ceph-osd.target
  14. 업그레이드가 완료되면 Ansible 플레이북을 실행하여 FileStore OSD를 BlueStore OSD로 마이그레이션할 수 있습니다.

    구문

    ansible-playbook infrastructure-playbooks/filestore-to-bluestore.yml --limit OSD_NODE_TO_MIGRATE

    예제

    [ansible@admin ceph-ansible]$ ansible-playbook infrastructure-playbooks/filestore-to-bluestore.yml --limit osd01

    마이그레이션이 완료되면 다음 하위 단계를 수행합니다.

    1. group_vars/osds.yml 파일을 편집하려면 을 열고 osd_objectstore 옵션을 bluestore 로 설정합니다. 예를 들면 다음과 같습니다.

      osd_objectstore: bluestore
    2. lvm_volumes 변수를 사용하는 경우 journaljournal_vg 옵션을 각각 dbdb_vg 로 변경합니다. 예를 들면 다음과 같습니다.

      이전

      lvm_volumes:
        - data: /dev/sdb
          journal: /dev/sdc1
        - data: /dev/sdd
          journal: journal1
          journal_vg: journals

      Bluestore로 변환 한 후

      lvm_volumes:
        - data: /dev/sdb
          db: /dev/sdc1
        - data: /dev/sdd
          db: journal1
          db_vg: journals

  15. OpenStack 환경에서 작업하는 경우 풀에 RBD 프로필 사용하도록 모든 VDDK 사용자를 업데이트합니다. 다음 명령은 root 사용자로 실행해야 합니다.

    1. Glance 사용자:

      구문

      ceph auth caps client.glance mon 'profile rbd' osd 'profile rbd pool=GLANCE_POOL_NAME'

      예제

      [root@mon ~]# ceph auth caps client.glance mon 'profile rbd' osd 'profile rbd pool=images'

    2. Cinder 사용자:

      구문

      ceph auth caps client.cinder mon 'profile rbd' osd 'profile rbd pool=CINDER_VOLUME_POOL_NAME, profile rbd pool=NOVA_POOL_NAME, profile rbd-read-only pool=GLANCE_POOL_NAME'

      예제

      [root@mon ~]# ceph auth caps client.cinder mon 'profile rbd' osd 'profile rbd pool=volumes, profile rbd pool=vms, profile rbd-read-only pool=images'

    3. OpenStack 일반 사용자:

      구문

      ceph auth caps client.openstack mon 'profile rbd' osd 'profile rbd-read-only pool=CINDER_VOLUME_POOL_NAME, profile rbd pool=NOVA_POOL_NAME, profile rbd-read-only pool=GLANCE_POOL_NAME'

      예제

      [root@mon ~]# ceph auth caps client.openstack mon 'profile rbd' osd 'profile rbd-read-only pool=volumes, profile rbd pool=vms, profile rbd-read-only pool=images'

      중요

      라이브 클라이언트 마이그레이션을 수행하기 전에 이러한 CAPS 업데이트를 수행합니다. 이를 통해 클라이언트는 메모리에서 실행되는 새 라이브러리를 사용하여 이전 CAPS 설정이 캐시에서 삭제하고 새 RBD 프로필 설정을 적용할 수 있습니다.

  16. 선택 사항: 클라이언트 노드에서 Ceph 클라이언트 측 라이브러리에 따라 애플리케이션을 다시 시작합니다.

    참고

    QEMU 또는 KVM 인스턴스를 실행하거나 전용 QEMU 또는 KVM 클라이언트를 사용하는 OpenStack Nova 컴퓨팅 노드를 업그레이드하는 경우 이 경우 인스턴스를 다시 시작하지 않기 때문에 QEMU 또는 KVM 인스턴스를 중지하고 시작합니다.

추가 리소스