Red Hat Training

A Red Hat training course is available for Red Hat Ceph Storage

3.6. Ceph Object Gateway のインストール

Ceph Object Gateway は、RADOS ゲートウェイとも呼ばれ、librados API 上に構築されたオブジェクトストレージインターフェイスであり、アプリケーションに Ceph ストレージクラスターへの RESTful ゲートウェイを提供します。

前提条件

手順

Ansible 管理ノードで以下のタスクを実行します。

  1. [rgws] セクションの下の /etc/ansible/hosts ファイルにゲートウェイホストを追加して、それらのロールを Ansible に識別します。ホストに連続する命名がある場合は、以下のように範囲を使用します。

    [rgws]
    <rgw_host_name_1>
    <rgw_host_name_2>
    <rgw_host_name[3..10]>
  2. Ansible 設定ディレクトリーに移動します。

    [root@ansible ~]# cd /usr/share/ceph-ansible
  3. サンプルファイルから rgws.yml ファイルを作成します。

    [root@ansible ~]# cp group_vars/rgws.yml.sample group_vars/rgws.yml
  4. group_vars/rgws.yml ファイルを開いて編集します。管理者キーを Ceph Object Gateway ノードにコピーするには、copy_admin_key オプションのコメントを解除します。

    copy_admin_key: true
  5. rgws.yml ファイルでは、デフォルトの 7480 ポートとは異なるデフォルトポートを指定することができます。以下に例を示します。

    ceph_rgw_civetweb_port: 80
  6. all.yml ファイルは radosgw_interface を指定する必要があります。以下に例を示します。

    radosgw_interface: eth0

    インターフェイスを指定すると、同じホストで複数のインスタンスを実行している場合に、Civetweb が別の Civetweb インスタンスと同じ IP アドレスにバインドされないようにします。

  7. 通常、デフォルトの設定を変更するには、rgw.yml ファイル内の設定をアンコメントし、それに応じて変更します。rgw.yml ファイルにない設定に追加の変更を加えるには、all.yml ファイルで ceph_conf_overrides: を使用します。例えば、rgw_dns_name: に DNS サーバーのホストを設定し、クラスターの DNS サーバーをワイルドカード用に設定して S3 サブドメインを有効にします。

    ceph_conf_overrides:
       client.rgw.rgw1:
          rgw_dns_name: <host_name>
          rgw_override_bucket_index_max_shards: 16
          rgw_bucket_default_quota_max_objects: 1638400

    詳細な設定の詳細は、Red Hat Ceph Storage 3 の 実稼働環境への Ceph Object Gateway ガイド を参照してください。高度なトピックには以下が含まれます。

  8. group_vars/all.yml ファイルの radosgw_interface パラメーターのコメントを外します。

    radosgw_interface: <interface>

    以下を置き換えます。

    • Ceph Object Gateway がリッスンするインターフェイスを使用する <interface>

    詳細は、all.yml ファイルを参照してください。

  9. Ansible Playbook の実行:

    [user@admin ceph-ansible]$ ansible-playbook site.yml --limit rgws
注記

Ansible は、各 Ceph Object Gateway が確実に実行されていることを確認します。

単一サイトの設定の場合は、Ceph ObjectGateway を Ansible 設定に追加します。

マルチサイトデプロイメントでは、各ゾーンの Ansible 設定を行う必要があります。つまり、Ansible によって、そのゾーン用に Ceph Storage クラスターおよびゲートウェイインスタンスが作成されます。

マルチサイトクラスターのインストールが完了したら、マルチサイト用のクラスターの設定方法は、Red Hat Ceph Storage 4 のObject Gateway Guide for Red Hat Enterprise Linuxマルチサイト の章に進んでください。

関連情報

3.6.1. マルチサイト Ceph Object Gateway の設定

Ansible は、マルチサイト環境の Ceph Object Gateway のレルム、ゾーングループ、マスターゾーン、セカンダリーゾーンを設定します。

前提条件

  • Red Hat Ceph Storage クラスターを実行する 2 つ。
  • Ceph Object Gateway ノード上で、Red Hat Ceph Storage インストールガイドRed Hat Ceph Storage のインストール要件 に記載のタスクを実行します。
  • ストレージクラスターごとに 1 つの Ceph Object Gateway をインストールして設定します。

