5.7. 다중 사이트 Ceph 개체 게이트웨이 구성

시스템 관리자는 재해 복구를 위해 클러스터 간에 데이터를 미러링하도록 다중 사이트 Ceph 개체 게이트웨이를 구성할 수 있습니다.

하나 이상의 RGW 영역으로 다중 사이트를 구성할 수 있습니다. 영역을 사용하면 내부 RGW가 독립적이며 영역 외부의 RGW와 분리할 수 있습니다. 이러한 방식으로, 한 영역에서 RGW에 기록된 데이터는 다른 영역에서 RGW에 의해 액세스될 수 없습니다.

주의

Ceph-ansible은 단일 사이트 구성에서 이미 사용된 후 다중 사이트 설정으로 게이트웨이를 재구성할 수 없습니다. 이 구성을 수동으로 배포할 수 있습니다. Red Hat 지원팀에 문의하십시오.

참고

Red Hat Ceph Storage 4.1에서는 group_vars/all.yml 파일에서 rgw_multisite_endpoints_list 값을 설정할 필요가 없습니다.

자세한 내용은 Red Hat Ceph Storage Object Gateway 구성 및 관리 가이드다중 사이트 섹션을 참조하십시오.

5.7.1. 사전 요구 사항

5.7.2. 하나의 영역을 사용하여 다중 사이트 Ceph Object Gateway 구성

Ceph-ansible은 여러 Ceph Object Gateway 인스턴스가 있는 여러 스토리지 클러스터에서 한 영역의 데이터를 미러링하도록 Ceph 오브젝트 게이트웨이를 구성합니다.

주의

Ceph-ansible은 단일 사이트 구성에서 이미 사용된 후 다중 사이트 설정으로 게이트웨이를 재구성할 수 없습니다. 이 구성을 수동으로 배포할 수 있습니다. Red Hat 지원팀에 문의하십시오.

사전 요구 사항

절차

  1. 시스템 키를 생성하고 multi-site-keys.txt 파일에서 출력을 캡처합니다.

    [root@ansible ~]# echo system_access_key: $(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 20 | head -n 1) > multi-site-keys.txt
    [root@ansible ~]# echo system_secret_key: $(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 40 | head -n 1) >> multi-site-keys.txt

