Upload
irixjp
View
6.806
Download
0
Embed Size (px)
Citation preview
1
2012.07.20日本 OpenStack ユーザ会
伊藤忠テクノソリューションズ 中島倫明
openstackOpen source software to build public and private clouds.
Swiftで学ぶ分散オブジェクトストレージ
CloudStack Ecosystem Day
〜内部アーキテクチャと構築のポイント〜
2
自己紹介
● 中島倫明 (Tomoaki Nakajima) @irix_jp● 伊藤忠テクノソリューションズ勤務● 日本 OpenStack ユーザ会( JOSUG )ボードメンバー● RedHat 認定アーキテクト
● OpenStack をはじめとする OSS を使ったクラウドインテグレーションを主な業務としております。
● その傍らで JOSUG メンバーとして、まだまだ歴史の浅い OpenStack の啓蒙活動にも尽力。
3
なぜ OpenStack ?
4
なぜ OpenStack ?
http://support.citrix.com/servlet/KbServlet/download/30323-102-674022/CloudStack3.0.0ReleaseNotes.pdf
5
Agenda
● OpenStack とは?● Swift とは?● Swift の構造● Swift の設計● 構築、運用時の注意点● まとめ● 日本 OpenStack ユーザ会について
6
OpenStack とは?
7
OpenStack とは?
● 2010/7/19
NASA が開発した IaaS ソフト
+
Rackspace の CloudFiles
OpenStack プロジェクト発足
https://twitter.com/nikiacosta/status/225767355148533760/photo/1=
http://www.rackspace.com/blog/happy-2nd-birthday-openstack-a-look-at-two-years-of-growth-infographic/
8
OpenStack とは?
● Python● Modular Structure(Scalable & Pluggable)● Amazon EC2/S3 互換 API● Apache2 ライセンス● OpenStack Foundation
● OpenSource IaaS Platform Software● データセンタ、社内、自宅でクラウド
10
OpenStack とは?● リリース
バージョン 公開時期 特徴
2010.1 Austin 2010/10 Nova, Swift 初リリース(連携せず)
2011.1 Bexar 2011/2 Glance : Swift 上の VM ディスクイメージを Nova から利用可能に
2011.2 Cactus 2011/4 Nova : LXC ・ VMware ESX 対応、 IPv6 完全対応Swift : Swauth 認証採用、性能向上Glance : CLI ツール追加、複数イメージフォーマット対応
2011.3 Diablo 2011/10 Nova :ゾーン間分散スケジューラ、ボリュームブートSwift :複数クラスタレプリケーションGlance :フィルタリング対応、テナント間イメージ共有
2012.1 Essex 2012/4 Keystone : Nova, Swift 等でユーザ管理を一元化Horizon : Nova, Swift 等を WebUI で操作
2012.2 Folsom 2012/10 予定 Quantum :仮想ネットワーク機能が Nova から独立Cinder :ボリューム機能が Nova から独立
2013.1 Grizzly 2013/4 予想 OpenStack Design Summit October 15-18 で決定。http://openstack.jp/assets/files/20120512/OSC2012-Nagoya-yosshy.pdf
11
OpenStack とは?
● 研究開発基盤– NASA
– University of Melbourne
– University of Bedfordshire
– Purdue University
– Information Sciences Institute
– Instituto de Física de Cantabria(IFCA)
– Gjøvik University College
– CC-IN2P3
– US Department of Energy
– Industrial Technology Research
– Institute (ITRI), CCMA
● 事例● クラウドサービス
– The Rackspace Cloud
– HP Public Cloud
– Ubuntu Cloud
– Softlayer Object Storage
● サービス基盤– MercadoLibre, Inc
– Sina.com
– Radio Free Asia
– AT&T
– RightScale
– X.commerce (eBay/Paypal)
12
OpenStack とは?
● 構成するコンポーネント● Nova● Swift● Glance● Keystone● Horizon● Quantum● Cinder
仮想マシン管理
オブジェクトストレージ
イメージ管理
認証・認可
ダッシュボード
ネットワーク管理( nova から派生 )
ボリューム管理( nova から派生)
各コンポーネントの単独利用も可能
13
OpenStack とは?
● 利用イメージ● ダッシュボード
14
OpenStack とは?
● 利用イメージ● CLI
# nova-manage service listBinary Host Zone Status Statenova-scheduler openstack-1 nova enabled :-)nova-compute openstack-2 nova enabled :-)nova-compute openstack-3 nova enabled :-)nova-compute openstack-4 nova enabled :-)nova-network openstack-2 nova enabled :-)nova-network openstack-3 nova enabled :-)nova-network openstack-4 nova enabled :-)
15
OpenStack とは?
● 利用イメージ● Euca2ools
– Amazon EC2/S3 互換 API を操作するコマンドラインツール
# euca-describe-availability-zones verbose
AVAILABILITYZONE nova availableAVAILABILITYZONE |- nova1.sol-net.jpAVAILABILITYZONE | |- nova-cert enabled :-)AVAILABILITYZONE | |- nova-compute enabled :-)AVAILABILITYZONE | |- nova-consoleauth enabled :-)AVAILABILITYZONE | |- nova-network enabled :-)AVAILABILITYZONE | |- nova-scheduler enabled :-)AVAILABILITYZONE | |- nova-volume enabled :-)
16
OpenStack とは?
● 利用イメージ● API/Library
– python-novaclient– python-keystoneclient– python-quantumclient– (開発中) python-swiftclient , python-glanceclient
from keystoneclient.v2_0 import client
keystone = client.Client(
username=USER, password=PASS,
tenant_name=TENANT_NAME,
tenant_name=KEYSTONE_URL)
http://openstack.jp/assets/files/20120604/KeystoneClient.pdf
17
OpenStack とは?
これまでの OS
物理リソースの制御インフラを人の手で操作
● Linux● Windows● UNIX 系 OS● etc
18
OpenStack とは?
これまでの OS
物理リソースの制御インフラを人の手で操作
仮想化・分散されたリソースの制御インフラをアプリケーションのよう
に操作● Linux● Windows● UNIX 系 OS● etc
● OpenStack● CloudStack● Eucalyptus● etc
新しいレイヤの OS
CloudOS
19
OpenStack とは?
● 本日の主題● Nova● Swift● Glance● Keystone● Horizon● Quantum● Cinder
仮想マシン管理
オブジェクトストレージ
イメージ管理
認証・認可
ダッシュボード
ネットワーク管理( OpenFlow )
ボリューム管理( nova から派生)
20
Swift とは?
21
Swift とは?
● OpenStack Object Storage● いわゆる Amazon S3● REST API で入出力を行うファイルサーバ
– Swift API と S3 互換 API– オブジェクト≒ファイル
● Proxy Node と Storage Node の 2 つで構成
ProxyNode
StorageNodeClient
AccountContainerObject
REST
Swift
REST
22
Swift とは?
● 特徴● HTTP REST API を用いた入出力● 安価な x86 サーバ上での稼働を前提● シンプル構造● 「超」安全設計● サーバを並列化し、リニアに容量・性能を向上可能
– 単一障害点なし– ボトルネックなし
● ファイルの破損を自動検知&自己修復● ファイルと任意のメタ情報をセットにした格納が可能
23
Swift とは?
● 動作環境● Linux(Ubuntu or RHEL)● Python 2.6 or 2.7● Xattr をサポートする Filesystem
– Ext3, 4, xfs, etc
● インストール関して– Ubuntu ・・・標準リポジトリに含まれる– RHEL ・・・ EPEL リポジトリに含まれる
● CentOS, Scientific, Fedora でも動作可
24
Swift とは?
● 利用イメージ● HTTP リクエストでファイル操作を行う。
PUT /hoge/foo/bar/demo.pdf HTTP/1.1
Host: storage.swiftdrive.comX-Auth-Token: eaaafd18-0fed-4b3a-81b4-663c99ec1cbbETag: 8a964ee2a5e88be344f36c22562a6486Content-Length: 512000X-Object-Meta-PIN: 1234[...body...]
25
Swift とは?
● Swift の用途● アクセスの分散● データベースの分散● バッチ処理の分散
● ファイル入出力の分散
→サーバ並列化&バランシング
→ Mongo/Cassandra/etc
→ Hadoop
→ ???
26
Swift とは?
● Swift の用途● アクセスの分散● データベースの分散● バッチ処理の分散
● ファイル入出力の分散
→サーバ並列化&バランシング
→ Mongo/Cassandra/etc
→ Hadoop
→ ???
27
Swift とは?
● Swift の用途
WEB
Dropbox風クライアント
Hadoop等
データアーカイブ
データバックアップ
API
API
API
API
API
API
28
バージョン情報
● 最新は 1.5.0version release date blueprint bug
1.4.0 diablo 2011/5/31 5 20
1.4.1 diablo 2012/6/20 2 7
1.4.2 diablo 2011/7/27 5 14
1.4.3 diablo 2011/9/12 3 7
1.4.4 essex 2011/11/24 1 14
1.4.5 essex 2012/1/9 3 8
1.4.6 essex 2012/2/10 2 11
1.4.7 essex 2012/3/9 9 10
1.4.8 essex 2012/3/33 0 8
1.5.0 folsom 2012/6/5 6 16
1.5.1 folsom 2012/7/30
29
Swift の構造
30
Swift の構造
● 基本構造
Proxy
Account
Container
Auth Object
Container
ユーザ認証、アクセストークンの発行
ユーザからのアクセス窓口。配下のサーバへの振り分けを行う。
アカウント、コンテナのマッピング。アカウントの統計情報を管理
コンテナに保存されたオブジェクトとACL を管理
オブジェクトの実体が保存される。
REST
REST
REST
31
Swift の構造
● 基本機能がWSGI のミドルウェアとして実装
Client
WEB インターフェス
ミドルウェア 1
ミドルウェア 2
ミドルウェア N
WSGI アプリケーション
...
Request Response
ミドルウェアを追加する事で処理を自由に追加可能
標準の Proxy サーバでは以下の MW がロードされる
catch_errors healthcheck cache ratelimit tempauth proxy-logging proxy-server
https://github.com/openstack/swift/blob/master/etc/proxy-server.conf-sample
32
Swift の構造
● データの持ち方● デフォルトで 3 つ
の複製● 複製は「ゾーン」
という単位で区切られて行われる。
A
A
AZone 1
Zone 2
Zone 3
Zone 4
Zone 5
B
B
B C
C
C
33
Swift の構造
● ファイル複製の制御● Ring
– 静的ハッシュテーブル– 全てのファイルは予め保存先が決められている。
● 「パーティション」と呼ばれる箱を何個用意するか決めた後で、どの箱にどのディスクを配置するか決める。
● swift-ring-builder xxx create ・・・箱の数を決める● swift-ring-builder xxx add ・・・ディスクを登録● swift-ring-builder xxx rebalance ・・・箱へ割当てるディスクを決定
34
Swift の構造
array('H', [ 0, 1, 5, 8, 7, 6, ...]) array('H', [ 6, 3, 9, 4, 3, 2, ...]) array('H', [ 4, 7, 2, 0, 5, 1, ...])
Replica1
Replica2
Replica3
Part1 Part2 Part3 Part4 ・・・ 2^n
A BGroupA/UserAContainerAfilenameA
GroupB/UserBContainerBfilenameB
{... 'ip': '192.168.128.12', 'id': 4, 'parts': 10, 'device': 'disk5', 'port': 6000 ...},{... 'ip': '192.168.128.12', 'id': 5, 'parts': 10, 'device': 'disk6', 'port': 6000 ...},{... 'ip': '192.168.128.12', 'id': 6, 'parts': 10, 'device': 'disk7', 'port': 6000 ...},...
swift_hash_path_suffix
35
Swift の構造
● ファイルの配置
10.data 20.data
ハッシュ下 3 桁
ハッシュ
パーティション No
object
デバイス名
ハッシュ下 3 桁 ハッシュ下 3 桁
account container
パーティション No パーティション No
ハッシュ ハッシュ
デバイス名 デバイス名
devices dir
アップロード時のタイムスタンプがファイル名になる
36
Swift の構造
● 安全重視の複製● 各ノードは Push しか行わない(相手ノードをファイルを消さない)
● データの削除はタイムスタンプを見て、古いものが消える
● 削除時には削除フラグ (tombstone) ファイルを生成し、「削除」のレプリケーションにも対応。
37
Swift の構造
● ファイルの複製
20.data
ハッシュ
10.data 20.data
ハッシュ
10.data
ハッシュ
ノード 1ノード 1
ノード 2ノード 2
10.data 20.data
ハッシュ
38
Swift の構造
● ファイルの削除
20.data
ハッシュ
10.data
ハッシュ
ノード 1ノード 1
ノード 2ノード 2
10.data 20.data
ハッシュ
30.ts 30.ts
10.data 20.data
ハッシュ
30.ts
39
Swift の設計
40
Swift の設計
● コンポーネントの負荷(目安)
CPU MEM DISK(I/O)
DISK(space)
network
proxy 中 *1 中 *1 低 低 中 *1
account 低 低 低 低 低
container 中 低 低 低 低
object 中 中 高 高 高
*2
*1) 利用方法と台数に依存。*2) たいていの場合、この 3 機能は同居でもよい。ただし、総容量が数百 PB になる ケースでは分離したほうが良い(後述
41
Swift の設計
● Rackspace Reference Architecture● Storage-as-a-Service
– Public, Read/Write Heavy, Min 5 cabinets (~75 Nodes)
http://www.referencearchitecture.org/
Proxy Node Storage Node
Server Model Dell R415, Dell R515, Dell R710 Dell C2100, Dell R515
CPU Single socket CPU (min. needed) Single Quad
MEM 8GB RAM 8 or 12GB RAM
Data Disk Qty:12, SATA 3.5" 2TB Drives
System Disk Qty: 2, 3.5" 15K-RPM 300GB SAS
Qty: 2, SAS 2.5" 300GB Drives (internal)
Raid R1, LSI RAID Controller No RAID
NIC Intel NICs Intel 1Gb NICs: 2 or more NICs of 1G or greater, based on
intended workload
42
Swift の設計
● コンポーネントの配置 (storage node)– NWの二重化や電源二重化は Zone で対応する。– ノード数が多くなりやすいのでシンプルが管理しやすい
1Gbps L2
Storage node
Storage node
Storage node
Storage node
Storage node
Storage node
1Gbps L2
Storage node
Storage node
Storage node
Storage node
Storage node
Storage node
1Gbps L2
Storage node
Storage node
Storage node
Storage node
Storage node
Storage node
1Gbps L2
Storage node
Storage node
Storage node
Storage node
Storage node
Storage node
1Gbps L2
Storage node
Storage node
Storage node
Storage node
Storage node
Storage node
zone1 zone2 zone3 zone4 zone5
43
Swift の設計
● コンポーネントの配置 (proxy node)● NW 、電源は 2重化推奨● アクセス経路や顧客単位で Proxy のドメインを分けるこ
とも可能– メリット: ratelimit(middleware) を個別に設定できる。
1Gbps L2
Proxy node
1Gbps L2
Proxy node Proxy node Proxy node Proxy node
Storage pool
Domain A Domain B
44
Swift の設計
● ネットワーク● ゾーン間は転送量が多いので 10Gbps が推奨
1Gbps L2
Storage node
Storage node
1Gbps L2
Storage node
Storage node
1Gbps L2
Storage node
Storage node
1Gbps L2
Storage node
Storage node
1Gbps L2
Storage node
Storage node
10Gbps 10Gbps
1Gbps L2
Proxy node
1Gbps L2
Proxy node Proxy node Proxy node Proxy node
45
Swift の設計
● Ring に持たせるパーティション数● 大きめに、ただしバランスが重要
– 小さい・・・分散が偏りやすくなる– 大きすぎる・・・ Swift の起動に時間がかかる、メモリを消費
● あとで変更できない(現時点では)● パーティション数による性能の変化は無い
● 算出方法– 1物理ディスクあたり 30〜 100パーティション前後– 最終的に 1 クラスタを構成する最大見込み容量から求める– 2^n の近似値となる n を選択する。
46
Swift の設計
● Ringパーティション数と消費メモリ● 3 replica 想定
– swift-ring-builder xxx create <part_power> <replica> ..
part_power パーティション数 目安ディスク本数(100part/disk)
物理容量(SATA 3TB)
消費メモリ *1( 目安 )
10 1,024 11 33 TB 145,660 KB
15 32,768 328 984 TB 145,764 KB
20 1,048,576 10,486 32 PB 151,748 KB
25 33,554,432 335,545 1,007 PB 342,212 KB
*1)ring をロードした Python プロセスの仮想メモリサイズ
part_power が 20 を超えると目に見えて Ring の作成、 Swift の起動が遅くなる。現実的な運用を考慮すると、 part_power=27 前後が限界 (RAID 無しの場合 )
47
Swift の設計
● 超巨大な Swift クラスタを作りたい場合● 例 ) 100EB 、 200ZB ・・・
● パーティション数は 2^27 前後で頭打ち。– 構造的にはもっと巨大なパーティションも作成可能
● Swift に認識させるディスクを LVM で連結して、 1ディスクあたりのサイズを大きくする。● ほぼ無限にスケールさせられる。
48
構築、運用時の注意点
49
構築、運用時の注意点
● 時刻同期● オブジェクトの管理にタイムスタンプを利用するため。● 仮にクラスタ内のノードの時間がずれていると・・・
– 表面上は動くが、時間が遅れている Proxy を経由してアップロードされたオブジェクトが、過去ファイル扱いになってしまう等の問題あり。
50
構築、運用時の注意点
● ファイル破損チェックの動作● ファイル数、容量が大きくなってくると破損チェックの負荷と時間を見て調整する必要あり。– サーバ性能と相談して調整。
● object-auditor– files_per_second
● 1秒間にチェックできるファイル数の最大値(デフォルト: 20 )
– bytes_per_second● 1秒間にチェックできるバイト数の最大値(デフォルト: 10000000 )
51
構築、運用時の注意点
● 監視● ちゃんとやりましょう● ただし、1台落ちても大惨事にならないので、簡単なチェックで OK– Healthcheck ミドルウェア
● ログ監視は注意– Swift は正常動作時にも内部ではエラーが出やすい。
● レスポンス向上のために、タイムアウトしきい値が低い
52
構築、運用時の注意点
● 認証● OpenStack の一部として使う場合は
Keystone ( OpenStack 全体の統合認証)を利用
● Swift単独で利用する場合– 標準で持っている認証方式
● tempauth( テスト用認証機構、リファレンス実装 )● swauth(Keystone登場前の Swift専用の認証機構 )
– 個別に作りこむ場合● tempauth を参考にするとわかりやすい
http://docs.openstack.org/developer/swift/development_auth.html
53
ロードマップ
54
ロードマップ
# blueprint 概要
1 keystone-middleware Swift 用 Keystone 認証ミドルウェアを Keystoneから Swift へ移動
2 webob-support 新バージョンの webos モジュールのサポート
3 cors-support CORS サポート
4 large-single-uploads 5GB 以上のオブジェクトを単一操作でアップロード可能にする
5 multi-region 異なる Swift クラスター間でのレプリケーション
6 ring-builder-server Ring 管理機能
7 object-compression 圧縮
8 searchable-metadata メタデータ検索
10 cdmi CDMI のサポート (SNIA によって定義されるクラウド上のデータ管理企画 )
11 cdn-swift CDN サポート
12 easier-ring-changes CSV からの Ring 作成
13 friendly-error-messages エラーメッセージの改善https://blueprints.launchpad.net/swift
55
ロードマップ
# blueprint 概要
14 future-at-risk-tools ディスク障害時の一時的な自動復旧
15 localfs ???
16 parity-storage Erasure Coding への対応
17 pipe-stdin パイプライン経由のアップロード
18 prevent-deletes 永続的オブジェクトのサポート(削除できないオブジェクト)
19 read-only-middleware 全体を読み取り専用にするミドルウェア
20 reworkfunctests 機能テストのリファクタリング
21 storage-quotas テナントへのクォータ
22 swift-cdmi CDMI のサポート
23 swift-configurable-handoff-constraints
ハンドオフノードの選択方式の改善
24 zone-concept-change ゾーンコンセプトの変更
https://blueprints.launchpad.net/swift
56
まとめ
57
まとめ
● OpenStack とは?● OSS IaaS 基盤ソフトウェア● ClouldOS とも呼ばれます
● Swift とは?● x86 サーバで動作する、● 安価に安全にファイルを保存できる、● S3 互換を備えた、● RESTベースのファイルサーバです
58
日本 OpenStack ユーザ会
59
日本 OpenStack ユーザ会
● 国内での OpenStack の普及活動、最新情報の発信、意見交換等を行なっています。● http://openstack.jp/● ML 参加者: 662人 (7/17 時点 )
60
日本 OpenStack ユーザ会
● これまでに様々なセミナーや公演を実施● オープンソースカンファレンス
– 東京、名古屋、京都
● 勉強会– セミナー– ハンズオン– ハッカソン– コードリーディング
– 月 1回ペース
61
日本 OpenStack ユーザ会
使われている基盤技術の理解
● CloudOS を扱う上で重要なポイント
62
日本 OpenStack ユーザ会
http://openstack.jp/
My special thanks to Citrix and Mr. @kkitase
63
ご静聴ありがとうございました。