このドキュメントで説明されているソフトウェアはサポートされていないか、拡張サポートが提供されています。
現在サポートされているリリースにアップグレードすることをお薦めします。

1.6 Ceph Object Gateway

Ceph Object GatewayはCeph Storage ClusterにRESTインタフェースを提供し、Amazon S3およびOpenStack Swiftのクライアント・アクセスを可能にします。 Ceph Object Gatewayの詳細は、アップストリームのドキュメントを参照してください。

Ceph Object Gatewayには、要件に応じて3つの異なるデプロイメント構成があります。

  • 単純なCeph Object Gateway

    単純なCeph Object Gateway構成は、Ceph Object Storageサービスを単一のデータ・センターで実行する場合に使用され、リージョンやゾーンを定義する必要はありません。

  • マルチサイトCeph Object Gateway構成は、Ceph Object Storageサービスがフェデレーテッド・アーキテクチャ内で地理的に分散されている場合に使用され、異なるリージョンに対応するストレージを構成して、さらにリージョンごとに個別のゾーンを識別する機能を提供します。 データ同期エージェントにより、サービスでは広範囲の分散環境全体でデータの複数のコピーを保持できるので、フェイルオーバー、バックアップおよび障害時リカバリで優れたデータ耐障害性を実現することができます。 この機能により、マスター以外のゾーンに書き込んだり、異なるゾーン間でデータ変更の同期を維持することができます。

注意

Ceph Storage for Oracle Linuxリリース1.0では、Ceph Object Gatewayで使用する外部WebサーバーとFastCGIモジュールを手動で構成する必要があります。 このリリースには、軽量のCivetweb Webサーバーの埋込みバージョンが含まれているため、Ceph Object Gatewayサービスのインストールおよび構成が簡素化されます。

1.6.1 単純なCeph Object Gateway

Ceph Object GatewayはCeph Storage Clusterのクライアントですが、必要に応じてクラスタ内のノード上でホストされる場合があります。 Ceph Object Gatewayには次の要件があります。

  • 稼働中のCeph Storage Cluster

  • HTTPまたはHTTPSリクエストの処理に使用するネットワーク・ポート(デフォルトは7480)上でトラフィックを許可する外部に面したネットワーク・インタフェース

  • Ceph Object Gatewayインスタンスの名前

  • キーリング内に適切な権限があるストレージ・クラスタ・ユーザー名

  • データを格納するためのプール

  • ゲートウェイ・インスタンス用のデータ・ディレクトリ

  • Ceph構成ファイル内のインスタンス・エントリ

次の項では、Ceph Object Gatewayの使用を開始するためのインストールおよびデプロイメントの手順について説明します。

デプロイメント

Ceph Object Gatewayソフトウェアをストレージ・クラスタ内のノードにインストールするには、環境内のデプロイメント・ノードから次のコマンドを実行します。

# ceph-deploy install --rgw ceph-node1

ceph-node1を、ソフトウェアをインストールするノードの解決可能なホスト名に置き換えます。 ターゲット・ノードには適切なYumチャネルが構成されている必要があります(1.2項 「Cephパッケージへのアクセスの有効化」を参照)。

Ceph構成内にCeph Object Gatewayを作成するには、次のコマンドを使用します。

# ceph-deploy --overwrite-conf rgw create ceph-node1

ファイアウォールの要件の更新

ファイアウォール・サービスが実行中の場合は、Ceph Object Gatewayを実行しているポートが開いていることを確認してください。 次に例を示します。

# firewall-cmd --zone=public --add-port 7480/tcp --permanent
# firewall-cmd --reload

Ceph Object Gatewayのデフォルト・ポートを後で変更する場合は、このファイアウォール・ルールを無効にして、新しいポート番号用の新しいルールの追加が必要になることがあります。

ユーザーおよび鍵の作成

Ceph Object Gatewayを使用するには、事前にユーザーを作成し、ゲートウェイによって公開されている様々なAPIへのアクセスを許可する必要があります。

S3アクセス用のユーザーを作成するには、ゲートウェイ・ホスト上で次のコマンドを実行します。

# radosgw-admin user create --uid="testuser" --display-name="First User"

このコマンドでは、新規作成されたユーザーを示すJSON形式の出力が戻されます。 この出力には、新規ユーザーの作成時に自動的に生成される鍵のリストが含まれています。 作成したユーザーのaccess_keyおよびsecret_keyをメモします。 これらは、S3クライアント・アプリケーションからゲートウェイに接続する際に必要です。