기본 스토리지 클러스터

  1. Ceph-ansible 구성 디렉터리로 이동합니다.

    [root@ansible ~]# cd /usr/share/ceph-ansible
  2. group_vars/all.yml 파일을 열고 편집합니다. rgw_multisite 행의 주석을 제거하고 true 로 설정합니다. rgw_multisite_proto 매개변수의 주석을 제거합니다.

    rgw_multisite: true
    rgw_multisite_proto: "http"
  3. /usr/share/ceph-ansiblehost_vars 디렉토리를 만듭니다.

    [root@ansible ceph-ansible]# mkdir host_vars
  4. 기본 스토리지 클러스터의 각 Object Gateway 노드에 대해 host_vars 에 파일을 만듭니다. 파일 이름은 Ansible 인벤토리 파일에서 사용된 이름과 동일해야 합니다. 예를 들어 Object Gateway 노드의 이름이 rgw- primary 인 경우 host_vars/rgw- primary 파일을 만듭니다.

    구문

    touch host_vars/NODE_NAME

    예제

    [root@ansible ceph-ansible]# touch host_vars/rgw-primary

    참고

    다중 사이트 구성에 사용되는 클러스터에 여러 Ceph Object Gateway 노드가 있는 경우 각 노드에 대해 별도의 파일을 생성합니다.

  5. 파일을 편집하고 해당 Object Gateway 노드의 모든 인스턴스에 대한 구성 세부 정보를 추가합니다. ZONE_NAME,ZONE_GROUP_NAME,ZONE_USER_NAME,ZONE_DISPLAY_NAMEREALM_NAME 업데이트와 함께 다음 설정을 구성합니다. ACCESS_KEY 및ECDHERET_KEY 용으로 multi-site-keys.txt 파일에 저장된 임의의 문자열을 사용합니다.

    구문

    rgw_instances:
      - instance_name: 'INSTANCE_NAME'
          rgw_multisite: true
          rgw_zonemaster: true
          rgw_zonesecondary: false
          rgw_zonegroupmaster: true
          rgw_zone: ZONE_NAME_1
          rgw_zonegroup: ZONE_GROUP_NAME_1
          rgw_realm: REALM_NAME_1
          rgw_zone_user: ZONE_USER_NAME_1
          rgw_zone_user_display_name: "ZONE_DISPLAY_NAME_1"
          system_access_key: ACCESS_KEY_1
          system_secret_key: SECRET_KEY_1
          radosgw_address: "{{ _radosgw_address }}"
          radosgw_frontend_port: RGW_PRIMARY_PORT_NUMBER_1

    예제

    rgw_instances:
      - instance_name: 'rgw0'
          rgw_multisite: true
          rgw_zonemaster: true
          rgw_zonesecondary: false
          rgw_zonegroupmaster: true
          rgw_zone: paris
          rgw_zonegroup: idf
          rgw_realm: france
          rgw_zone_user: jacques.chirac
          rgw_zone_user_display_name: "Jacques Chirac"
          system_access_key: P9Eb6S8XNyo4dtZZUUMy
          system_secret_key: qqHCUtfdNnpHq3PZRHW5un9l0bEBM812Uhow0XfB
          radosgw_address: "{{ _radosgw_address }}"
          radosgw_frontend_port: 8080

  6. 선택 사항: 여러 인스턴스를 생성하려면 파일을 편집하고 각 Object Gateway 노드의 모든 인스턴스에 구성 세부 정보를 추가합니다. rgw_instances 에서 항목을 업데이트하는 것과 함께 다음 설정을 구성합니다. ACCESS_KEY_1SECRET_KEY_1 의 경우 multi-site-keys-realm-1.txt 파일에 저장된 임의의 문자열을 사용합니다.

    구문

    rgw_instances:
      - instance_name: 'INSTANCE_NAME_1'
          rgw_multisite: true
          rgw_zonemaster: true
          rgw_zonesecondary: false
          rgw_zonegroupmaster: true
          rgw_zone: ZONE_NAME_1
          rgw_zonegroup: ZONE_GROUP_NAME_1
          rgw_realm: REALM_NAME_1
          rgw_zone_user: ZONE_USER_NAME_1
          rgw_zone_user_display_name: "ZONE_DISPLAY_NAME_1"
          system_access_key: ACCESS_KEY_1
          system_secret_key: SECRET_KEY_1
          radosgw_address: "{{ _radosgw_address }}"
          radosgw_frontend_port: PORT_NUMBER_1
      - instance_name: 'INSTANCE_NAME_2'
          rgw_multisite: true
          rgw_zonemaster: true
          rgw_zonesecondary: false
          rgw_zonegroupmaster: true
          rgw_zone: ZONE_NAME_1
          rgw_zonegroup: ZONE_GROUP_NAME_1
          rgw_realm: REALM_NAME_1
          rgw_zone_user: ZONE_USER_NAME_1
          rgw_zone_user_display_name: "ZONE_DISPLAY_NAME_1"
          system_access_key: ACCESS_KEY_1
          system_secret_key: SECRET_KEY_1
          radosgw_address: "{{ _radosgw_address }}"
          radosgw_frontend_port: PORT_NUMBER_2

    예제

    rgw_instances:
      - instance_name: 'rgw0'
          rgw_multisite: true
          rgw_zonemaster: true
          rgw_zonesecondary: false
          rgw_zonegroupmaster: true
          rgw_zone: paris
          rgw_zonegroup: idf
          rgw_realm: france
          rgw_zone_user: jacques.chirac
          rgw_zone_user_display_name: "Jacques Chirac"
          system_access_key: P9Eb6S8XNyo4dtZZUUMy
          system_secret_key: qqHCUtfdNnpHq3PZRHW5un9l0bEBM812Uhow0XfB
          radosgw_address: "{{ _radosgw_address }}"
          radosgw_frontend_port: 8080
     - instance_name: 'rgw1'
          rgw_multisite: true
          rgw_zonemaster: true
          rgw_zonesecondary: false
          rgw_zonegroupmaster: true
          rgw_zone: paris
          rgw_zonegroup: idf
          rgw_realm: france
          rgw_zone_user: jacques.chirac
          rgw_zone_user_display_name: "Jacques Chirac"
          system_access_key: P9Eb6S8XNyo4dtZZUUMy
          system_secret_key: qqHCUtfdNnpHq3PZRHW5un9l0bEBM812Uhow0XfB
          radosgw_address: "{{ _radosgw_address }}"
          radosgw_frontend_port: 8081