手順

  1. プライマリーストレージクラスターの Ansible ノードで以下の手順を実行します。

    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
    2. Ansible 設定ディレクトリー /usr/share/ceph-ansible に移動します。

      [root@ansible ~]# cd /usr/share/ceph-ansible
    3. group_vars/all.yml ファイルを開いて編集します。以下のオプションを追加し、$ZONE_NAME$ZONE_GROUP_NAME$REALM_NAME$ACCESS_KEY$SECRET_KEY の値を適宜更新することで、マルチサイトのサポートを有効にします。

      複数の Ceph Object Gateway がマスターゾーンにある場合は、rgw_multisite_endpoints オプションを設定する必要があります。rgw_multisite_endpoints オプションの値は、コンマで区切られたリストで、スペースは含みません。

      rgw_multisite: true
      rgw_zone: $ZONE_NAME
      rgw_zonemaster: true
      rgw_zonesecondary: false
      rgw_multisite_endpoint_addr: "{{ ansible_fqdn }}"
      rgw_multisite_endpoints: http://foo.example.com:8080,http://bar.example.com:8080,http://baz.example.com:8080
      rgw_zonegroup: $ZONE_GROUP_NAME
      rgw_zone_user: zone.user
      rgw_realm: $REALM_NAME
      system_access_key: $ACCESS_KEY
      system_secret_key: $SECRET_KEY

      注記

      ansible_fqdn ドメイン名は、セカンダリーストレージクラスターから解決可能である必要があります。

      注記

      新しい Object Gateway を追加するときは、Ansible Playbook を実行する前に、新しい Object Gateway のエンドポイント URL を使用して rgw_multisite_endpoints リストの最後に追加してください。

    4. Ansible Playbook の実行:

      [user@ansible ceph-ansible]$ ansible-playbook site.yml --limit rgws
    5. Ceph Object Gateway デーモンを再起動します。

      [root@rgw ~]# systemctl restart ceph-radosgw@rgw.`hostname -s`
  2. セカンダリーストレージクラスターの Ansible ノードで以下の手順を行います。

    1. Ansible 設定ディレクトリー /usr/share/ceph-ansible に移動します。

      [root@ansible ~]# cd /usr/share/ceph-ansible
    2. group_vars/all.yml ファイルを開いて編集します。以下のオプションを追加し、$ZONE_NAME$ZONE_GROUP_NAME$REALM_NAME$ACCESS_KEY$SECRET_KEY の値を更新することで、マルチサイトのサポートを有効にします。rgw_zone_usersystem_access_keysystem_secret_key は、マスターゾーンの設定で使用したものと同じ値でなければなりません。rgw_pullhost オプションには、マスターゾーンの Ceph Object Gateway を指定する必要があります。

      複数の Ceph Object Gateway がセカンダリーゾーンにある場合は、rgw_multisite_endpoints オプションを設定する必要があります。rgw_multisite_endpoints オプションの値は、コンマで区切られたリストで、スペースは含みません。

      rgw_multisite: true
      rgw_zone: $ZONE_NAME
      rgw_zonemaster: false
      rgw_zonesecondary: true
      rgw_multisite_endpoint_addr: "{{ ansible_fqdn }}"
      rgw_multisite_endpoints: http://foo.example.com:8080,http://bar.example.com:8080,http://baz.example.com:8080
      rgw_zonegroup: $ZONE_GROUP_NAME
      rgw_zone_user: zone.user
      rgw_realm: $REALM_NAME
      system_access_key: $ACCESS_KEY
      system_secret_key: $SECRET_KEY
      rgw_pull_proto: http
      rgw_pull_port: 8080
      rgw_pullhost: $MASTER_RGW_NODE_NAME

      注記

      ansible_fqdn ドメイン名は、プライマリーストレージクラスターから解決可能である必要があります。

      注記

      新しい Object Gateway を追加するときは、Ansible Playbook を実行する前に、新しい Object Gateway のエンドポイント URL を使用して rgw_multisite_endpoints リストの最後に追加してください。

    3. Ansible Playbook の実行:

      [user@ansible ceph-ansible]$ ansible-playbook site.yml --limit rgws
    4. Ceph Object Gateway デーモンを再起動します。

      [root@rgw ~]# systemctl restart ceph-radosgw@rgw.`hostname -s`
  3. マスターおよびセカンダリーストレージクラスターで Ansible Playbookを実行すると、アクティブ-アクティブ Ceph Object Gateway 設定が実行されます。
  4. マルチサイト Ceph Object Gateway の設定を確認します。

    1. 各サイトの Ceph Monitor ノードと Object Gateway ノードから、プライマリーとセカンダリーが他のサイトを curl できる必要があります。
    2. 両方のサイトで radosgw-admin sync status コマンドを実行します。