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. 사전 요구 사항
- Red Hat Ceph Storage 클러스터 두 개
- Ceph Object Gateway 노드에서 Red Hat Ceph Storage 설치 가이드의 Red Hat Ceph Storage 설치 요구 사항 섹션에 나열된 작업을 수행합니다.
- 각 Object Gateway 노드에 대해 Red Hat Ceph Storage 설치 가이드의 Ceph Object Gateway 설치 섹션에서 1단계 6단계를 수행합니다.
5.7.2. 하나의 영역을 사용하여 다중 사이트 Ceph Object Gateway 구성
Ceph-ansible은 여러 Ceph Object Gateway 인스턴스가 있는 여러 스토리지 클러스터에서 한 영역의 데이터를 미러링하도록 Ceph 오브젝트 게이트웨이를 구성합니다.
Ceph-ansible은 단일 사이트 구성에서 이미 사용된 후 다중 사이트 설정으로 게이트웨이를 재구성할 수 없습니다. 이 구성을 수동으로 배포할 수 있습니다. Red Hat 지원팀에 문의하십시오.
사전 요구 사항
- Red Hat Ceph Storage 클러스터가 실행 중인 2개입니다.
- Ceph Object Gateway 노드에서 Red Hat Ceph Storage 설치 가이드의 Red Hat Ceph Storage 설치 요구 사항 섹션에 나열된 작업을 수행합니다.
- 각 Object Gateway 노드에 대해 Red Hat Ceph Storage 설치 가이드의 Ceph Object Gateway 설치 섹션에서 1단계 6단계를 수행합니다.
절차
시스템 키를 생성하고
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
기본 스토리지 클러스터
Ceph-ansible 구성 디렉터리로 이동합니다.
[root@ansible ~]# cd /usr/share/ceph-ansible
group_vars/all.yml
파일을 열고 편집합니다.rgw_multisite
행의 주석을 제거하고true
로 설정합니다.rgw_multisite_proto
매개변수의 주석을 제거합니다.rgw_multisite: true rgw_multisite_proto: "http"
/usr/share/ceph-ansible
에host_vars
디렉토리를 만듭니다.[root@ansible ceph-ansible]# mkdir host_vars
기본 스토리지 클러스터의 각 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 노드가 있는 경우 각 노드에 대해 별도의 파일을 생성합니다.
파일을 편집하고 해당 Object Gateway 노드의 모든 인스턴스에 대한 구성 세부 정보를 추가합니다. ZONE_NAME,ZONE_GROUP_NAME,ZONE_USER_NAME,ZONE_DISPLAY_NAME 및 REALM_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
선택 사항: 여러 인스턴스를 생성하려면 파일을 편집하고 각 Object Gateway 노드의 모든 인스턴스에 구성 세부 정보를 추가합니다.
rgw_instances
에서 항목을 업데이트하는 것과 함께 다음 설정을 구성합니다. ACCESS_KEY_1 및 SECRET_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
보조 스토리지 클러스터
Ceph-ansible 구성 디렉터리로 이동합니다.
[root@ansible ~]# cd /usr/share/ceph-ansible
group_vars/all.yml
파일을 열고 편집합니다.rgw_multisite
행의 주석을 제거하고true
로 설정합니다.rgw_multisite_proto
매개변수의 주석을 제거합니다.rgw_multisite: true rgw_multisite_proto: "http"
/usr/share/ceph-ansible
에host_vars
디렉토리를 만듭니다.[root@ansible ceph-ansible]# mkdir host_vars
보조 스토리지 클러스터의 각 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 노드가 있는 경우 각 노드에 대해 파일을 생성합니다.
다음 설정을 구성합니다. 첫 번째 클러스터에서 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
선택 사항: 여러 인스턴스를 생성하려면 파일을 편집하고 각 Object Gateway 노드의 모든 인스턴스에 구성 세부 정보를 추가합니다.
rgw_instances
에서 항목을 업데이트하는 것과 함께 다음 설정을 구성합니다. ACCESS_KEY_1 및 SECRET_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
두 사이트 모두에서 다음 단계를 실행합니다.
기본 스토리지 클러스터에서 Ansible 플레이북을 실행합니다.
베어 메탈 배포:
[user@ansible ceph-ansible]$ ansible-playbook site.yml -i hosts
컨테이너 배포:
[user@ansible ceph-ansible]$ ansible-playbook site-container.yml -i hosts
보조 스토리지 클러스터가 기본 스토리지 클러스터의 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 플레이북을 실행합니다.보조 스토리지 클러스터에서 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 상태로 실행됩니다.
두 사이트에서 다중 사이트 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 지원팀에 문의하십시오.
사전 요구 사항
- Red Hat Ceph Storage 클러스터가 실행 중인 2개입니다.
- 각 스토리지 클러스터에서는 두 개 이상의 Object Gateway 노드가 있습니다.
- Ceph Object Gateway 노드에서 Red Hat Ceph Storage 설치 가이드의 Red Hat Ceph Storage 설치 요구 사항 섹션에 나열된 작업을 수행합니다.
- 각 Object Gateway 노드에 대해 Red Hat Ceph Storage 설치 가이드의 Ceph Object Gateway 설치 섹션에서 1단계 6단계를 수행합니다.
절차
임의의 노드에서 영역 1과 2의 시스템 액세스 키와 시크릿 키를 생성하고
multi-site-keys-realm-1.txt
및multi-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 스토리지 클러스터
Ansible 구성 디렉터리로 이동합니다.
[root@ansible ~]# cd /usr/share/ceph-ansible
group_vars/all.yml
파일을 열고 편집합니다.rgw_multisite
행의 주석을 제거하고true
로 설정합니다.rgw_multisite_proto
매개변수의 주석을 제거합니다.rgw_multisite: true rgw_multisite_proto: "http"
/usr/share/ceph-ansible
에host_vars
디렉토리를 만듭니다.[root@ansible ceph-ansible]# mkdir host_vars
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 노드가 있는 경우 각 노드에 대해 별도의 파일을 생성합니다.
첫 번째 영역에 여러 인스턴스를 생성하려면 파일을 편집하고 각 Object Gateway 노드의 모든 인스턴스에 구성 세부 정보를 추가합니다. 첫 번째 영역에 대한
rgw_instances
아래의 항목을 업데이트하고 함께 다음 설정을 구성합니다. ACCESS_KEY_1 및 SECRET_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 플레이북을 실행합니다.
다른 영역에 대한 여러 인스턴스의 경우
rgw_instances
의 항목을 업데이트하는 것과 함께 다음 설정을 구성합니다. ACCESS_KEY_2 및 SECRET_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
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 스토리지 클러스터
Ceph-ansible 구성 디렉터리로 이동합니다.
[root@ansible ~]# cd /usr/share/ceph-ansible
group_vars/all.yml
파일을 열고 편집합니다.rgw_multisite
행의 주석을 제거하고true
로 설정합니다.rgw_multisite_proto
매개변수의 주석을 제거합니다.rgw_multisite: true rgw_multisite_proto: "http"
/usr/share/ceph-ansible
에host_vars
디렉토리를 만듭니다.[root@ansible ceph-ansible]# mkdir host_vars
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 노드가 있는 경우 각 노드에 대해 파일을 생성합니다.
첫 번째 영역에 여러 인스턴스를 생성하려면 파일을 편집하고 각 Object Gateway 노드의 모든 인스턴스에 구성 세부 정보를 추가합니다. 첫 번째 영역에 대한
rgw_instances
아래의 항목을 업데이트하고 함께 다음 설정을 구성합니다. ACCESS_KEY_1 및 SECRET_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
다른 영역에 대한 여러 인스턴스의 경우
rgw_instances
의 항목을 업데이트하는 것과 함께 다음 설정을 구성합니다. ACCESS_KEY_2 및 SECRET_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
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-A 및 site-B 스토리지 클러스터에서 Ansible 플레이북을 실행하면 Ceph Object Gateway가 active-active 상태로 실행됩니다.
검증
다중 사이트 Ceph Object Gateway 구성을 확인합니다.
-
각 사이트의 Ceph Monitor 및 Object Gateway 노드에서 site-A 및 site-B를 사용하여
curl
또는 다른 HTTP 클라이언트를 사용하여 API에 다른 사이트에서 액세스할 수 있는지 확인합니다. 두 사이트 모두에서
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
-
각 사이트의 Ceph Monitor 및 Object Gateway 노드에서 site-A 및 site-B를 사용하여