*

Grizzlyの新機能(1) ~ Swiftによるオブジェクトストレージシステムの構築(8)

公開日: 最終更新日:2014/07/23  |  By  |  Object Storage, OpenStack, Swift

by You Yamagata 2013.04.24
(Swift関連の記事の一覧はこちらをご覧ください)
前回 Grizzly 版の Swift のインストール方法について説明しました。
Grizzly 版で追加・変更された機能等の一覧は下記に記されています。

https://github.com/openstack/swift/blob/stable/grizzly/CHANGELOG

今回は これらの変更点のうちクォータについて紹介したいと思います。

 0. Chefレシピの更新

前回公開したChef のレシピでは今回紹介する機能が有効になっていませんでしたのでレシピを更新しました。
58656c7 のコミットが含まれていない方は変更をマージして再度 chef-solo を実行したうえで swift を再起動してください。

1. Container Quota

Grizzly からコンテナに対してクォータをかけることが出来るようになりました。
クォータはバイト数とオブジェクト数の両方に対してかけることができます。
コンテナ folder1 にバイト数として 1000バイト、オブジェクト数として2を指定する場合以下のようにします。
1:  > swift -A http://localhost:8080/auth/v1.0 -U test:tester -K testing post   
2: -m 'Quota-Bytes:1000' -m 'Quota-Count:2' folder1
3: > swift -A http://localhost:8080/auth/v1.0 -U test:tester -K testing stat folder1
4: Account: AUTH_test
5: Container: folder1
6: Objects: 0
7: ...
8: Meta Quota-Count: 2
9: Meta Quota-Bytes: 1000
10: ...
11:
2行目のようにコンテナに対してメタデータ ‘Quota-Bytes:1000′ と ‘Quota-Count:2′ を指定します。
stat で確認すると確かに設定されていることがわかります。
実際にファイルをアップロードしてクォータが効いているか確認したいと思います。
まずデータを用意します。

1:  > dd if=/dev/urandom of=1001bytes.dat bs=1001 count=1  
2: > dd if=/dev/urandom of=300bytes_a.dat bs=300 count=1
3: > dd if=/dev/urandom of=300bytes_b.dat bs=300 count=1
4: > dd if=/dev/urandom of=300bytes_c.dat bs=300 count=1
アップロードを試みます。

1:  > swift -A ... upload folder1 1001bytes.dat  
2: Object PUT failed: http://localhost:8080/v1/AUTH_test/folder1/1001bytes.dat
3: 413 Request Entity Too Large Upload exceeds quota.
4:
5: > swift -A ... upload folder1 300bytes_a.dat
6: 300bytes_a.dat
7: > swift -A ... upload folder1 300bytes_b.dat
8: 300bytes_b.dat
9: > swift -A ... upload folder1 300bytes_c.dat
10: Object PUT failed: http://localhost:8080/v1/AUTH_test/folder1/300bytes_c.dat
11: 413 Request Entity Too Large Upload exceeds quota.
12:

1行目で 1001bytes のファイルをアップロードしようとして 1000bytes の上限にひっかかりエラーとなっています。
5行目から 300bytes のファイルを3つ上げようとしますが、3つ目の 300bytes_c.dat を上げようとしてエラーとなっています。これはオブジェクト数は 2 個までという上限に引っかかるためです。

以上のように コンテナに対してクォータが機能していることが確認できました。

なお Swift はデータの一貫性が結果整合性(Eventual Consistency) であったり、コンテナ情報がキャッシュされることからクォータを超えたデータが更新できてしまうことがあります。
厳格にクォータ設定値以下にできるわけではないのでその点は注意してください。

2.Account Quota

次にアカウントレベルのクォータについて見ていきたいと思います。
アカウントレベルのクォータは、バイト数のみ指定可能で、アカウントのメタデータ
“Quota-Bytes” を設定します。

コンテナレベルでのクォータはそのアカウントの管理者が指定していました。
しかしアカウントレベルのクォータはアカウントの管理者ではなく Swift クラスタの
管理者(reseller)が行います。

このため クラスタ管理者の権限で設定したいアカウントのメタデータを設定する必要があります。
以下にその方法を説明します。

まずSwiftクラスタの管理者を確認します。

この連載で構築した SAIO 環境では TempAuth のアカウントが以下のように定義されています。

/etc/swift/proxy-server.conf:

1:  [filter:tempauth]  
2: use = egg:swift#tempauth
3: user_admin_admin = admin .admin .reseller_admin
4: user_test_tester = testing .admin
5: user_test2_tester2 = testing2 .admin
6: user_test_tester3 = testing3
TempAuth でのアカウントの定義は proxy-server.conf の tempauth のセクションで

user_<tenant>_<user> = <password> <.権限> <.権限>

という形で指定されています。

4行目が例として利用している test:tester になります。
3行目の admin:admin には .reseller_admin という権限が付いており、このテナント:ユーザがクラスタの管理者であることがわかります。
したがってまず admin:admin でクラスタにアクセスし認証トークンを取得します。

1:  > swift -A http://localhost:8080/auth/v1.0 -U admin:admin -K admin stat -v  
2: StorageURL: http://localhost:8080/v1/AUTH_admin
3: Auth Token: AUTH_tk95b5daff2cc64befa64e703595bea099
4: Account: AUTH_admin
5: ....

トークンが取得できたのでこのトークンを使って test アカウントのアカウント情報のメタデータ QuotaBytes に 1000 を設定します。