보조 스토리지 클러스터

  1. Ceph-ansible 구성 디렉터리로 이동합니다.

    [root@ansible ~]# cd /usr/share/ceph-ansible
  2. group_vars/all.yml 파일을 열고 편집합니다. rgw_multisite 행의 주석을 제거하고 true 로 설정합니다. rgw_multisite_proto 매개변수의 주석을 제거합니다.

    rgw_multisite: true
    rgw_multisite_proto: "http"
  3. /usr/share/ceph-ansiblehost_vars 디렉토리를 만듭니다.

    [root@ansible ceph-ansible]# mkdir host_vars
  4. 보조 스토리지 클러스터의 각 Object Gateway 노드에 대해 host_vars 에 파일을 만듭니다. 파일 이름은 Ansible 인벤토리 파일에서 사용된 이름과 동일해야 합니다. 예를 들어 Object Gateway 노드의 이름이 rgw-secondary 인 경우 host_vars/rgw-secondary 파일을 만듭니다.

    구문

    touch host_vars/NODE_NAME

    예제

    [root@ansible ceph-ansible]# touch host_vars/rgw-secondary

    참고

    다중 사이트 구성에 사용되는 클러스터에 여러 Ceph Object Gateway 노드가 있는 경우 각 노드에 대해 파일을 생성합니다.

  5. 다음 설정을 구성합니다. 첫 번째 클러스터에서 ZONE_USER_NAME,ZONE_DISPLAY_NAME,ACCESS_KEY, ECDHERET_KEY ,REALM_ NAME, ZONE_GROUP_NAME 에 사용된 값과 동일한 값을 사용합니다. 기본 스토리지 클러스터의 ZONE_NAME 에 다른 값을 사용합니다. ECDHE TER_RGW_NODE_NAME 을 master 영역의 Ceph Object Gateway 노드로 설정합니다. 기본 스토리지 클러스터와 비교하여 rgw_zonemaster,rgw_zonesecondary, rgw_zonegroupmaster 에 대한 설정이 반전됩니다.

    구문

    rgw_instances:
      - instance_name: 'INSTANCE_NAME_1'
          rgw_multisite: true
          rgw_zonemaster: false
          rgw_zonesecondary: true
          rgw_zonegroupmaster: false
          rgw_zone: ZONE_NAME_2
          rgw_zonegroup: ZONE_GROUP_NAME_1
          rgw_realm: REALM_NAME_1
          rgw_zone_user: ZONE_USER_NAME_1
          rgw_zone_user_display_name: "ZONE_DISPLAY_NAME_1"
          system_access_key: ACCESS_KEY_1
          system_secret_key: SECRET_KEY_1
          radosgw_address: "{{ _radosgw_address }}"
          radosgw_frontend_port: PORT_NUMBER_1
          endpoint: RGW_PRIMARY_HOSTNAME_ENDPOINT:RGW_PRIMARY_PORT_NUMBER_1

    예제

    rgw_instances:
      - instance_name: 'rgw0'
          rgw_multisite: true
          rgw_zonemaster: false
          rgw_zonesecondary: true
          rgw_zonegroupmaster: false
          rgw_zone: lyon
          rgw_zonegroup: idf
          rgw_realm: france
          rgw_zone_user: jacques.chirac
          rgw_zone_user_display_name: "Jacques Chirac"
          system_access_key: P9Eb6S8XNyo4dtZZUUMy
          system_secret_key: qqHCUtfdNnpHq3PZRHW5un9l0bEBM812Uhow0XfB
          radosgw_address: "{{ _radosgw_address }}"
          radosgw_frontend_port: 8080
          endpoint: http://rgw-primary:8081

  6. 선택 사항: 여러 인스턴스를 생성하려면 파일을 편집하고 각 Object Gateway 노드의 모든 인스턴스에 구성 세부 정보를 추가합니다. rgw_instances 에서 항목을 업데이트하는 것과 함께 다음 설정을 구성합니다. ACCESS_KEY_1SECRET_KEY_1 의 경우 multi-site-keys-realm-1.txt 파일에 저장된 임의의 문자열을 사용합니다. RGW_PRIECDHE_HOSTNAME 을 기본 스토리지 클러스터의 Object Gateway 노드로 설정합니다.

    구문

    rgw_instances:
      - instance_name: 'INSTANCE_NAME_1'
          rgw_multisite: true
          rgw_zonemaster: false
          rgw_zonesecondary: true
          rgw_zonegroupmaster: false
          rgw_zone: ZONE_NAME_2
          rgw_zonegroup: ZONE_GROUP_NAME_1
          rgw_realm: REALM_NAME_1
          rgw_zone_user: ZONE_USER_NAME_1
          rgw_zone_user_display_name: "ZONE_DISPLAY_NAME_1"
          system_access_key: ACCESS_KEY_1
          system_secret_key: SECRET_KEY_1
          radosgw_address: "{{ _radosgw_address }}"
          radosgw_frontend_port: PORT_NUMBER_1
          endpoint: RGW_PRIMARY_HOSTNAME:RGW_PRIMARY_PORT_NUMBER_1
      - instance_name: '_INSTANCE_NAME_2_'
          rgw_multisite: true
          rgw_zonemaster: false
          rgw_zonesecondary: true
          rgw_zonegroupmaster: false
          rgw_zone: ZONE_NAME_2
          rgw_zonegroup: ZONE_GROUP_NAME_1
          rgw_realm: REALM_NAME_1
          rgw_zone_user: ZONE_USER_NAME_1
          rgw_zone_user_display_name: "ZONE_DISPLAY_NAME_1"
          system_access_key: ACCESS_KEY_1
          system_secret_key: SECRET_KEY_1
          radosgw_address: "{{ _radosgw_address }}"
          radosgw_frontend_port:  PORT_NUMBER_1
          endpoint: RGW_PRIMARY_HOSTNAME:RGW_PRIMARY_PORT_NUMBER_2

    예제

    rgw_instances:
      - instance_name: 'rgw0'
          rgw_multisite: true
          rgw_zonemaster: false
          rgw_zonesecondary: true
          rgw_zonegroupmaster: false
          rgw_zone: lyon
          rgw_zonegroup: idf
          rgw_realm: france
          rgw_zone_user: jacques.chirac
          rgw_zone_user_display_name: "Jacques Chirac"
          system_access_key: P9Eb6S8XNyo4dtZZUUMy
          system_secret_key: qqHCUtfdNnpHq3PZRHW5un9l0bEBM812Uhow0XfB
          radosgw_address: "{{ _radosgw_address }}"
          radosgw_frontend_port: 8080
          endpoint: http://rgw-primary:8080
      - instance_name: 'rgw1'
          rgw_multisite: true
          rgw_zonemaster: false
          rgw_zonesecondary: true
          rgw_zonegroupmaster: false
          rgw_zone: lyon
          rgw_zonegroup: idf
          rgw_realm: france
          rgw_zone_user: jacques.chirac
          rgw_zone_user_display_name: "Jacques Chirac"
          system_access_key: P9Eb6S8XNyo4dtZZUUMy
          system_secret_key: qqHCUtfdNnpHq3PZRHW5un9l0bEBM812Uhow0XfB
          radosgw_address: "{{ _radosgw_address }}"
          radosgw_frontend_port: 8081
          endpoint: http://rgw-primary:8081

