今日のS3はおそらく誰も驚かないでしょう。 Webサービスのバックエンドリポジトリとして、メディア業界のファイルリポジトリとして、およびバックアップのアーカイブとして使用されます。

Cephオブジェクトストレージに基づくS3互換ストレージの小規模な展開例を検討してください
クイックリファレンス
Cephは、柔軟でスケーラブルなペタバイトストレージのオープンソース開発です。 基礎は、オブジェクトストレージ内の数十個のサーバーのディスクスペースを結合することです。これにより、柔軟な複数の擬似ランダムデータの冗長性が実現します。 Ceph開発者は、このオブジェクトストアをさらに3つのプロジェクトで補完します。
- RADOSゲートウェイ-S3およびSwift互換のRESTfulインターフェイス
- RBD-シン成長とスナップショットをサポートするブロックデバイス
- Ceph FS-分散POSIX準拠のファイルシステム
例の説明
私の例では、システムに
/dev/sda
、オブジェクトストレージデータに
/dev/sdb
および
/dev/sdc
3つのSATAディスク
を使用した3つのサーバーを
引き続き使用します。 S3互換ストレージを操作するためのさまざまなプログラム、モジュール、およびフレームワークは、クライアントとして機能できます。
DragonDisk 、
CrossFTP 、
S3Browserのテストに成功しました。
また、この例では、node01ノードで1つのRADOSゲートウェイのみを使用しています。 S3インターフェースは、
s3.ceph.labspace.studiogrizzly.com
s3.ceph.labspace.studiogrizzly.com
現時点で、CephがそのようなS3操作
http://ceph.com/docs/master/radosgw/s3/をサポートしていることは注目に値し
ます 。
さあ始めましょう
ステップ0. Cephの準備
既に
デプロイされたCephクラスターを引き続き使用するため、
/etc/ceph/ceph.conf
構成をわずかに調整するだけで
/etc/ceph/ceph.conf
ます-RADOSゲートウェイの定義を追加します
[client.radosgw.gateway] host = node01 keyring = /etc/ceph/keyring.radosgw.gateway rgw socket path = /tmp/radosgw.sock log file = /var/log/ceph/radosgw.log rgw dns name = s3.ceph.labspace.studiogrizzly.com rgw print continue = false
他のノードで更新します
scp /etc/ceph/ceph.conf node02:/etc/ceph/ceph.conf scp /etc/ceph/ceph.conf node03:/etc/ceph/ceph.conf
手順1. Apache2、FastCGI、RADOSゲートウェイをインストールする
aptitude install apache2 libapache2-mod-fastcgi radosgw
ステップ2. Apacheの構成
必要なモジュールが含まれています
a2enmod rewrite a2enmod fastcgi
RADOSゲートウェイ
/etc/apache2/sites-available/rgw.conf
VirtualHostを作成します
FastCgiExternalServer /var/www/s3gw.fcgi -socket /tmp/radosgw.sock <VirtualHost *:80> ServerName s3.ceph.labspace.studiogrizzly.com ServerAdmin tweet@studiogrizzly.com DocumentRoot /var/www RewriteEngine On RewriteRule ^/([a-zA-Z0-9-_.]*)([/]?.*) /s3gw.fcgi?page=$1¶ms=$2&%{QUERY_STRING} [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L] <IfModule mod_fastcgi.c> <Directory /var/www> Options +ExecCGI AllowOverride All SetHandler fastcgi-script Order allow,deny Allow from all AuthBasicAuthoritative Off </Directory> </IfModule> AllowEncodedSlashes On ErrorLog /var/log/apache2/error.log CustomLog /var/log/apache2/access.log combined ServerSignature Off </VirtualHost>
作成されたVirtualHostをオンにし、デフォルトをオフにします
a2ensite rgw.conf a2dissite default
FastCGIスクリプト
/var/www/s3gw.fcgi
を作成します。
実行可能にする
chmod +x /var/www/s3gw.fcgi
ステップ3. RADOSゲートウェイの準備
必要なディレクトリを作成します
mkdir -p /var/lib/ceph/radosgw/ceph-radosgw.gateway
新しいRADOS Gatewayサービスのキーを生成します
ceph-authtool --create-keyring /etc/ceph/keyring.radosgw.gateway chmod +r /etc/ceph/keyring.radosgw.gateway ceph-authtool /etc/ceph/keyring.radosgw.gateway -n client.radosgw.gateway --gen-key ceph-authtool -n client.radosgw.gateway --cap osd 'allow rwx' --cap mon 'allow r' /etc/ceph/keyring.radosgw.gateway
クラスターに追加します
ceph -k /etc/ceph/ceph.keyring auth add client.radosgw.gateway -i /etc/ceph/keyring.radosgw.gateway
ステップ4.起動
Apache2とRADOSゲートウェイを再起動します
service apache2 restart /etc/init.d/radosgw restart
ステップ5.最初のユーザーを作成する
S3クライアントを使用するには、新しいユーザーの
access_key
および
secret_key
を取得する必要があります
radosgw-admin user create --uid=i --display-name="Igor" --email=tweet@studiogrizzly.com
コマンドの出力を確認し、キーをクライアントにコピーします
ステップ6. DNS
バケットが機能するためには、
s3.ceph.labspace.studiogrizzly.com
サブドメインがRADOSゲートウェイが実行されているホストのIPアドレス
s3.ceph.labspace.studiogrizzly.com
指すように要求するときにDNSサーバーが必要です。
たとえば、
mybackups
というバケットを作成する場合、ドメインは
mybackups.s3.ceph.labspace.studiogrizzly.com.
node01のIPアドレス(192.168.2.31)を指す必要があります。
私の場合、CNAMEレコードを追加するだけです
* IN CNAME node01.ceph.labspace.studiogrizzly.com.
あとがき
15分でS3互換ストレージを展開できました。 次に、お気に入りのS3クライアントを接続してみます。
ボーナスパート
snGISに 、2GISの実稼働環境でRADOSゲートウェイを使用した経験について尋ね
ました 。 以下は彼のレビューです。
概要
ワニスがあり、ラジオゲートの4つのアパッチがバックエンドによってピックアップされます。 アプリケーションは最初にワニスに登りますが、もし問題があれば、ラウンドロビンは直接Apacheに侵入します。 これにより、1か月間のアクセスログを含む合成テストjmeterで問題なく20,000 rpsが押されます。 50万枚の写真の中では、フロントエンドの作業負荷は約300 rpsです。