1:  > curl -v -X POST -H 'X-Auth-Token: AUTH_tk95b5daff2cc64befa64e703595bea099'   
2: -H 'X-Account-meta-quota-bytes: 1000' http://localhost:8080/v1/AUTH_test
3: ...
4: < HTTP/1.1 204 No Content
5: < Content-Length: 0
6: < Content-Type: text/html; charset=UTF-8
7: < Date: Thu, 25 Apr 2013 07:58:27 GMT
8: <
9: ...
10:
11: > swift -A http://localhost:8080/auth/v1.0 -U test:tester -K testing stat
12: Account: AUTH_test
13: ...
14: Meta Quota-Bytes: 1000
15: ...
16:

1,2行目で curl を使って testアカウントに対してメタデータを設定しています。
11行目で test アカウントの情報を見ると Quota-Bytes: 1000 と確かにクォータが
設定されていることが分かります。

1:  > swift -A ... -U test:tester -K testing upload folder2 1001bytes.dat  
2: Object PUT failed: http://localhost:8080/v1/AUTH_test/folder2/1001bytes.dat 413 Request
3: Entity Too Large [first 60 chars of response] <html><h1>Request Entity Too Large</h1>
4: <p>The body of your r

上記のように container quota が設定されていない folder2 に 1001bytes のオブジェクトをアップロードを試みるとエラーになり、アカウントレベルのクォータが設定されていることが分かります。


○サンプルプログラム

上記のように curl で設定することが確認できましたが、少し面倒なので account quota を設定するサンプルプログラムを作りました。

https://github.com/yoyama/swift-sample/blob/master/account_quota/set_account_quota.py

以下のように使うことで account quota の設定を変えることができます。

1:  > ./set_account_quota.py -a test -s 99999  
2:
3: > swift -A http://localhost:8080/auth/v1.0 -U test:tester -K testing stat
4: Account: AUTH_test
5: ...
6: Meta Quota-Bytes: 99999
7:
8: > ./set_account_quota.py -a test -u
9:
10: > swift -A http://localhost:8080/auth/v1.0 -U test:tester -K testing stat
11: Account: AUTH_test
12: Containers: 1
13: Objects: 1
14: Bytes: 50
15: Accept-Ranges: bytes
16: X-Timestamp: 1366703327.66822
17: Content-Type: text/plain; charset=utf-8
18:

-a で設定したいアカウントのアカウント名を、 -s で設定したいクォータのバイト数を指定します。
クォータを外したい場合は -u を指定します。
8行目で -u を指定して実行するとクォータが無くなったことが分かります。

サンプログラムは python-swiftclient のライブラリを利用しています。
python-swiftclient ライブラリについては以前の記事を参照してください。

関連記事

no image

Swift のグローバルクラスタ (3) Icehouse 開発版でのテスト結果

2014.4.14 by You Yamagata 山縣です。 前回・前々回でグローバルクラスタ対応

記事を読む

day2_3

OpenStack Upstream Training in Paris 参加報告

by Ikuo Kumagai (@kumagai19o) Bonjuor. またご無沙汰して

記事を読む

no image

Swiftの概要 ~ Swiftによるオブジェクトストレージシステムの構築(1)

(Swift関連の記事の一覧はこちらをご覧ください)はじめまして、山縣と申します。私はビットアイル総

記事を読む

no image

OpenStack DBaas (Trove) を動かした話

本記事はOpenStack Advent Calendar 2015 12/17 のエントリー記事で

記事を読む

dpdk

OpenStack OVS VXLAN ネットワークの高速化

少し前の話になりますが、3月2日に開催された 日本仮想化技術株式会社様の OpenStack最新情報

記事を読む

no image

OpenStackで使用可能なWindows10イメージの作成方法

ビットアイルの田波です。 久々の更新です。 今回はWindows10イメージをOpenStack上

記事を読む

no image

Swift 1.12.0 CHANGELOG の翻訳

by You Yamagata 2013.02.04ビットアイル総研の山縣です。Swift の ve

記事を読む

top

OpenStack API でSoftLayerを操作する “Jumpgate”

by Ikuo Kumagai (@kumagai19o) この記事はAdvent Calen

記事を読む

no image

Keystone認証の利用 ~ Swiftによるオブジェクトストレージシステムの構築(9)

by You Yamagata 2013.05.13 (Last updated 2013

記事を読む

summittokyo

OpenStack Summit Tokyoのセッションへの投票をお願いします。

OpenStack Summit Tokyo のセッションへの投票が行われています。 弊研究所でも

記事を読む

no image

ビットアイル総合研究所は、クラウド技術に関する調査&研究を通して、社会と会社に寄与していくことを目的に、ビットアイル・エクイニクスの企業内研究所として2011年8月に設立されました。

openstack-figure1-2x
COHO DataStream のCinder連携

OpenStack Cinder のストレージバックエンドとしてはCe

blog-ocata
Jujuで Ocataを含む様々なバージョンのOpenStack をデプロイする方法

祝OpenStack Ocata リリース!! ということで、早速デプ

newton
Juju Manual Cloud で OpenStack 環境構築

本当にご無沙汰しております。 この投稿はOpenStack Adve

top
HACK! THE Juju/MAAS

6/8~6/10まで幕張メッセで開催されたInterop 2016。皆

dpdk
OpenStack OVS VXLAN ネットワークの高速化

少し前の話になりますが、3月2日に開催された 日本仮想化技術株式会社様

→もっと見る

PAGE TOP ↑