Swiftの機能・利用方法の説明 北陸先端科学技術大学院大学 松井 大輔 一般社団法人クラウド利用促進機構(CUPA) 荒井 康宏 自己紹介 • 名前:松井大輔 – スポーツ選手ではありません – そんな名前で大丈夫か? • 職業:学生 – 修士課程を修了済み – 現在研究生 • 研究分野 – クラウド関連 • Swift、OpenNebula – テストベッド • StarBED、PlanetLab • その他 – Twitter: @nanodayo – ブログ: http://nanodayo.com/ Swiftの概要 • 分散オブジェクトストレージ – ファイルのダウンロード/アップロードが可能 • 元々はRackSpaceのCloud Filesサービス Server – OSS化 • Amazon S3に相当 • 大容量のファイルを想定 – – – – – バックアップ メールデータ VMイメージ 最大5GBのファイル テラバイト・ペタバイトを想定 • 複数台のサーバで構築 – 規模拡張 • 容量の増設 – 冗長化 – 一般的な性能のPCを想定 • 動的にサーバを追加可能 Server Server File File サーバの拡張・冗長化 FTPの場合の規模拡張・冗長化 NFSで容量増設 FTP Server × クライアント rsyncで同期 NFSで容量増設 FTP Server rsyncで同期 クライアントが 他のサーバを選択 NFS Server NFS Server NFSで容量増設 FTP Server ミラーサーバを構築する方法 NFS Server NFSで容量増設 NFS Server FTPの場合の規模拡張・冗長化(2) NFSで容量増設 FTP Server rsyncで同期 Load Balancer クライアント × NFS Server NFSで容量増設 FTP Server rsyncで同期 NFS Server NFSで容量増設 FTP Server Load Balancerを利用する方法 NFS Server NFSで容量増設 NFS Server 増設・冗長化しやすい構造 × Load Balancer クライアント FTP Server rsyncで同期 FTP Server 目的のファイルに合わせて サーバ選択 FTP Server FTP Server 交換などの構成変更 サーバを追加して 容量増設 FTP Server rsyncで同期 FTP Server FTP Server クラスタに分けて冗長化 増設後のファイル分配 増設後のクラスタ再構築 Swiftを構成するサーバ群 ファイルを保存 ユーザ認証 Proxy ServerのURLを通知 Tokenの発行 Object Server Auth Server Object Server ディレクトリを保存 互いに設定ファイルで指定 Container Server Proxy Server クライアント Container Server クライアントは リクエストの仲介 Proxy Serverと通信 Object Rings Container Rings Object Container Serverのリスト Serverのリスト アカウントを保存 Account Rings Account Server Account Serverのリスト Account Server 各サーバはRingファイルで指定 Swiftの場合の規模拡張・冗長化 ファイルを保存 Object Server Auth Server Object Server Object Server ディレクトリを保存 Container Server Proxy Server クライアント クライアントは Proxy Serverと通信 Container Server Container Server リクエストの仲介 アカウントを保存 Object Rings Container Rings Object Container Serverのリスト Serverのリスト Account Rings Account Server Account Serverのリスト Account Server サーバを増やしてRingを更新する PUTの段階で冗長化 Account Server Ringファイル • Object/Container/Account Serverのリスト – Proxy Serverがこれらのサーバを参照するのに使用 – Replicatorなども使用 2 replicas, 2 zones, 4 devices, … • Ringに含まれる情報 – サーバのアドレス・ポート – Replicaの数 – Zone • Replicationに影響 • コマンドで作成・変更 – swift-ring-builder • サーバを動的に追加可能 zone1-192.168.100.1:6020 zone1-192.168.100.2:6020 zone2-192.168.200.1:6020 zone2-192.168.200.2:6020 ・・・ … … … … zone1 Object Server zone2 Object Server Object Server replicatorで同期 Object Server Swiftの利用方法 • サーバ – 発表では割愛 – Eucalyptus Wiki に設定方法などを記載 • • • • • Swiftのインストール 設定ファイルとRingファイルを作成 サーバプログラムの実行 構築用スクリプトも掲載 今回ボツになったネタも掲載予定 • クライアント そんなクライアントで 大丈夫か? – CloudFiles対応クライアントが必要 • GUIは現行CyberDuckのみ • CloudFiles API Library あり – 頑張ればcurlでも可能 大丈夫だ、問題ない クライアントからの利用方法 Cloud Filesプロトコル • RackSpaceでも使用 • HTTPベース – メッセージの種類は4つ • HEAD, GET, PUT, DELETE – SSL対応可能 • 用語・制約 – – – – – ファイルはobject ディレクトリはcontainer ObjectはContainerの中にしか作れない Containerの中にContainerは作れない http://<Server>:<port>/<X-Storage-Url>/<container>/<object> • CyberDuckがCloudFilesプロトコルに対応 CyberDuck • GUIのファイル転送クライアント • 様々なプロトコルに対応 – FTP、FTPS、SFTP、Amazon S3などなど • Macでは人気のクライアント • Windows版もPrivate Betaで配布 CyberDuckからのSwift利用 • サーバのアドレスを変更できない orz CyberDuckからの利用(2) • Macの場合 – defaultsコマンドで設定するとサーバを変更可能 • # defaults write ch.sudo.cyberduck protocol.cf.swift.enable true • 変更しても接続できずorz – 調査中 • Windowsの場合 – Defaultsコマンドに相当する設定はできない – CyberDuckのヘルプによると変えられないらしい あぁ、やっぱりWindowsは駄目だったよ あいつは設定を聞かないからね curlからの利用 • 事前準備 – Auth Server上でアカウントを作成 • swift-auth-add-userコマンド • # swift-auth-add-user –K <adkey> –a <account> <user> <pass> • 実行例:# swift-auth-add-user –K devauth –a test tester testing • 認証 – # curl -v -H 'X-Storage-User: test:tester‘ -H 'X-Storage-Pass: testing‘ http://127.0.0.1:11000/v1.0 認証の結果 # curl -v -H 'X-Storage-User: test:tester' -H 'X-Storage-Pass: testing' http://127.0.0.1:11000/v1.0 * about to connect() to 127.0.0.1 port 11000 (#0) * Trying 127.0.0.1... connected * Connected to 127.0.0.1 (127.0.0.1) port 11000 (#0) > GET /v1.0 HTTP/1.1 > User-Agent: curl/7.19.7 (i486-pc-linux-gnu) libcurl/7.19.7 OpenSSL/0.9.8k zlib/1.2.3.3 libidn/1.15 > Host: 127.0.0.1:11000 > Accept: */* > X-Storage-User: test:tester > X-Storage-Pass: testing > < HTTP/1.1 204 No Content < X-Storage-Url: http://127.0.0.1:8080/v1/AUTH_8023b2fd83f34c34b8e799a7249fe9aa < X-Storage-Token: AUTH_tkc01a591b5cb140ed9b2377256c87f8c5 < X-Auth-Token: AUTH_tkc01a591b5cb140ed9b2377256c87f8c5 < Content-Length: 0 これらの値を控える < Date: Wed, 01 Sep 2010 00:07:13 GMT < * Connection #0 to host 127.0.0.1 left intact * Closing connection #0 curlからのPUTの方法 • 認証時に控えた値を指定する – X-Storage-Url – X-Auth-Token • ディレクトリ作成 – # curl -X PUT -v -H ‘X-Auth-Token: AUTH_tkc01a591b5cb140ed9b2377256c87f8c5 ‘ http://127.0.0.1:8080/v1/AUTH_8023b2fd83f34c34b8e799a7249fe9a a/aaaa • ファイルアップロード – # curl -X PUT -T test -v -H 'X-Auth-Token: AUTH_tkc01a591b5cb140ed9b2377256c87f8c5‘ http://127.0.0.1:8080/v1/AUTH_8023b2fd83f34c34b8e799a7249fe9a a/aaaa PUTの結果(ディレクトリ) # curl -X PUT -v -H 'X-Auth-Token: AUTH_tkc01a591b5cb140ed9b2377256c87f8c5' http://127.0.0.1:8080/v1/AUTH_8023b2fd83f34c34b8e799a7249fe9aa/aaaa * About to connect() to 127.0.0.1 port 8080 (#0) * Trying 127.0.0.1... connected * Connected to 127.0.0.1 (127.0.0.1) port 8080 (#0) > PUT /v1/AUTH_8023b2fd83f34c34b8e799a7249fe9aa/aaaa HTTP/1.1 > User-Agent: curl/7.19.7 (i486-pc-linux-gnu) libcurl/7.19.7 OpenSSL/0.9.8k zlib/1.2.3.3 libidn/1.15 > Host: 127.0.0.1:8080 > Accept: */* > X-Auth-Token: AUTH_tkc01a591b5cb140ed9b2377256c87f8c5 > < HTTP/1.1 201 Created < Content-Length: 18 < Content-Type: text/plain; charset=UTF-8 < Date: Mon, 15 Nov 2010 06:39:52 GMT < 201 Created * Connection #0 to host 127.0.0.1 left intact * Closing connection #0 PUTの結果前半(ファイル) # curl -X PUT -T test -v -H 'X-Auth-Token: AUTH_tkc01a591b5cb140ed9b2377256c87f8c5‘ http://127.0.0.1:8080/v1/AUTH_8023b2fd 83f34c34b8e799a7249fe9aa/aaaa * About to connect() to 127.0.0.1 port 8080 (#0) * Trying 127.0.0.1... connected * Connected to 127.0.0.1 (127.0.0.1) port 8080 (#0) > PUT /v1/AUTH_8023b2fd83f34c34b8e799a7249fe9aa/aaaa/test HTTP/1.1 > User-Agent: curl/7.19.7 (i486-pc-linux-gnu) libcurl/7.19.7 OpenSSL/0.9.8k zlib/1.2.3.3 libidn/1.15 > Host: 127.0.0.1:8080 > Accept: */* > X-Auth-Token: AUTH_tkc01a591b5cb140ed9b2377256c87f8c5 > Content-Length: 45 > Expect: 100-continue > 後半に続く PUTの結果後半(ファイル) < HTTP/1.1 100 Continue < HTTP/1.1 201 Created < Content-Length: 118 < Content-Type: text/plain; charset=UTF-8 < Etag: 922c0f15457dfc631ae9ff06abd1bc82 < Last-Modified: Mon, 15 Nov 2010 06:45:17 GMT < Date: Mon, 15 Nov 2010 06:45:18 GMT < <html> <head> <title>201 Created</title> </head> <body> <h1>201 Created</h1> <br /><br /> </body> * Connection #0 to host 127.0.0.1 left intact * Closing connection #0 curlからのGETの方法 • 認証時に控えた値を指定する – X-Auth-Token – X-Storage-Url – PUTと同様 • ファイルでもディレクトリでも同様(URLの違いのみ) – # curl -X GET -v -H ‘X-Auth-Token: AUTH_tkc01a591b5cb140ed9b2377256c87f8c5 ‘ http://127.0.0.1:8080/v1/AUTH_8023b2fd83f34c34b8e799a7249fe9a a/aaaa – # curl -X GET -v -H ‘X-Auth-Token: AUTH_tkc01a591b5cb140ed9b2377256c87f8c5 ‘ http://127.0.0.1:8080/v1/AUTH_8023b2fd83f34c34b8e799a7249fe9a a/aaaa/test GETの結果(ディレクトリ) # curl -X GET -v -H 'X-Auth-Token: AUTH_tkc01a591b5cb140ed9b2377256c87f8c5' http://127.0.0.1:8080/v1/AUTH_8023b2fd83f34c34b8e799a7249fe9aa/aaaa * About to connect() to 127.0.0.1 port 8080 (#0) * Trying 127.0.0.1... connected * Connected to 127.0.0.1 (127.0.0.1) port 8080 (#0) > GET /v1/AUTH_8023b2fd83f34c34b8e799a7249fe9aa/aaaa HTTP/1.1 > User-Agent: curl/7.19.7 (i486-pc-linux-gnu) libcurl/7.19.7 OpenSSL/0.9.8k zlib/1.2.3.3 libidn/1.15 > Host: 127.0.0.1:8080 > Accept: */* > X-Auth-Token: AUTH_tkc01a591b5cb140ed9b2377256c87f8c5 > < HTTP/1.1 200 OK < X-Container-Object-Count: 1 < X-Container-Bytes-Used: 45 < Content-Length: 5 < Content-Type: text/plain; charset=utf8 < Date: Mon, 15 Nov 2010 06:48:38 GMT < test * Connection #0 to host 127.0.0.1 left intact * Closing connection #0 ファイル一覧が表示される GETの結果(ファイル) # curl -X GET -v -H 'X-Auth-Token: AUTH_tkc01a591b5cb140ed9b2377256c87f8c5' http://127.0.0.1:8080/v1/AUTH_8023b2fd83f34c34b8e799a7249fe9aa/aaaa/test * About to connect() to 127.0.0.1 port 8080 (#0) * Trying 127.0.0.1... connected * Connected to 127.0.0.1 (127.0.0.1) port 8080 (#0) > GET /v1/AUTH_8023b2fd83f34c34b8e799a7249fe9aa/aaaa/test HTTP/1.1 > User-Agent: curl/7.19.7 (i486-pc-linux-gnu) libcurl/7.19.7 OpenSSL/0.9.8k zlib/1.2.3.3 libidn/1.15 > Host: 127.0.0.1:8080 > Accept: */* > X-Auth-Token: AUTH_tkc01a591b5cb140ed9b2377256c87f8c5 > < HTTP/1.1 200 OK < Last-Modified: Mon, 15 Nov 2010 06:45:17 GMT < Etag: 922c0f15457dfc631ae9ff06abd1bc82 < Content-Length: 45 < Content-Type: application/octet-stream < Date: Mon, 15 Nov 2010 06:50:51 GMT < オトートノ カタキヲ トルノデス * Connection #0 to host 127.0.0.1 left intact * Closing connection #0 ファイルの中身が表示される Cloud Files API • RackSpaceが公開 – http://www.rackspacecloud.com/cloud_hosting _products/files/api • Githubにもあり • 対応している言語 – PHP – Python – Ruby – Java – .NET(C#) 一番いいクライアントを頼む まとめ • Swiftの機能と概要 – – – – – Auth Server Proxy Server Object Server Container Server Account Server • 動的にサーバを追加可能 – 容量の増設 – 冗長化 大丈夫だ、(Swiftはきっと)問題ない • サーバの構築方法 – 詳しくはWikiに • クライアントからの利用 – CyberDuckからはまだ繋げず – curlでも一応可能 • Wikiにcurl用スクリプトも記載 – APIあり そうだな、次はこれを見ている人にも 手伝ってもらおうかな おわりに • 資料置き場 – http://eucalyptus.linux4u.jp/wiki/index.php?Swift/概要 • Eucalyputas WikiのSwift/概要のページ – インストール・設定方法など – Eucalyputs 日本語 Wikiに記載 – http://eucalyptus.linux4u.jp/wiki/ • CloudFiles – http://tech-rumble.blogspot.com/2009/08/rackspacecloudfiles.html • CloudFiles API – http://www.rackspacecloud.com/cloud_hosting_products/files/api • CyberDuck – http://cyberduck.ch/ おわりに(のおまけ) • 今回没になったネタ – 各種サーバの設定 – Swiftのメッセージの流れ • エルシャダイ – http://elshaddai.jp/ • エルシャダイWiki – http://www16.atwiki.jp/enoch/pages/1.html – セリフ集
© Copyright 2024 ExpyDoc