Menu Close

5.7.3. 複数のレルムのあるマルチサイト Ceph Object Gateway の設定

Ceph-Ansible は、複数の RGW インスタンスが含まれる、複数のストレージクラスター全体で複数のレルムのデータをミラーリングするように Ceph Object Gateway を設定します。

警告

Ceph-Ansible は、ゲートウェイがシングルサイト構成で開始した後に、マルチサイトセットアップにゲートウェイを再構成することはできません。この設定は手動でデプロイできます。レッドハットサポート にお問い合わせください。

前提条件

  • Red Hat Ceph Storage クラスターを実行する 2 つ。
  • 各ストレージクラスター内に少なくとも 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. いずれのノードでも、レルム 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
  2. プライマリーストレージクラスターの Ansible ノードで以下の手順を実行します。

    1. Ceph-Ansible 設定ディレクトリー /usr/share/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 にある全インスタンスに対して設定詳細を追加します。最初のレルムに対して、instance_name で以下の設定を行います。ACCESS_KEY_1 および SECRET_KEY_1multi-site-keys-realm-1.txt ファイルに保存されるランダムな文字列を使用します。

      構文

      rgw_instances:
        - instance_name: 'INSTANCE_NAME'
          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

      重要

      Ansible Playbook をエラーなく実行するためには、例のように各 -instance_namergw_instances: の下に並んでいることを確認する必要があります。

      rgw_instances:
        - instance_name: 'rgw0'

      rgw_instances:
        - instance_name: 'rgw0'
          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

      注記

      クラスター内に既存のレルムとCeph Object Gatewaysが手動で設定されている場合は、インスタンスと各インスタンスの設定をそれぞれのオブジェクトノードファイルに追加する必要があります。Ceph-ansibleは、Playbook の実行時にすべてのノードの ceph.conf を上書きします。既存のレルムにある既存の Ceph Object Gateways をrgw_instances に追加すると、各ノードの新しい ceph.conf ファイルに新旧の Ceph Object Gateways が必ず存在するようになります。

      rgw_instances:
        - instance_name: 'rgw0'
          rgw_zonemaster: true
          rgw_zonesecondary: false
          rgw_zonegroupmaster: true
          rgw_realm: local-realm-1
          rgw_zonegroup: local-zone-group-1
          rgw_zone: local-zone-1
          rgw_zone_user: local-user-1
          rgw_zone_user_display_name: "local-user-1"
          system_access_key: P9Eb6S8XNyo4dtZZUUMx
          system_secret_key: qqHCUtfdNnpHq3PZRHW5un9l0bEBM812Uhow0XfA
          radosgw_address: "{{ _radosgw_address }}"
          radosgw_frontend_port: 8080
        - instance_name: 'rgw1'
          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

    6. オプション: 同一の Object Gateway ノード上に複数のインスタンスがある場合には、他のレルムの instance_name に以下の設定を行います。ACCESS_KEY_2 および SECRET_KEY_2multi-site-keys-realm-2.txt ファイルに保存されるランダムな文字列を使用します。

      構文

        - instance_name: 'INSTANCE_NAME'
          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_2

        - instance_name: 'rgw1'
          rgw_zonemaster: true
          rgw_zonesecondary: false
          rgw_zonegroupmaster: true
          rgw_zone: juneau
          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. プライマリーゲートウェイの host_vars ファイルが以下の例のようになっていることを確認します。

      rgw_instances:
        - instance_name: 'rgw0'
          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

    8. オプション: 複数のインスタンスの場合には、プライマリーゲートウェイの host_vars ファイルが以下の例のようになっていることを確認します。

      rgw_instances:
        - instance_name: 'rgw0'
          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_zonemaster: true
          rgw_zonesecondary: false
          rgw_zonegroupmaster: true
          rgw_zone: juneau
          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

  3. プライマリーストレージクラスターで Ansible Playbook を実行します。

    注記

    クラスターがデプロイされていて、Ceph Object Gateway のみに変更を加える場合は、--limit rgws オプションを使用します。

    1. ベアメタル デプロイメント:

      [user@ansible ceph-ansible]$ ansible-playbook site.yml -i hosts
    2. コンテナー デプロイメント:

      [user@ansible ceph-ansible]$ ansible-playbook site-container.yml -i hosts
  4. セカンダリーストレージクラスターの Ansible ノードで以下の手順を実行します。

    1. Ceph-Ansible 設定ディレクトリー /usr/share/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. ファイルを編集して、セカンダリーストレージクラスタ内の各 Object Gateway にある全インスタンスに対して設定詳細を追加します。最初のレルムに対して、instance_name で以下の設定を行います。ACCESS_KEY_1 および SECRET_KEY_1multi-site-keys-realm-1.txt ファイルに保存されるランダムな文字列を使用します。

      構文

      rgw_instances:
        - instance_name: 'INSTANCE_NAME'
          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: http://RGW_PRIMARY_HOSTNAME:_RGW_PRIMARY_PORT_NUMBER_1_

      rgw_instances:
        - instance_name: 'rgw0'
          rgw_zonemaster: false
          rgw_zonesecondary: true
          rgw_zonegroupmaster: false
          rgw_zone: versailles
          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

      注記

      クラスター内に既存のレルムと Ceph Object Gateways を手動で設定している場合は、関連するオブジェクトノードファイルに instance_name と各インスタンスの設定を追加する必要があります。Ceph-ansibleは、Playbook の実行時にすべてのノードの ceph.conf を上書きします。既存のレルムにある既存の Ceph Object Gateways をrgw_instances に追加すると、各ノードの新しい ceph.conf ファイルに新旧の Ceph Object Gateways が必ず存在するようになります。

      rgw_instances:
        - instance_name: 'rgw0'
          rgw_zonemaster: true
          rgw_zonesecondary: false
          rgw_zonegroupmaster: true
          rgw_realm: local-realm-2
          rgw_zonegroup: local-zone-group-2
          rgw_zone: local-zone-2
          rgw_zone_user: local-user-2
          rgw_zone_user_display_name: "local-user-2"
          system_access_key: P9Eb6S8XNyo4dtZZUUMx
          system_secret_key: qqHCUtfdNnpHq3PZRHW5un9l0bEBM812Uhow0XfA
          radosgw_address: "{{ _radosgw_address }}"
          radosgw_frontend_port: 8080
        - instance_name: 'rgw1'
          rgw_zonemaster: false
          rgw_zonesecondary: true
          rgw_zonegroupmaster: false
          rgw_zone: versailles
          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

    6. オプション: 同一の Object Gateway ノード上に複数のインスタンスがある場合には、他のレルムの instance_name に以下の設定を行います。ACCESS_KEY_2 および SECRET_KEY_2multi-site-keys-realm-2.txt ファイルに保存されるランダムな文字列を使用します。RGW_PRIMARY_HOSTNAME をプライマリーストレージクラスターの Object Gateway ノードに設定します。

      構文

        - instance_name: 'INSTANCE_NAME'
          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_2
          endpoint: http://RGW_PRIMARY_HOSTNAME:_RGW_PRIMARY_PORT_NUMBER_2_

        - instance_name: 'rgw1'
          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-primary:8081

    7. セカンダリーゲートウェイの host_vars ファイルが以下の例のようになっていることを確認します。

      rgw_instances:
        - instance_name: 'rgw0'
          rgw_zonemaster: false
          rgw_zonesecondary: true
          rgw_zonegroupmaster: false
          rgw_zone: versailles
          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

    8. オプション: 複数のインスタンスの場合には、セカンダリーゲートウェイの host_vars ファイルが以下の例のようになっていることを確認します。

      rgw_instances:
        - instance_name: 'rgw0'
          rgw_zonemaster: false
          rgw_zonesecondary: true
          rgw_zonegroupmaster: false
          rgw_zone: versailles
          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_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-primary:8081

  5. 各サイト (プライマリーおよびセカンダリー) の Ceph Monitor ノードおよび Object Gateway ノードから、curl または別の HTTP クライアントを使用して、プリマリーサイトへのエンドポイントがセカンダリーサイトからアクセスできることを確認します。rgw_instances の設定にある任意の エンドポイント をチェックする必要があります。
  6. セカンダリーのストレージクラスターで Ansible Playbook を実行します。

    注記

    クラスターがデプロイされていて、Ceph Object Gateway のみに変更を加える場合は、--limit rgws オプションを使用します。

    1. ベアメタル デプロイメント:

      [user@ansible ceph-ansible]$ ansible-playbook site.yml -i hosts
    2. コンテナー デプロイメント:

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

    プライマリーストレージクラスターおよびセカンダリーストレージクラスターで Ansible Playbook を実行した後に、Ceph Object Gateway はアクティブ/アクティブ状態で実行されます。

  7. 両方のサイトでマルチサイト Ceph Object Gateway の設定を確認します。

    構文

    radosgw-admin sync status