두 사이트 모두에서 다음 단계를 실행합니다.

  1. 기본 스토리지 클러스터에서 Ansible 플레이북을 실행합니다.

    • 베어 메탈 배포:

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

      [user@ansible ceph-ansible]$ ansible-playbook site-container.yml -i hosts
  2. 보조 스토리지 클러스터가 기본 스토리지 클러스터의 API에 액세스할 수 있는지 확인합니다.

    보조 스토리지 클러스터의 Object Gateway 노드에서 curl 또는 다른 HTTP 클라이언트를 사용하여 기본 클러스터의 API에 연결합니다. all.yml 에서 rgw_pull_proto,rgw_pullhost, rgw_pull_port 를 구성하는 데 사용되는 정보를 사용하여 URL을 작성합니다. 위의 예에 따라 URL은 http://cluster0-rgw-000:8080 입니다. API에 액세스할 수 없는 경우 URL이 올바른지 확인하고 필요한 경우 all.yml 을 업데이트합니다. URL이 작동하고 네트워크 문제가 해결되면 다음 단계를 계속하여 보조 스토리지 클러스터에서 Ansible 플레이북을 실행합니다.

  3. 보조 스토리지 클러스터에서 Ansible 플레이북을 실행합니다.

    참고

    클러스터가 배포되고 Ceph Object Gateway를 변경하는 경우 --limit rgws 옵션을 사용합니다.

    • 베어 메탈 배포:

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

      [user@ansible ceph-ansible]$ ansible-playbook site-container.yml -i hosts

      기본 및 보조 스토리지 클러스터에서 Ansible 플레이북을 실행하면 Ceph Object Gateways가 active-active 상태로 실행됩니다.

  4. 두 사이트에서 다중 사이트 Ceph Object Gateway 구성을 확인합니다.

    구문

    radosgw-admin sync status

5.7.3. 여러 영역 및 여러 인스턴스를 사용하여 다중 사이트 Ceph Object Gateway 구성

Ceph-ansible은 여러 Ceph Object Gateway 인스턴스가 있는 여러 스토리지 클러스터에서 여러 영역의 데이터를 미러링하도록 Ceph Object Gateway를 구성합니다.

주의

Ceph-ansible은 단일 사이트 구성에서 이미 사용된 후에는 게이트웨이를 다중 사이트 설정으로 재구성할 수 없습니다. 이 구성을 수동으로 배포할 수 있습니다. Red Hat 지원팀에 문의하십시오.

사전 요구 사항