これまでのところ、Cephは5台のマシン上で、osd用に別のディスクがあり、マガジン用に別のssdがあります。 デフォルトのレプリケーション、^ 2。 システムは、2つのノードの落下と同時に、その後も変化します。 6か月間、クライアントにはまだ1つのエラーも表示されていません。
ストレージ、iノード、カタログごとのレイアウトのサイズなど、柔軟性に問題はありません。これらはすべて過去のものです。
ソリューションの特徴
- 5台のHP Proliant Gen8 DL360eサーバー。 各サーバーのCephタスクには、1つの300 GB SAS 15krpmが割り当てられます。 パフォーマンスを大幅に改善するために、osdデーモンログはHitachi Ultrastar 400M ssdドライブにレンダリングされます。
- apache2とradosgwが内部にある2つのkvm仮想マシン。 nginxがFastCGIでどのように機能するかは個人的には好きではありません。 Nginxは、アップロード中にコンテンツをバックエンドに配信する前にバッファリングを使用します。 理論的には、大きなファイルまたはストリームで問題が発生する可能性があります。 しかし、好みと状況の問題として、nginxも機能します。
- Apache2は、
100-continue HTTP response
を処理できるように修正されたものを使用します。 既製のパッケージはこちらから入手できます 。 - ニスを使用するアプリケーションは、radosgwを使用して両方のノードを調べます。 任意のキャッシュまたはバランサーを使用できます。 クラッシュした場合、アプリケーションはradosgwを直接ポーリングできます。
明らかにする backend radosgw1 { .host = "radosgw1"; .port = "8080"; .probe = { .url = "/"; .interval = 2s; .timeout = 1s; .window = 5; .threshold = 3; } } backend radosgw2 { .host = "radosgw2"; .port = "8080"; .probe = { .url = "/"; .interval = 2s; .timeout = 1s; .window = 5; .threshold = 3; } } director cephgw round-robin { { .backend = radosgw1; } { .backend = radosgw2; } }
- 各アプリケーションには独自のバケットがあります。 さまざまなACLがサポートされているため、バケットとバケット内の各オブジェクトのアクセス権を柔軟に調整できます。
- すべてのキッチンでの作業には、
python-boto
を使用します。 ファイルシステムからバケット内のすべてを埋めることができるPythonスクリプトの例(注意、インデント)を次に示します。 この方法は、自動モードで多数のファイルをバッチ処理する場合に便利です。 Pythonが気に入らない場合は問題ありません。他の一般的な言語を使用できます。
- すぐに使用できるradosgwは非常にしゃべりやすく、通常の負荷では大きなログファイルを生成します。 私たちの負荷の下で、ログのレベルを必然的に減らしました。
明らかにする[client.radosgw.gateway]
...
デバッグrgw = 2
rgw enable ops log = false
stderrへのログ= false
rgw enable usage log = false
...
- 監視には、Zabbixのテンプレートを使用します 。ソースはここから入手できます 。
これらすべては現在6ヶ月間私たちと一緒に働いており、一般的に管理者の介入を必要としません)
今後の計画
現在、私はCephを使用して、すでに4〜200 kbの1500万個のファイルを保存およびアップロードしようとしています。 S3では、これはあまり便利ではありません-一括コピー操作はありません。最初にストレージをいっぱいにするためにバケットをデータで削除することはできません-これはゆっくりとPPCです。 締め方を調べます。
しかし、主なタスクはジオクラスターです。私たちはシベリアにいて、地理的に近い地点からクライアントにデータを送信したいと考えています。 モスクワでは、コンテンツは既に遅れて飛んでいます-最大100msプラス、これは良くありません。 まあ、Ceph開発者は
計画にすべてを持っているようです。