Swift APIへのアクセスを提供する場合は、元のユーザーに対してサブユーザーを作成できます。 Swiftアクセス用のユーザーを作成するには、ゲートウェイ・ホスト上で次のコマンドを実行します。

# radosgw-admin subuser create --uid=testuser --subuser=testuser:swift

出力には、更新されたユーザーと追加されたサブユーザーの詳細が表示されます。 Swiftでは独自の鍵が使用されるため、Swiftクライアントで鍵を使用するには、このサブユーザーに固有の鍵を事前に作成する必要があります。 これを行うには、次のコマンドを実行します。

# radosgw-admin key create --subuser=testuser:swift --key-type=swift --gen-secret

もう一度、更新されたユーザーの詳細が表示されます。 今回は、JSON出力のswift_keys鍵が更新され、Swiftのアクセス検証に使用可能なuserおよびsecret_keyが表示されます。

任意の時点で、このユーザー情報をもう一度表示して、鍵を取得したり、アクセス権などの情報を確認する必要が生じた場合は、radosgw-admin user infoコマンドを使用できます。

アクセスのテスト

S3アクセスをテストするにはpython-botoパッケージを必要とし、新しいバケットの作成に使用できる簡単なPythonスクリプトを作成する必要があります。

  1. python-botoパッケージがまだインストールされていない場合はインストールします。

    # yum install python-boto
  2. S3アクセスのテストに使用可能なPythonスクリプトを作成します。 テキスト・エディタを使用してs3test.pyという名前のファイルを作成し、次のコードを挿入します。

    #!/usr/bin/env python
    import boto
    import boto.s3.connection
    
    access_key = 'SZUP3NC5P7452N1HQT4B'
    secret_key = 'v0Ok4YK0MtcSZURk6vwCwRtQnB3vAW2G8TjrAlIj'
    conn = boto.connect_s3(
            aws_access_key_id = access_key,
            aws_secret_access_key = secret_key,
            host = 'ceph-node1.example.com', port = 7480,
            is_secure=False, calling_format = boto.s3.connection.OrdinaryCallingFormat(),
            )
    
    bucket = conn.create_bucket('my-new-bucket')
    for bucket in conn.get_all_buckets():
                print "{name} {created}".format(
                        name = bucket.name,
                        created = bucket.creation_date,
                )

    access_keySZUP3NC5P7452N1HQT4Bを、S3アクセス用に作成したtestuserユーザーのアクセス鍵に置き換えます。 secret_keyv0Ok4YK0MtcSZURk6vwCwRtQnB3vAW2G8TjrAlIjを、S3アクセス用に作成したtestuserユーザーに対して生成された秘密鍵に置き換えます。 ceph-node1.example.comを、ゲートウェイ・ホストが配置されているホスト名または完全修飾ドメイン名に置き換えます。 デフォルトとは別のポートを構成している場合は、ポート番号7480を置き換えます。

  3. スクリプトを実行できるようにスクリプトの権限を変更します。

    # chmod 776 ./s3test.py
  4. 次のスクリプトを実行します。

    # ./s3test.py
    my-new-bucket 2016-09-19T09:25:17.056Z

    このスクリプトは、新しいバケットの名前と、その作成日およびタイムスタンプを戻します。

Swiftアクセスをテストする必要がある場合は、Swiftコマンドライン・クライアントをインストールして、このために作成したサブユーザー用に生成された秘密鍵を使用します。

  1. python-swiftclientパッケージとそれに依存するファイルをインストールします。

    # yum install python-swiftclient
  2. コマンドラインで、適切な資格証明と接続情報を指定してクライアントを実行します。

    # swift -A http://ceph-node1.example.com:7480/auth/1.0 -U testuser:swift \
       -K '2DHaQknPsc5XsYEmHQ0mWCGLnoGnaCr4VUd62czm' list
    my-new-bucket

ceph-node1.example.comを、ゲートウェイ・ホストが配置されているホスト名または完全修飾ドメイン名に置き換えます。 デフォルトとは別のポートを構成している場合は、ポート番号7480を置き換えます。 testuser:swiftを、testuserユーザーのSwiftアクセス用に作成したサブユーザーに置き換えます。 2DHaQknPsc5XsYEmHQ0mWCGLnoGnaCr4VUd62czmを、Swiftサブユーザー用に生成されたSwiftの秘密鍵に置き換えます。 このコマンドと使用可能なオプションの詳細は、man swiftを実行してください。

このコマンドでは、S3アクセスのテスト時に作成されたバケットを含む、Ceph内の既存のバケットがすべてリストされます。