절차

  1. 임의의 노드에서 영역 1과 2의 시스템 액세스 키와 시크릿 키를 생성하고 multi-site-keys-realm-1.txtmulti-site-keys-realm-2.txt 라는 파일에 각각 저장합니다.

    # echo system_access_key: $(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 20 | head -n 1) > multi-site-keys-realm-1.txt
    [root@ansible ~]# echo system_secret_key: $(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 40 | head -n 1) >> multi-site-keys-realm-1.txt
    
    # echo system_access_key: $(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 20 | head -n 1) > multi-site-keys-realm-2.txt
    [root@ansible ~]# echo system_secret_key: $(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 40 | head -n 1) >> multi-site-keys-realm-2.txt

사이트-A 스토리지 클러스터

  1. Ansible 구성 디렉터리로 이동합니다.

    [root@ansible ~]# cd /usr/share/ceph-ansible
  2. group_vars/all.yml 파일을 열고 편집합니다. rgw_multisite 행의 주석을 제거하고 true 로 설정합니다. rgw_multisite_proto 매개변수의 주석을 제거합니다.

    rgw_multisite: true
    rgw_multisite_proto: "http"
  3. /usr/share/ceph-ansiblehost_vars 디렉토리를 만듭니다.

    [root@ansible ceph-ansible]# mkdir host_vars
  4. site-A 스토리지 클러스터의 각 Object Gateway 노드에 대해 host_vars 에 파일을 만듭니다. 파일 이름은 Ansible 인벤토리 파일에서 사용된 이름과 동일해야 합니다. 예를 들어 오브젝트 게이트웨이 노드의 이름이 rgw-site-a 인 경우 host_vars/rgw-site-a 파일을 만듭니다.

    구문

    touch host_vars/NODE_NAME

    예제

    [root@ansible ceph-ansible]# touch host_vars/rgw-site-a

    참고

    다중 사이트 구성에 사용되는 클러스터에 여러 Ceph Object Gateway 노드가 있는 경우 각 노드에 대해 별도의 파일을 생성합니다.

  5. 첫 번째 영역에 여러 인스턴스를 생성하려면 파일을 편집하고 각 Object Gateway 노드의 모든 인스턴스에 구성 세부 정보를 추가합니다. 첫 번째 영역에 대한 rgw_instances 아래의 항목을 업데이트하고 함께 다음 설정을 구성합니다. ACCESS_KEY_1SECRET_KEY_1 의 경우 multi-site-keys-realm-1.txt 파일에 저장된 임의의 문자열을 사용합니다.

    구문

    rgw_instances:
      - instance_name: '_INSTANCE_NAME_1_'
          rgw_multisite: true
          rgw_zonemaster: true
          rgw_zonesecondary: false
          rgw_zonegroupmaster: true
          rgw_zone: ZONE_NAME_1
          rgw_zonegroup: ZONE_GROUP_NAME_1
          rgw_realm: REALM_NAME_1
          rgw_zone_user: ZONE_USER_NAME_1
          rgw_zone_user_display_name: "ZONE_DISPLAY_NAME_1"
          system_access_key: ACCESS_KEY_1
          system_secret_key: SECRET_KEY_1
          radosgw_address: "{{ _radosgw_address }}"
          radosgw_frontend_port: PORT_NUMBER_1
        - instance_name: '_INSTANCE_NAME_2_'
          rgw_multisite: true
          rgw_zonemaster: true
          rgw_zonesecondary: false
          rgw_zonegroupmaster: true
          rgw_zone: ZONE_NAME_1
          rgw_zonegroup: ZONE_GROUP_NAME_1
          rgw_realm: REALM_NAME_1
          rgw_zone_user: ZONE_USER_NAME_1
          rgw_zone_user_display_name: "ZONE_DISPLAY_NAME_1"
          system_access_key: ACCESS_KEY_1
          system_secret_key: SECRET_KEY_1
          radosgw_address: "{{ _radosgw_address }}"
          radosgw_frontend_port: PORT_NUMBER_1

    예제

    rgw_instances:
      - instance_name: 'rgw0'
          rgw_multisite: true
          rgw_zonemaster: true
          rgw_zonesecondary: false
          rgw_zonegroupmaster: true
          rgw_zone: paris
          rgw_zonegroup: idf
          rgw_realm: france
          rgw_zone_user: jacques.chirac
          rgw_zone_user_display_name: "Jacques Chirac"
          system_access_key: P9Eb6S8XNyo4dtZZUUMy
          system_secret_key: qqHCUtfdNnpHq3PZRHW5un9l0bEBM812Uhow0XfB
          radosgw_address: "{{ _radosgw_address }}"
          radosgw_frontend_port: 8080
     - instance_name: 'rgw1'
          rgw_multisite: true
          rgw_zonemaster: true
          rgw_zonesecondary: false
          rgw_zonegroupmaster: true
          rgw_zone: paris
          rgw_zonegroup: idf
          rgw_realm: france
          rgw_zone_user: jacques.chirac
          rgw_zone_user_display_name: "Jacques Chirac"
          system_access_key: P9Eb6S8XNyo4dtZZUUMy
          system_secret_key: qqHCUtfdNnpHq3PZRHW5un9l0bEBM812Uhow0XfB
          radosgw_address: "{{ _radosgw_address }}"
          radosgw_frontend_port: 8080

    참고

    다음 단계를 건너뛰고 실행한 후 site-B의 모든 영역을 해당 영역에 보조로 구성한 후 Ansible 플레이북을 실행합니다.

  6. 다른 영역에 대한 여러 인스턴스의 경우 rgw_instances 의 항목을 업데이트하는 것과 함께 다음 설정을 구성합니다. ACCESS_KEY_2SECRET_KEY_2 의 경우 multi-site-keys-realm-2.txt 파일에 저장된 임의의 문자열을 사용합니다.

    구문

    rgw_instances:
      - instance_name: 'INSTANCE_NAME_1'
          rgw_multisite: true
          rgw_zonemaster: false
          rgw_zonesecondary: true
          rgw_zonegroupmaster: false
          rgw_zone: ZONE_NAME_2
          rgw_zonegroup: ZONE_GROUP_NAME_2
          rgw_realm: REALM_NAME_2
          rgw_zone_user: ZONE_USER_NAME_2
          rgw_zone_user_display_name: "ZONE_DISPLAY_NAME_2"
          system_access_key: ACCESS_KEY_2
          system_secret_key: SECRET_KEY_2
          radosgw_address: "{{ _radosgw_address }}"
          radosgw_frontend_port: PORT_NUMBER_1
          endpoint: RGW_SITE_B_PRIMARY_HOSTNAME_ENDPOINT:RGW_SITE_B_PORT_NUMBER_1
      - instance_name: 'INSTANCE_NAME_2'
          rgw_multisite: true
          rgw_zonemaster: false
          rgw_zonesecondary: true
          rgw_zonegroupmaster: false
          rgw_zone: ZONE_NAME_2
          rgw_zonegroup: ZONE_GROUP_NAME_2
          rgw_realm: REALM_NAME_2
          rgw_zone_user: ZONE_USER_NAME_2
          rgw_zone_user_display_name: "ZONE_DISPLAY_NAME_2"
          system_access_key: ACCESS_KEY_2
          system_secret_key: SECRET_KEY_2
          radosgw_address: "{{ _radosgw_address }}"
          radosgw_frontend_port: PORT_NUMBER_1
          endpoint: RGW_SITE_B_PRIMARY_HOSTNAME_ENDPOINT:RGW_SITE_B_PORT_NUMBER_1

    예제

    rgw_instances:
      - instance_name: 'rgw0'
          rgw_multisite: true
          rgw_zonemaster: false
          rgw_zonesecondary: true
          rgw_zonegroupmaster: false
          rgw_zone: fairbanks
          rgw_zonegroup: alaska
          rgw_realm: usa
          rgw_zone_user: edward.lewis
          rgw_zone_user_display_name: "Edward Lewis"
          system_access_key: yu17wkvAx3B8Wyn08XoF
          system_secret_key: 5YZfaSUPqxSNIkZQQA3lBZ495hnIV6k2HAz710BY
          radosgw_address: "{{ _radosgw_address }}"
          radosgw_frontend_port: 8080
          endpoint: http://rgw-site-b:8081
      - instance_name: 'rgw1'
          rgw_multisite: true
          rgw_zonemaster: false
          rgw_zonesecondary: true
          rgw_zonegroupmaster: false
          rgw_zone: fairbanks
          rgw_zonegroup: alaska
          rgw_realm: usa
          rgw_zone_user: edward.lewis
          rgw_zone_user_display_name: "Edward Lewis"
          system_access_key: yu17wkvAx3B8Wyn08XoF
          system_secret_key: 5YZfaSUPqxSNIkZQQA3lBZ495hnIV6k2HAz710BY
          radosgw_address: "{{ _radosgw_address }}"
          radosgw_frontend_port: 8081
          endpoint: http://rgw-site-b:8081

  7. site-A 스토리지 클러스터에서 Ansible 플레이북을 실행합니다.

    • 베어 메탈 배포:

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

      [user@ansible ceph-ansible]$ ansible-playbook site-container.yml -i hosts

