- 追加された行はこの色です。
- 削除された行はこの色です。
*Swift/起動用スクリプトの作成 [#m7ed6328]
[[Swiftのインストール>Swift/インストール方法]]と、[[設定ファイルの作成後>Swift/設定ファイルの作成]]、各種サーバの起動等を行うスクリプトを作成します。~
このページも[[Swift All In One>http://swift.openstack.org/development_saio.html]]を参考にしています。
$devとなっている部分は、使用する環境に合わせて変更してください。$user、$groupも同様です。~
$devとなっている部分は、使用する環境に合わせて変更してください。~
Swift用に用意したパーティションの名前が入ります。~
$user、$groupも同様に変更が必要です。~
またこれらも、スクリプトを生成するスクリプトを作成してあります。
~~/bin/resetswift
#!/bin/bash
swift-init all stop
sleep 5
sudo umount /mnt/$dev
sudo mkfs.xfs -f -i size=1024 /dev/$dev
sudo mount /mnt/$dev
sudo mkdir /mnt/$dev/1 /mnt/$dev/2 /mnt/$dev/3 /mnt/$dev/4 /mnt/$dev/test
sudo chown $user:$group /mnt/$dev/*
mkdir -p /srv/1/node/sdb1 /srv/2/node/sdb2 /srv/3/node/sdb3 /srv/4/node/sdb4
sudo rm -f /var/log/debug /var/log/messages /var/log/rsyncd.log /var/log/syslog
sudo service rsyslog restart
sudo service memcached restart
swift用を動作させるための、準備をやり直すスクリプトです。~
mountのし直しや、必要なサービスの再起動を行います。
~~/bin/remakerings
#!/bin/bash
cd /etc/swift
rm *.builder *.ring.gz backups/*.builder backups/*.ring.gz
rm -f *.builder *.ring.gz backups/*.builder backups/*.ring.gz
swift-ring-builder object.builder create 18 3 1
swift-ring-builder object.builder add z1-127.0.0.1:6010/sdb1 1
swift-ring-builder object.builder add z2-127.0.0.1:6020/sdb2 1
swift-ring-builder object.builder add z3-127.0.0.1:6030/sdb3 1
swift-ring-builder object.builder add z4-127.0.0.1:6040/sdb4 1
swift-ring-builder object.builder rebalance
swift-ring-builder container.builder create 18 3 1
swift-ring-builder container.builder add z1-127.0.0.1:6011/sdb1 1
swift-ring-builder container.builder add z2-127.0.0.1:6021/sdb2 1
swift-ring-builder container.builder add z3-127.0.0.1:6031/sdb3 1
swift-ring-builder container.builder add z4-127.0.0.1:6041/sdb4 1
swift-ring-builder container.builder rebalance
swift-ring-builder account.builder create 18 3 1
swift-ring-builder account.builder add z1-127.0.0.1:6012/sdb1 1
swift-ring-builder account.builder add z2-127.0.0.1:6022/sdb2 1
swift-ring-builder account.builder add z3-127.0.0.1:6032/sdb3 1
swift-ring-builder account.builder add z4-127.0.0.1:6042/sdb4 1
swift-ring-builder account.builder rebalance
ringを作成しなおします。~
ringとは、swiftでオブジェクトの場所をマッピングするためのものです。~
複数台のノードを用いた構成にする場合、こちらでIPアドレスやport番号を指定します。~
ringについては[[Rings>Swift/Rings]]も参照ください。
~~/bin/startmain
#!/bin/bash
swift-init auth-server start
swift-init proxy-server start
swift-init account-server start
swift-init container-server start
swift-init object-server start
swiftの各種サービスを起動します。
~~/bin/startrest
#!/bin/bash
swift-auth-recreate-accounts
export LANGUAGE=C
swift-auth-recreate-accounts -K $devauth
swift-init object-updater start
swift-init container-updater start
swift-init object-replicator start
swift-init container-replicator start
swift-init account-replicator start
swift-init object-auditor start
swift-init container-auditor start
swift-init account-auditor start
swift-init account-reaper start
アカウントを作り直し、各種サーバのupdater等を起動します。~
updaterとは、エラーの類などで書き込みに失敗した場合に、後で再度書き込むための仕組みです。~
言語を設定しているのは、ちょっとした不具合対策です。~
詳しくは[[memo>Swift/memo]]で説明しています。
これらのスクリプトを実行可能にします。
作成後、これらのスクリプトを実行可能にします。
# chmod +x ~/bin/*
*サーバの起動 [#d13113ef]
次は[[実際に使ってみましょう>Swift/サーバの起動とテスト]]
スクリプトを使用して、各種サーバを起動させます。~
まずはRingを構築します。
*スクリプトからの生成 [#x214dfd6]
# remakerings
# swift_script_gen <user> <dev>
~<user>には使用するユーザ名とグループ名、<dev>にはSwift用のパーティションの名前を指定します。~
ユーザ名とグループ名は同じ名前を想定しています。
テストを行ないます。~
# cd ~/swift/trunk; ./.unittests
特にエラーがなければサーバを起動します。
# startmain
rootユーザ以外だと、"Unable to increase file descriptor limit. Running as non-root?"と出ますが問題なく起動します。
テスト用のswiftのアカウントを作成します。
# swift-auth-create-account test tester testing
作成後、X-Storage-UrlとX-Auth-Tokenを取得します。
# 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:9000/v1/ef7a92d3-a959-4dcd-9ab1-82028fd67d6b
< X-Storage-Token: tkc3f4640b-68fa-4ffd-bb09-29d80ee64ab4
< X-Auth-Token: tkc3f4640b-68fa-4ffd-bb09-29d80ee64ab4
< 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
出力結果から、X-Storage-UrlとX-Auth-Tokenを取り出し、その後の操作に使用します。~
X-Storage-Urlはポート番号9000番という結果が返ってきますが、Swiftには9000番を使用しているサービスはありません。~
プロクシサーバのポート(8080)を指定すると想定する動作を行うので、ここでは8080に置き換えて使用します。
以下のようにしてHTTPのGETメソッドでテストを行ないます。
# curl -v -H 'X-Auth-Token: tkc3f4640b-68fa-4ffd-bb09-29d80ee64ab4' http://127.0.0.1:8080/v1/ef7a92d3-a959-4dcd-9ab1-82028fd67d6b
* 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/ef7a92d3-a959-4dcd-9ab1-82028fd67d6b 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: tkc3f4640b-68fa-4ffd-bb09-29d80ee64ab4
>
< HTTP/1.1 204 No Content
< X-Container-Object-Count: 0
< X-Container-Bytes-Used: 0
< Content-Length: 0
< Date: Wed, 01 Sep 2010 00:11:51 GMT
<
* Connection #0 to host 127.0.0.1 left intact
* Closing connection #0
この時点ではまだ何もオブジェクトがないため、No Contentと表示されます。
他にもPUTメソッドでディレクトリの作成やファイルのアップロードが行なえます。~
ディレクトリの作成は、以下のように、-XオプションでPUTメソッドを指定し、作成するディレクトリ名をURLの末尾に追加します。
# curl -X PUT -v -H 'X-Auth-Token: tkc3f4640b-68fa-4ffd-bb09-29d80ee64ab4' http://127.0.0.1:8080/v1/ef7a92d3-a959-4dcd-9ab1-82028fd67d6b/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/ef7a92d3-a959-4dcd-9ab1-82028fd67d6b/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: tkc3f4640b-68fa-4ffd-bb09-29d80ee64ab4
>
< HTTP/1.1 201 Created
< Content-Length: 18
< Content-Type: text/plain; charset=UTF-8
< Date: Wed, 01 Sep 2010 00:17:51 GMT
<
201 Created
* Connection #0 to host 127.0.0.1 left intact
* Closing connection #0
201 Createdがでれば成功です。~
既にディレクトリがある場合は202 Acceptedと出るようです。
ファイルのアップロードは以下のようにします。~
# curl -X PUT -T test -v -H 'X-Auth-Token: tkc3f4640b-68fa-4ffd-bb09-29d80ee64ab4' http://127.0.0.1:8080/v1/ef7a92d3-a959-4dcd-9ab1-82028fd67d6b/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/ef7a92d3-a959-4dcd-9ab1-82028fd67d6b/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: tkc3f4640b-68fa-4ffd-bb09-29d80ee64ab4
> Content-Length: 17
> Expect: 100-continue
>
< HTTP/1.1 100 Continue
< HTTP/1.1 201 Created
< Content-Length: 118
< Content-Type: text/plain; charset=UTF-8
< Etag: 7276c6ddf848dc69460b7873bd6ddb77
< Last-Modified: Wed, 01 Sep 2010 00:22:20 GMT
< Date: Wed, 01 Sep 2010 00:22:20 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
アップロードしたファイルは、GETメソッドで確認できます。~
hogehogeの部分に、ファイルの内容が表示されます。
# curl -v -H 'X-Auth-Token: tkc3f4640b-68fa-4ffd-bb09-29d80ee64ab4' http://127.0.0.1:8080/v1/ef7a92d3-a959-4dcd-9ab1-82028fd67d6b/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/ef7a92d3-a959-4dcd-9ab1-82028fd67d6b/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: tkc3f4640b-68fa-4ffd-bb09-29d80ee64ab4
>
< HTTP/1.1 200 OK
< Last-Modified: Wed, 01 Sep 2010 00:22:20 GMT
< Etag: 7276c6ddf848dc69460b7873bd6ddb77
< Content-Length: 17
< Content-Type: application/octet-stream
< Date: Wed, 01 Sep 2010 00:31:55 GMT
<
hogehoge
hogege
* Connection #0 to host 127.0.0.1 left intact
* Closing connection #0
stという、Swiftに含まれているコマンドでもテストを行ないます。
# st -A http://127.0.0.1:11000/v1.0 -U test:tester -K testing stat
こちらの環境ではエラーになり、現在調査中です。
*リンク [#ka44d919]
[[Swift All In One>http://swift.openstack.org/development_saio.html]]