ポート番号の変更

Ceph Object GatewayのHTTPインタフェース用に使用されるポート番号は、ストレージ・クラスタ内の管理ノードの構成ファイルで更新または変更できます。 Ceph Object Gatewayで使用するポート番号を変更するには、クラスタのデプロイメント・ノードで作業ディレクトリのceph.confファイルを編集します。 構成ファイルの最後に次の行を追加します。

[client.rgw.ceph-node1]
rgw_frontends = "civetweb port=80"

ceph-node1を、ゲートウェイのデプロイ時に使用した解決可能なホスト名に置き換えます。 80を、HTTPポート用に使用するポート番号に置き換えます。

構成変更をゲートウェイ・ノードとクラスタ内の他のノードにプッシュするには、次のコマンドを実行します。

# ceph-deploy --overwrite-conf config push ceph-node{1..4}.example.com

前述のコマンドで、ceph-node{1..4}.example.comは、ストレージ・クラスタ内のすべてのノード、具体的にはゲートウェイ・ノードが含まれる空白区切りリストと同等です。

ゲートウェイ・ノードでCeph Object Gatewayを再起動して、設定を有効にする必要があります。

# systemctl restart ceph-radosgw@*

SSLの有効化

Ceph Object GatewayサービスでSSLを有効にするには、ゲートウェイ・ホストにOpenSSLパッケージをインストールする必要があります(まだインストールされていない場合)。

# yum install -y openssl mod_ssl

Ceph Object Gatewayサービスで使用可能なSSL証明書と鍵を作成します。 手順は、1.8.5項 「SSLセキュリティ警告: SSL SecurityWarning: Certificate has no subjectAltName (証明書にsubjectAltNameがありません)」で説明されている回避策を参照してください。 原則として、証明書は信頼できる認証局(CA)によって署名されている必要があります。

重要

Ceph Object Gatewayで自己署名証明書を使用する構成にする場合、SSLモードでサービスにアクセスしようとすると(特にこのドキュメントのサンプルPythonスクリプトを使用すると)、SSL証明書の検証エラーが発生する可能性があります。

自己署名証明書を使用する場合は、CA証明書をクライアント・システムの証明書バンドルにコピーすることで、エラーを回避できます。 次に例を示します。

# cat custom.crt >> /etc/pki/tls/certs/ca-bundle.crt

あるいは、クライアント・プログラムまたはスクリプトの環境を使用して、その他の信頼できるCA証明書(PEM形式)へのパスを指定します。 その他の信頼できるCA証明書を指定するには、環境変数SSL_CERT_FILEおよびSSL_CERT_DIRを使用できます。 次に例を示します。

# SSL_CERT_FILE=/root/ceph/custom.pem python script.py

本番環境で自己署名証明書を使用することはお薦めしません。

クラスタのデプロイメント・ノードで作業ディレクトリのceph.confファイルを更新します。 [client.rgw.gateway]に既存のエントリがある場合は、次の例のような変更が必要になることがあります。 または、次のようなエントリを追加します。

[client.rgw.ceph-node1]
rgw_frontends = "civetweb port=443s ssl_certificate=/etc/pki/tls/ceph-node1.example.com.pem

ceph-node1を、ゲートウェイのデプロイ時に使用した解決可能なホスト名に置き換えます。 443を、HTTPSポート用に使用するポート番号に置き換えます。 ポート番号に文字sを添付して、このポートではHTTPSを使用する必要があることを埋込みCivetweb Webサーバーに指示します。 /etc/pki/tls/ceph-node1.example.com.pemを、証明書と鍵ファイルの両方が格納されているPEM形式ファイルのパスで置き換えます。

構成変更をゲートウェイ・ノードとクラスタ内の他のノードにプッシュするには、次のコマンドを実行します。

# ceph-deploy --overwrite-conf config push ceph-node{1..4}.example.com

前述のコマンドで、ceph-node{1..4}.example.comは、ストレージ・クラスタ内のすべてのノード、具体的にはゲートウェイ・ノードが含まれる空白区切りリストと同等です。

ゲートウェイ・ノードでCeph Object Gatewayを再起動して、設定を有効にする必要があります。

# systemctl restart ceph-radosgw@*

ゲートウェイ・ノード上でファイアウォール・ソフトウェアが動作している場合は、構成ファイルに定義されているポート上でトラフィックを許可するルールが存在することを確認してください。 次に例を示します。

 # firewall-cmd --zone=public --add-port=443/tcp --permanent