사이트-B 스토리지 클러스터

  1. Ceph-ansible 구성 디렉터리로 이동합니다.

    [root@ansible ~]# cd /usr/share/ceph-ansible
  2. group_vars/all.yml 파일을 열고 편집합니다. rgw_multisite 행의 주석을 제거하고 true 로 설정합니다. rgw_multisite_proto 매개변수의 주석을 제거합니다.

    rgw_multisite: true
    rgw_multisite_proto: "http"
  3. /usr/share/ceph-ansiblehost_vars 디렉토리를 만듭니다.

    [root@ansible ceph-ansible]# mkdir host_vars
  4. site-B 스토리지 클러스터에서 각 Object Gateway 노드에 대해 host_vars 에 파일을 만듭니다. 파일 이름은 Ansible 인벤토리 파일에서 사용된 이름과 동일해야 합니다. 예를 들어 오브젝트 게이트웨이 노드의 이름이 rgw-site-b 인 경우 host_vars/rgw-site-b 파일을 만듭니다.

    구문

    touch host_vars/NODE_NAME

    예제

    [root@ansible ceph-ansible]# touch host_vars/rgw-site-b

    참고

    다중 사이트 구성에 사용되는 클러스터에 여러 Ceph Object Gateway 노드가 있는 경우 각 노드에 대해 파일을 생성합니다.

  5. 첫 번째 영역에 여러 인스턴스를 생성하려면 파일을 편집하고 각 Object Gateway 노드의 모든 인스턴스에 구성 세부 정보를 추가합니다. 첫 번째 영역에 대한 rgw_instances 아래의 항목을 업데이트하고 함께 다음 설정을 구성합니다. ACCESS_KEY_1SECRET_KEY_1 의 경우 multi-site-keys-realm-1.txt 파일에 저장된 임의의 문자열을 사용합니다. RGW_SITE_A_PRIECDHE_HOSTNAME_ENDPOINT 를 site-A 스토리지 클러스터의 Object Gateway 노드로 설정합니다.

    구문

    rgw_instances:
      - instance_name: 'INSTANCE_NAME_1'
          rgw_multisite: true
          rgw_zonemaster: false
          rgw_zonesecondary: true
          rgw_zonegroupmaster: false
          rgw_zone: ZONE_NAME_1
          rgw_zonegroup: ZONE_GROUP_NAME_1
          rgw_realm: REALM_NAME_1
          rgw_zone_user: ZONE_USER_NAME_1
          rgw_zone_user_display_name: "ZONE_DISPLAY_NAME_1"
          system_access_key: ACCESS_KEY_1
          system_secret_key: SECRET_KEY_1
          radosgw_address: "{{ _radosgw_address }}"
          radosgw_frontend_port: PORT_NUMBER_1
          endpoint: RGW_SITE_A_HOSTNAME_ENDPOINT:RGW_SITE_A_PORT_NUMBER_1
      - instance_name: '_INSTANCE_NAME_2_'
          rgw_multisite: true
          rgw_zonemaster: false
          rgw_zonesecondary: true
          rgw_zonegroupmaster: false
          rgw_zone: ZONE_NAME_1
          rgw_zonegroup: ZONE_GROUP_NAME_1
          rgw_realm: REALM_NAME_1
          rgw_zone_user: ZONE_USER_NAME_1
          rgw_zone_user_display_name: "ZONE_DISPLAY_NAME_1"
          system_access_key: ACCESS_KEY_1
          system_secret_key: SECRET_KEY_1
          radosgw_address: "{{ _radosgw_address }}"
          radosgw_frontend_port:  PORT_NUMBER_1
          endpoint: RGW_SITE_A_PRIMARY_HOSTNAME_ENDPOINT:RGW_SITE_A_PORT_NUMBER_1

    예제

    rgw_instances:
      - instance_name: 'rgw0'
          rgw_multisite: true
          rgw_zonemaster: false
          rgw_zonesecondary: true
          rgw_zonegroupmaster: false
          rgw_zone: paris
          rgw_zonegroup: idf
          rgw_realm: france
          rgw_zone_user: jacques.chirac
          rgw_zone_user_display_name: "Jacques Chirac"
          system_access_key: P9Eb6S8XNyo4dtZZUUMy
          system_secret_key: qqHCUtfdNnpHq3PZRHW5un9l0bEBM812Uhow0XfB
          radosgw_address: "{{ _radosgw_address }}"
          radosgw_frontend_port: 8080
          endpoint: http://rgw-site-a:8080
      - instance_name: 'rgw1'
          rgw_multisite: true
          rgw_zonemaster: false
          rgw_zonesecondary: true
          rgw_zonegroupmaster: false
          rgw_zone: paris
          rgw_zonegroup: idf
          rgw_realm: france
          rgw_zone_user: jacques.chirac
          rgw_zone_user_display_name: "Jacques Chirac"
          system_access_key: P9Eb6S8XNyo4dtZZUUMy
          system_secret_key: qqHCUtfdNnpHq3PZRHW5un9l0bEBM812Uhow0XfB
          radosgw_address: "{{ _radosgw_address }}"
          radosgw_frontend_port: 8081
          endpoint: http://rgw-site-a:8081

  6. 다른 영역에 대한 여러 인스턴스의 경우 rgw_instances 의 항목을 업데이트하는 것과 함께 다음 설정을 구성합니다. ACCESS_KEY_2SECRET_KEY_2 의 경우 multi-site-keys-realm-2.txt 파일에 저장된 임의의 문자열을 사용합니다. RGW_SITE_A_PRIECDHE_HOSTNAME_ENDPOINT 를 site-A 스토리지 클러스터의 Object Gateway 노드로 설정합니다.

    구문

    rgw_instances:
      - instance_name: 'INSTANCE_NAME_1'
          rgw_multisite: true
          rgw_zonemaster: true
          rgw_zonesecondary: false
          rgw_zonegroupmaster: true
          rgw_zone: ZONE_NAME_2
          rgw_zonegroup: ZONE_GROUP_NAME_2
          rgw_realm: REALM_NAME_2
          rgw_zone_user: ZONE_USER_NAME_2
          rgw_zone_user_display_name: "ZONE_DISPLAY_NAME_2"
          system_access_key: ACCESS_KEY_2
          system_secret_key: SECRET_KEY_2
          radosgw_address: "{{ _radosgw_address }}"
          radosgw_frontend_port: PORT_NUMBER_1
      - instance_name: '_INSTANCE_NAME_2_'
          rgw_multisite: true
          rgw_zonemaster: true
          rgw_zonesecondary: false
          rgw_zonegroupmaster: true
          rgw_zone: ZONE_NAME_2
          rgw_zonegroup: ZONE_GROUP_NAME_2
          rgw_realm: REALM_NAME_2
          rgw_zone_user: ZONE_USER_NAME_2
          rgw_zone_user_display_name: "ZONE_DISPLAY_NAME_2"
          system_access_key: ACCESS_KEY_2
          system_secret_key: SECRET_KEY_2
          radosgw_address: "{{ _radosgw_address }}"
          radosgw_frontend_port: PORT_NUMBER_1

    예제

    rgw_instances:
      - instance_name: 'rgw0'
          rgw_multisite: true
          rgw_zonemaster: true
          rgw_zonesecondary: false
          rgw_zonegroupmaster: true
          rgw_zone: fairbanks
          rgw_zonegroup: alaska
          rgw_realm: usa
          rgw_zone_user: edward.lewis
          rgw_zone_user_display_name: "Edward Lewis"
          system_access_key: yu17wkvAx3B8Wyn08XoF
          system_secret_key: 5YZfaSUPqxSNIkZQQA3lBZ495hnIV6k2HAz710BY
          radosgw_address: "{{ _radosgw_address }}"
          radosgw_frontend_port: 8080
      - instance_name: 'rgw1'
          rgw_multisite: true
          rgw_zonemaster: true
          rgw_zonesecondary: false
          rgw_zonegroupmaster: true
          rgw_zone: fairbanks
          rgw_zonegroup: alaska
          rgw_realm: usa
          rgw_zone_user: edward.lewis
          rgw_zone_user_display_name: "Edward Lewis"
          system_access_key: yu17wkvAx3B8Wyn08XoF
          system_secret_key: 5YZfaSUPqxSNIkZQQA3lBZ495hnIV6k2HAz710BY
          radosgw_address: "{{ _radosgw_address }}"
          radosgw_frontend_port: 8081

  7. site-B 스토리지 클러스터에서 Ansible 플레이북을 실행합니다.

    • 베어 메탈 배포:

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

      [user@ansible ceph-ansible]$ ansible-playbook site-container.yml -i hosts

      site-A다른 영역에 대해 site-A 스토리지 클러스터에서 Ansible 플레이북을 다시 실행합니다.

      site-Asite-B 스토리지 클러스터에서 Ansible 플레이북을 실행하면 Ceph Object Gateway가 active-active 상태로 실행됩니다.

검증

  1. 다중 사이트 Ceph Object Gateway 구성을 확인합니다.

    1. 각 사이트의 Ceph Monitor 및 Object Gateway 노드에서 site-A 및 site-B를 사용하여 curl 또는 다른 HTTP 클라이언트를 사용하여 API에 다른 사이트에서 액세스할 수 있는지 확인합니다.
    2. 두 사이트 모두에서 radosgw-admin sync status 명령을 실행합니다.

      구문

      radosgw-admin sync status
      radosgw-admin sync status --rgw -realm REALM_NAME 1

      1
      스토리지 클러스터의 각 노드에서 여러 영역에 이 옵션을 사용합니다.

      예제

      [user@ansible ceph-ansible]$ radosgw-admin sync status
      
      [user@ansible ceph-ansible]$ radosgw-admin sync status --rgw -realm usa