*Swift/起動用スクリプトの作成 [#m7ed6328] [[Swiftのインストール>Swift/インストール方法]]と、[[設定ファイルの作成後>Swift/設定ファイルの作成]]、各種サーバの起動等を行うスクリプトを作成します。~ このページも[[Swift All In One>http://swift.openstack.org/development_saio.html]]を参考にしています。 $devとなっている部分は、使用する環境に合わせて変更してください。$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 ~~/bin/remakerings #!/bin/bash cd /etc/swift rm *.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 ~~/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 ~~/bin/startrest #!/bin/bash swift-auth-recreate-accounts 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 これらのスクリプトを実行可能にします。 # chmod +x ~/bin/* *サーバの起動 [#d13113ef] スクリプトを使用して、各種サーバを起動させます。~ まずはRingを構築します。 # remakerings テストを行ないます。~ # 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]]