5.4. Ansible을 사용하여 양방향 미러링 구성

이 절차에서는 ceph-ansible 을 사용하여 양방향 복제를 구성하여 site-asite-b 라고 하는 두 클러스터 간의 이미지를 미러링할 수 있습니다. 다음 예에서 데이터 는 미러링할 이미지를 포함하는 풀의 이름입니다.

참고

양방향 미러링은 두 클러스터의 동일한 이미지에 동시 쓰기를 허용하지 않습니다. 이미지는 한 클러스터에서 승격되고 다른 클러스터에서 강등됩니다. 상태에 따라 한 방향 또는 다른 방향으로 미러링됩니다.

사전 요구 사항

  • Red Hat Ceph Storage 클러스터가 실행 중인 2개입니다.
  • 각 클러스터에는 클라이언트 노드가 있습니다.
  • 동일한 이름의 풀이 두 클러스터에 있습니다.
  • 풀 내의 이미지에는 저널 기반 미러링에 사용할 수 있는 독점 잠금 및 저널링이 활성화되어 있어야 합니다.

절차

  1. 이미지가 시작된 클러스터에서 이미지에서 배타적 잠금 및 저널링 기능을 활성화합니다.

    1. 새 이미지 의 경우 --image-feature 옵션을 사용합니다.

      구문

      rbd create IMAGE_NAME --size MEGABYTES --pool POOL_NAME --image-feature FEATURE[,FEATURE]

      예제

      [root@rbd-client ~]# rbd create image1 --size 1024 --pool data --image-feature exclusive-lock,journaling

    2. 기존 이미지 의 경우 rbd 기능 enable 명령을 사용합니다.

      구문

      rbd feature enable POOL_NAME/IMAGE_NAME FEATURE_NAME

      예제

      [root@rbd-client ~]# rbd feature enable data/image1 exclusive-lock,journaling

    3. 기본적으로 모든 새 이미지에서 배타적 잠금 및 저널링을 활성화하려면 Ceph 구성 파일에 다음 설정을 추가합니다.

      rbd_default_features = 125
  2. site-a 클러스터에서 다음 단계를 완료합니다.

    1. 모니터 노드에서 rbd-mirror 데몬이 클러스터에 연결하는 데 사용할 사용자를 만듭니다. 이 예제에서는 site-a 사용자를 생성하고 해당 키를 site-a.client.site-a.keyring 이라는 파일에 출력하고 Ceph 구성 파일은 /etc/ceph/site-a.conf 입니다.

      구문

      ceph auth get-or-create client.PRIMARY_CLUSTER_NAME mon 'profile rbd' osd 'profile rbd pool=data' -o /etc/ceph/PRIMARY_CLUSTER_NAME.client.USER_NAME.keyring -c /etc/ceph/PRIMARY_CLUSTER_NAME.conf

      예제

      [root@mon ~]# ceph auth get-or-create client.site-a mon 'profile rbd' osd 'profile rbd pool=data' -o /etc/ceph/site-a.client.site-a.keyring -c /etc/ceph/site-a.conf

    2. 인증 키를 site-b 클러스터에 복사합니다. rbd-daemon 이 실행될 site-b 클러스터의 클라이언트 노드에 파일을 복사합니다. 파일을 /etc/ceph/site-a.client.site-a.keyring 에 저장합니다.

      구문

      scp /etc/ceph/PRIMARY_CLUSTER_NAME.client.USER_NAME.keyring root@SECONDARY_CLIENT_NODE_NAME:/etc/ceph/PRIMARY_CLUSTER_NAME.client.USER_NAME.keyring

      예제

      [root@mon ~]# scp /etc/ceph/site-a.client.site-a.keyring root@client.site-b:/etc/ceph/site-a.client.site-a.keyring

    3. 모니터 노드에서 site-b 모니터 노드 및 클라이언트 노드로 Ceph 구성 파일을 복사합니다. 이 예제의 Ceph 구성 파일은 /etc/ceph/site-a.conf 입니다.

      구문

      scp /etc/ceph/PRIMARY_CLUSTER_NAME.conf root@SECONDARY_MONITOR_NODE_NAME:/etc/ceph/PRIMARY_CLUSTER_NAME.conf
      scp /etc/ceph/PRIMARY_CLUSTER_NAME.conf user@SECONDARY_CLIENT_NODE_NAME:/etc/ceph/PRIMARY_CLUSTER_NAME.conf

      예제

      [root@mon ~]# scp /etc/ceph/site-a.conf root@mon.site-b:/etc/ceph/site-a.conf
      [root@mon ~]# scp /etc/ceph/site-a.conf user@client.site-b:/etc/ceph/site-a.conf

  3. site-b 클러스터에서 다음 단계를 완료합니다.

    1. site-a 에서 site-b 로 미러링을 구성합니다. Ansible 관리 노드에서 Ansible 인벤토리 파일(일반적으로 /usr/share/ceph-ansible/hosts )에 [rbdmirrors] 그룹을 추가합니다.
    2. [rbdmirrors] 그룹에서 rbd -mirrors 데몬에서 실행할 site-b 클라이언트 노드의 이름을 추가합니다. 이 데몬은 site-a 에서 site-b 로 이미지 변경 사항을 가져옵니다.

      예제

      [rbdmirrors]
      client.site-b

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

      [root@admin ~]$ cd /usr/share/ceph-ansible
    4. group_vars/ rbdmirrors.yml. sample을 group_vars/rbdmirrors.yml 에 복사하여 새 rbdmirrors.yml 파일을 만듭니다.

      [root@admin ceph-ansible]# cp group_vars/rbdmirrors.yml.sample group_vars/rbdmirrors.yml
    5. group_vars/rbdmirrors.yml 파일을 편집하기 위해 을 엽니다.
    6. ceph_rbd_mirror_configuretrue 로 설정하고 ceph_rbd_mirror_pool 을 미러할 풀로 설정합니다. 이 예제에서 데이터 는 풀 이름입니다.

      ceph_rbd_mirror_configure: true
      ceph_rbd_mirror_pool: "data"
    7. 기본적으로 ceph-ansible 은 풀의 모든 이미지를 미러링하는 풀 모드를 사용하여 미러링을 구성합니다. 미러링이 명시적으로 활성화된 이미지만 미러링된 이미지만 활성화하는 이미지 모드를 활성화합니다. 이미지 모드를 활성화하려면 ceph_rbd_mirror_modeimage 로 설정합니다.

      ceph_rbd_mirror_mode: image
    8. group_vars/rbdmirrors.yml 파일에서 rbd-mirror 에서 클러스터의 이름을 설정합니다. 이 예제에서 다른 클러스터는 site-a 입니다.

      ceph_rbd_mirror_remote_cluster: "site-a"
    9. Ansible 관리 노드에서 group_vars/rbdmirrors.yml 파일에서 ceph_rbd_mirror_remote_user 를 사용하여 키의 사용자 이름을 설정합니다. 키를 만들 때 사용한 것과 동일한 이름을 사용합니다. 이러한 예에서 사용자는 client.site-a 라는 이름으로 지정됩니다.

      ceph_rbd_mirror_remote_user: "client.site-a"
    10. ansible 사용자로 Ansible 플레이북을 실행합니다.

      • 베어 메탈 배포:

        [user@admin ceph-ansible]$ ansible-playbook site.yml --limit rbdmirrors -i hosts
      • 컨테이너 배포:

        [user@admin ceph-ansible]$ ansible-playbook site-container.yml --limit rbdmirrors -i hosts
  4. 미러링 상태를 확인합니다. site-b 클러스터의 Ceph Monitor 노드에서 다음 명령을 실행합니다.

    예제

    저널 기반 미러링:

    [root@mon ~]# rbd mirror image status data/image1
    image1:
      global_id:   7d486c3f-d5a1-4bee-ae53-6c4f1e0c8eac
      state:       up+replaying 1
      description: replaying, master_position=[object_number=3, tag_tid=1, entry_tid=3], mirror_position=[object_number=3, tag_tid=1, entry_tid=3], entries_behind_master=0
      last_update: 2021-04-22 13:19:27

    스냅샷 기반 미러링:

    [root@mon ~]# rbd mirror image status data/image1
    image1:
      global_id:   06acc9e6-a63d-4aa1-bd0d-4f3a79b0ae33
      state:       up+replaying 1
      description: replaying, {"bytes_per_second":0.0,"bytes_per_snapshot":0.0,"local_snapshot_timestamp":1642689843,"remote_snapshot_timestamp":1642689843,"replay_state":"idle"}
      service:     admin on ceph-rbd2-vasi-43-5hwia4-node2
      last_update: 2022-01-20 12:41:57
    1 1
    이미지가 up+replaying 에 있는 경우 미러링이 제대로 작동합니다.
    참고

    사이트 간 연결에 따라 미러링은 이미지를 동기화하는 데 시간이 오래 걸릴 수 있습니다.

  5. site-b 클러스터에서 다음 단계를 완료합니다. 단계는 주로 위와 동일합니다.

    1. 모니터 노드에서 rbd-mirror 데몬이 클러스터에 연결하는 데 사용할 사용자를 만듭니다. 이 예제에서는 site-b 사용자를 생성하고 해당 키를 site-b.client.site-b.keyring 이라는 파일에 출력하고 Ceph 구성 파일은 /etc/ceph/site-b.conf 입니다.

      구문

      ceph auth get-or-create client.SECONDARY_CLUSTER_NAME mon 'profile rbd' osd 'profile rbd pool=data' -o /etc/ceph/SECONDARY_CLUSTER_NAME.client.USER_NAME.keyring -c /etc/ceph/SECONDARY_CLUSTER_NAME.conf

      예제

      [root@mon ~]# ceph auth get-or-create client.site-b mon 'profile rbd' osd 'profile rbd pool=data' -o /etc/ceph/site-b.client.site-b.keyring -c /etc/ceph/site-b.conf

    2. 인증 키를 site-a 클러스터에 복사합니다. rbd -daemon 이 실행될 클러스터 의 클라이언트 노드에 파일을 복사합니다. 파일을 /etc/ceph/site-b.client.site-b.keyring 에 저장합니다.

      구문

      scp /etc/ceph/SECONDARY_CLUSTER_NAME.client.USER_NAME.keyring root@PRIMARY_CLIENT_NODE_NAME:/etc/ceph/SECONDARY_CLUSTER_NAME.client.USER_NAME.keyring

      예제

      [root@mon ~]# scp /etc/ceph/site-b.client.site-b.keyring root@client.site-a:/etc/ceph/site-b.client.site-b.keyring

    3. 모니터 노드에서 site-a monitor 노드 및 클라이언트 노드로 Ceph 구성 파일을 복사합니다. 이 예제의 Ceph 구성 파일은 /etc/ceph/site-b.conf 입니다.

      구문

      scp /etc/ceph/SECONDARY_CLUSTER_NAME.conf root@PRIMARY_MONITOR_NODE_NAME:/etc/ceph/SECONDARY_CLUSTER_NAME.conf
      scp /etc/ceph/SECONDARY_CLUSTER_NAME.conf user@PRIMARY_CLIENT_NODE_NAME:/etc/ceph/SECONDARY_CLUSTER_NAME.conf

      예제

      [root@mon ~]# scp /etc/ceph/site-b.conf root@mon.site-a:/etc/ceph/site-b.conf
      [root@mon ~]# scp /etc/ceph/site-b.conf user@client.site-a:/etc/ceph/site-b.conf

  6. site-a 클러스터에서 다음 단계를 완료합니다.

    1. site-b 에서 site-a 로 미러링을 구성합니다. Ansible 관리 노드에서 Ansible 인벤토리 파일(일반적으로 /usr/share/ceph-ansible/hosts )에 [rbdmirrors] 그룹을 추가합니다.
    2. [rbdmirrors] 그룹에서 rbd -mirrors 데몬에서 실행할 site-a 클라이언트 노드의 이름을 추가합니다. 이 데몬은 site-b 에서 site-a 로 이미지 변경 사항을 가져옵니다.

      예제

      [rbdmirrors]
      client.site-a

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

      [root@admin ~]# cd /usr/share/ceph-ansible
    4. group_vars/ rbdmirrors.yml. sample을 group_vars/rbdmirrors.yml 에 복사하여 새 rbdmirrors.yml 파일을 만듭니다.

      [root@admin ceph-ansible]# cp group_vars/rbdmirrors.yml.sample group_vars/rbdmirrors.yml
    5. group_vars/rbdmirrors.yml 파일을 편집하기 위해 을 엽니다.
    6. ceph_rbd_mirror_configuretrue 로 설정하고 ceph_rbd_mirror_pool 을 미러할 풀로 설정합니다. 이 예제에서 데이터 는 풀 이름입니다.

      ceph_rbd_mirror_configure: true
      ceph_rbd_mirror_pool: "data"
    7. 기본적으로 ceph-ansible 은 풀의 모든 이미지를 미러링하는 풀 모드를 사용하여 미러링을 구성합니다. 미러링이 명시적으로 활성화된 이미지만 미러링된 이미지만 활성화하는 이미지 모드를 활성화합니다. 이미지 모드를 활성화하려면 ceph_rbd_mirror_modeimage 로 설정합니다.

      ceph_rbd_mirror_mode: image
    8. Ansible 관리 노드에서 group_vars/rbdmirrors.yml 파일에서 rbd-mirror 에서 클러스터의 이름을 설정합니다. 예를 들어 다른 클러스터의 이름은 site-b 입니다.

      ceph_rbd_mirror_remote_cluster: "site-b"
    9. Ansible 관리 노드에서 group_vars/rbdmirrors.yml 파일에서 ceph_rbd_mirror_remote_user 를 사용하여 키의 사용자 이름을 설정합니다. 이 예제에서는 user의 이름은 client.site-b 입니다.

      ceph_rbd_mirror_remote_user: "client.site-b"
    10. 관리 노드에서 Ansible 사용자로 Ansible 플레이북을 실행합니다.

      • 베어 메탈 배포:

        [user@admin ceph-ansible]$ ansible-playbook site.yml --limit rbdmirrors -i hosts
      • 컨테이너 배포:

        [user@admin ceph-ansible]$ ansible-playbook site-container.yml --limit rbdmirrors -i hosts
  7. site-asite-b 클러스터 모두에서 원하는 이미지에서 미러링을 명시적으로 활성화합니다.

    구문

    저널 기반 미러링:

    rbd mirror image enable POOL/IMAGE

    스냅샷 기반 미러링:

    rbd mirror image enable POOL/IMAGE snapshot

    예제

    [root@mon ~]# rbd mirror image enable data/image1
    [root@mon ~]# rbd mirror image enable data/image1 snapshot

    참고

    새 이미지를 피어 클러스터에 미러링할 때마다 이 단계를 반복합니다.

  8. 미러링 상태를 확인합니다. site-a 클러스터의 클라이언트 노드에서 다음 명령을 실행합니다.

    예제

    저널 기반 미러링:

    [root@mon ~]# rbd mirror image status data/image1
    image1:
      global_id:   08027096-d267-47f8-b52e-59de1353a034
      state:       up+stopped 1
      description: local image is primary
      last_update: 2021-04-16 15:45:31

    스냅샷 기반 미러링:

    [root@mon ~]# rbd mirror image status data/image1
    image1:
      global_id:   47fd1aae-5f19-4193-a5df-562b5c644ea7
      state:       up+stopped 1
      description: local image is primary
      service:     admin on ceph-rbd1-vasi-43-5hwia4-node2
      last_update: 2022-01-20 12:42:54
      peer_sites:
        name: rbd-mirror.site-b
        state: up+replaying
        description: replaying, {"bytes_per_second":0.0,"bytes_per_snapshot":0.0,"local_snapshot_timestamp":1642693094,"remote_snapshot_timestamp":1642693094,"replay_state":"idle"}
        last_update: 2022-01-20 12:42:59
      snapshots:
        5 .mirror.primary.47fd1aae-5f19-4193-a5df-562b5c644ea7.dda146c6-5f21-4e75-ba93-660f6e57e301 (peer_uuids:[bfd09289-c9c9-40c8-b2d3-ead9b6a99a45])
    1 1
    이미지 상태가 up+stopped 이어야 합니다. 여기서 uprbd-mirror 데몬이 실행 중이며 중지됨을 의미합니다. 즉, 이미지가 다른 클러스터의 복제 대상이 아님을 의미합니다. 이는 이미지가 이 클러스터에서 기본 설정이기 때문입니다.