Articles Comments

ちからの備忘録的日記 » cloud » SAIO(Swift All In One) step by step for Cactus on CentOS 5.6

SAIO(Swift All In One) step by step for Cactus on CentOS 5.6




SAIO(Swift All In One) step by step for Cactus」では、Ubuntu 10.04 でしたが、CentOS 5.6 にもインストールしてみたので、備忘録です。

基本は、Ubuntu の場合と同じですが、CentOS のソフトウェアのバージョンがいろいろ古いので、それを最新にする必要があります。

SAIO Step by Step on CentOS 5.6

基本は、Diablo 開発版のSAIOドキュメントを元にやっていきます。
Fedora/Redhat の注意事項が「Swift Installation Notes on Fedora / RHEL – Wiki」にありますので、これも参考にしながら進めていきました。

CentOS 5.6 のインストール

これは情報がたくさんありそうですので、割愛します。
とりあえず、今回はCentOS 5.6 x64 を前提に進めていきます。

Swfit に必要なソフトウェアのインストール

まずは、python 2.4 から 2.6 にバージョンアップです。

# rpm -Uvh  http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
# sudo yum install python26
# sudo yum install python26-{nose,simplejson,eventlet,greenlet}
# sudo yum install python26-devel

次は、epel のレポジトリにないものをインストールするために、pip をインストールします。

# wget http://pypi.python.org/packages/source/p/pip/pip-1.0.1.tar.gz
# tar zxf pip-1.0.1.tar.gz
# cd pip-1.0.1
# python26 setup.py install

pip で epel にない python モジュールをインストール。

# pip-2.6 install coverage xattr webob pastedeploy netifaces configobj

sqlite3 のバージョンが古いので、Ubuntu 10.04 と同じバージョン(3.6.22)にあげる。
ソースからは面倒なので、SRPM からRPMをつくってインストールします。

# wget http://ftp.iij.ad.jp/pub/linux/fedora/releases/13/Fedora/source/SRPMS/sqlite-3.6.22-1.fc13.src.rpm
# sudo yum install rpm-build -y
# sudo rpm -i --nomd5 sqlite-3.6.22-1.fc13.src.rpm
# cd /usr/src/redhat/SPECS
# sudo yum install -y ncurses-devel readline-devel autoconf tcl-devel (build に必要なのでインストール)
# sudo rpmbuild -bb --clean sqlite.spec 

作成したRPMをインストール。

# cd ../RPMS/x86_64/
# sudo rpm -Uvh sqlite-3.6.22-1.x86_64.rpm 
# sudo rpm -Uvh sqlite-devel-3.6.22-1.x86_64.rpm 
# sudo rpm -Uvh sqlite-doc-3.6.22-1.x86_64.rpm 
# sudo rpm -Uvh sqlite-debuginfo-3.6.22-1.x86_64.rpm 
# sudo rpm -Uvh lemon-3.6.22-1.x86_64.rpm 

最後に、memcached, rsync, xfs をインストールする。

# sudo yum install memcached -y
# sudo /sbin/chkconfig memcached on
# sudo /sbin/service memcached start
# sudo yum install rsync -y
# sudo yum install xfsprogs -y

Swift 用の disk 領域確保

VM 想定ですので、VMware 上で追加してみてください。
方法は割愛します。

なお、この領域が /dev/sdb に作成された前提で以後の作業を進めます。
/dev/sdb 以外が割り当てられた方は、別途修正してください。

Swift 領域設定作業

パーティションを作成します。

# fdisk /dev/sdb
警告: DOS互換モードは廃止予定です。このモード (コマンド 'c') を止めることを
      強く推奨します。 and change display units to
         sectors (command 'u').

コマンド (m でヘルプ): n
コマンドアクション
   l   論理 (5 以上)
   p   基本パーティション (1-4)
p
パーティション番号 (1-4): 1
最初 シリンダ (133-1044, 初期値 133):
初期値 133 を使います
Last シリンダ, +シリンダ数 or +size{K,M,G} (133-1044, 初期値 1044): 

コマンド (m でヘルプ): t
パーティション番号 (1-5): 1
16進数コード (L コマンドでコードリスト表示): 83
コマンド (m でヘルプ): w
パーティションテーブルは変更されました!

ファイルシステムを作成します。

# sudo mkfs.xfs -i size=1024 /dev/sdb1

マウントします。

# echo /dev/sdb1 /mnt/sdb1 xfs noatime,nodiratime,nobarrier,logbufs=8 0 0 >> /etc/fstab
# mkdir /mnt/sdb1
# mount /mnt/sdb1

swift 用のディレクトリ準備。

前提:swift を起動するユーザ、グループとも、nemf とします。
※ 今後の作業は、上記前提で記載していきますので、自分の環境にあわせて修正が必要です。

# mkdir /mnt/sdb1/1 /mnt/sdb1/2 /mnt/sdb1/3 /mnt/sdb1/4
# chown nemf:nemf /mnt/sdb1/*
# mkdir /srv
# for x in {1..4}; do ln -s /mnt/sdb1/$x /srv/$x; done
# mkdir -p /etc/swift/object-server /etc/swift/container-server /etc/swift/account-server /srv/1/node/sdb1 /srv/2/node/sdb2 /srv/3/node/sdb3 /srv/4/node/sdb4 /var/run/swift
# chown -R nemf:nemf /etc/swift /srv/[1-4]/ /var/run/swift

/etc/rc.local に追記。

# echo mkdir /var/run/swift >> /etc/rc.local
# echo chown nemf:nemf /var/run/swift >> /etc/rc.local

rsync 設定

リングファイルを rsync で同期するための設定です。

/etc/rsyncd.conf を作成します。内容は、以下の通り。

uid = nemf
gid = nemf
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
address = 127.0.0.1

[account6012]
max connections = 25
path = /srv/1/node/
read only = false
lock file = /var/lock/account6012.lock

[account6022]
max connections = 25
path = /srv/2/node/
read only = false
lock file = /var/lock/account6022.lock

[account6032]
max connections = 25
path = /srv/3/node/
read only = false
lock file = /var/lock/account6032.lock

[account6042]
max connections = 25
path = /srv/4/node/
read only = false
lock file = /var/lock/account6042.lock

[container6011]
max connections = 25
path = /srv/1/node/
read only = false
lock file = /var/lock/container6011.lock

[container6021]
max connections = 25
path = /srv/2/node/
read only = false
lock file = /var/lock/container6021.lock

[container6031]
max connections = 25
path = /srv/3/node/
read only = false
lock file = /var/lock/container6031.lock

[container6041]
max connections = 25
path = /srv/4/node/
read only = false
lock file = /var/lock/container6041.lock

[object6010]
max connections = 25
path = /srv/1/node/
read only = false
lock file = /var/lock/object6010.lock

[object6020]
max connections = 25
path = /srv/2/node/
read only = false
lock file = /var/lock/object6020.lock

[object6030]
max connections = 25
path = /srv/3/node/
read only = false
lock file = /var/lock/object6030.lock

[object6040]
max connections = 25
path = /srv/4/node/
read only = false
lock file = /var/lock/object6040.lock

rsync を有効にします。

# sudo /sbin/chkconfig rsync on
# sudo /sbin/service xinetd restart

Swift インストール

# wget http://launchpad.net/swift/1.3/1.3.0/+download/swift-1.3.0.tar.gz
# tar zxf swift-1.3.0.tar.gz
# cd swift-1.3.0
# python26 setup.py build
# python26 setup.py install

Swift の各モジュール用の設定ファイル作成

まずは、proxy-server の設定ファイル(/etc/swift/proxy-server.conf)

[DEFAULT]
bind_port = 8080
user = nemf

[pipeline:main]
pipeline = healthcheck cache swauth proxy-server

[app:proxy-server]
use = egg:swift#proxy
allow_account_management = true

[filter:swauth]
use = egg:swift#swauth
super_admin_key = swauthkey

[filter:healthcheck]
use = egg:swift#healthcheck

[filter:cache]
use = egg:swift#memcache

乱数用の hash 値ファイル(/etc/swift/swift.conf)の作成。

[swift-hash]
# random unique string that can never change (DO NOT LOSE)
swift_hash_path_suffix = changeme

次は、account, container, object サーバの設定ファイルの作成です。
3重化しているので、12個分作成します。

/etc/swift/account-server/1.conf
/etc/swift/account-server/2.conf
/etc/swift/account-server/3.conf
/etc/swift/account-server/4.conf
/etc/swift/container-server/1.conf
/etc/swift/container-server/2.conf
/etc/swift/container-server/3.conf
/etc/swift/container-server/4.conf
/etc/swift/object-server/1.conf
/etc/swift/object-server/2.conf
/etc/swift/object-server/3.conf
/etc/swift/object-server/4.conf

とりあえず、内容は割愛。

私が作成したサンプルは以下からダウンロードできます。

account, container, object サーバのサンプル設定ファイルのダウンロード

ファイルの中身は、下のような感じです。

# tar ztvf swift-sample-conf.tar.gz
drwxr-xr-x nemf/nemf         0 2011-06-14 17:08 ./account-server/
-rw-r--r-- nemf/nemf       248 2011-06-14 17:07 ./account-server/1.conf
-rw-r--r-- nemf/nemf       248 2011-06-14 17:08 ./account-server/4.conf
-rw-r--r-- nemf/nemf       248 2011-06-14 17:08 ./account-server/3.conf
-rw-r--r-- nemf/nemf       248 2011-06-14 17:07 ./account-server/2.conf
drwxr-xr-x nemf/nemf         0 2011-06-14 17:10 ./container-server/
-rw-r--r-- nemf/nemf       261 2011-06-14 17:09 ./container-server/1.conf
-rw-r--r-- nemf/nemf       261 2011-06-14 17:10 ./container-server/4.conf
-rw-r--r-- nemf/nemf       261 2011-06-14 17:09 ./container-server/3.conf
-rw-r--r-- nemf/nemf       261 2011-06-14 17:09 ./container-server/2.conf
drwxr-xr-x nemf/nemf         0 2011-06-14 17:11 ./object-server/
-rw-r--r-- nemf/nemf       243 2011-06-14 17:10 ./object-server/1.conf
-rw-r--r-- nemf/nemf       243 2011-06-14 17:11 ./object-server/4.conf
-rw-r--r-- nemf/nemf       243 2011-06-14 17:11 ./object-server/3.conf
-rw-r--r-- nemf/nemf       243 2011-06-14 17:10 ./object-server/2.conf

Swift 用スクリプト作成

再セットアップ用のスクリプト(/usr/bin/resetswift) です。

#!/bin/bash

swift-init all stop
sudo umount /mnt/sdb1
sudo mkfs.xfs -f -i size=1024 /dev/sdb1
sudo mount /mnt/sdb1
sudo mkdir /mnt/sdb1/1 /mnt/sdb1/2 /mnt/sdb1/3 /mnt/sdb1/4
sudo chown nemf:nemf /mnt/sdb1/*
sudo mkdir -p /srv/1/node/sdb1 /srv/2/node/sdb2 /srv/3/node/sdb3 /srv/4/node/sdb4
sudo /sbin/service memcached restart

リングファイルの再作成用のスクリプトです。(/usr/bin/remakerings)

#!/bin/bash

cd /etc/swift

sudo 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

アカウント作成スクリプトです。(/usr/bin/recreateaccounts)

#!/bin/bash

# Replace swauthkey with whatever your super_admin key is (recorded in
# /etc/swift/proxy-server.conf).
swauth-prep -K swauthkey
swauth-add-user -K swauthkey -a test tester testing

Swift のメインプロセスの起動スクリプトです。(/usr/bin/startmain)

#!/bin/bash

swift-init main start

Swift のサブプロセスの起動スクリプトです。(/usr/bin/startrest)

#!/bin/bash

swift-init rest start

実行権限をつけるのを忘れずに。

# chmod +x /usr/bin/resetswift
# chmod +x /usr/bin/remakerings
# chmod +x /usr/bin/recreateaccounts
# chmod +x /usr/bin/startmain
# chmod +x /usr/bin/startrest

Swift テスト&起動

尚、テストコマンドが ubuntu 仕様なのでちょっと細工します。

# sudo mv /usr/bin/python /usr/bin/python.org.2.4
# sudo ln -s /usr/bin/python26 /usr/bin/python
# sudo ln -s /usr/bin/nosetests-2.6 /usr/bin/nosetests

リングを作成した後、テスト実施。

# remakerings
# cd ~/swift-1.3.0
# ./.unittests
Name                                   Stmts   Exec  Cover   Missing
--------------------------------------------------------------------
swift                                      3      3   100%
swift.account                              0      0   100%
swift.account.auditor                     57     12    21%   30-37, 41-62, 66-84, 93-103
swift.account.reaper                     204     23    11%   55-74, 78-82, 86-90, 94-98, 106-113, 122-132, 147-174, 213-266, 304-364, 387-415
swift.account.replicator                   8      8   100%
swift.account.server                     215    171    79%   62-63, 66, 69, 82-83, 86, 114, 137-138, 141, 156-158, 172, 255-269, 275-276, 280, 283, 286, 301, 307-311, 315, 327, 335-337
swift.common                               0      0   100%
swift.common.bench                       169     30    17%   32-33, 36, 42-78, 83-84, 91-104, 107-116, 119, 125-129, 132-139, 145-148, 151-167, 173-176, 179-195, 201-208, 212-238
swift.common.bufferedhttp                 64     46    71%   64-65, 122, 124, 155-169
swift.common.client                      428    327    76%   28-29, 33-34, 39-43, 82, 124, 129, 134, 188-191, 217-225, 229, 231, 233, 249, 293-302, 332-344, 349, 351, 353, 355, 370, 399-402, 447-457, 520-533, 562-565, 599, 601, 603, 605, 616-627, 750, 754, 775, 797
swift.common.compressing_file_reader      31     31   100%
swift.common.constraints                  73     73   100%
swift.common.daemon                       38     35    92%   46-48
swift.common.db                          730    631    86%   134-135, 230, 241, 298-301, 336-342, 354-356, 407-409, 425, 466, 472-474, 498-501, 529-535, 547, 582, 594, 597, 651, 732-734, 750, 762-763, 770-772, 800-803, 835, 841, 843, 866-868, 875, 893-895, 944-946, 971, 1067, 1201, 1216-1217, 1224-1226, 1236-1238, 1271-1274, 1288-1290, 1336, 1338, 1346-1360, 1374-1376, 1403-1405, 1430-1432, 1454, 1515
swift.common.db_replicator               308    176    57%   48-52, 172, 180, 185-187, 212-216, 225, 258, 277-279, 285, 287-288, 290, 298-304, 323-330, 336-337, 341-342, 346-349, 356-366, 383-390, 393-397, 405-406, 408-419, 422, 432-437, 450-469, 472-495, 506-514, 520-531
swift.common.direct_client               167     18    10%   34-36, 53-72, 94-124, 129-138, 163-182, 202-231, 257-287, 305-314, 338-347, 370-403
swift.common.exceptions                   25     24    96%   26
swift.common.internal_proxy               85     79    92%   53, 115, 123, 127, 185, 207
swift.common.manager                     321    321   100%
swift.common.memcached                   187    171    91%   81-85, 101, 170-171, 206-208, 245-246, 275-276, 311-312
swift.common.middleware                    0      0   100%
swift.common.middleware.acl               47     47   100%
swift.common.middleware.catch_errors      20     15    75%   43-48
swift.common.middleware.domain_remap      56     51    91%   108-113
swift.common.middleware.healthcheck       15     12    80%   42-44
swift.common.middleware.memcache          14      9    64%   36-42
swift.common.middleware.ratelimit        124    124   100%
swift.common.middleware.staticweb        219    213    97%   114-115, 150, 511, 516, 519
swift.common.middleware.swauth           721    668    92%   18-19, 83, 90, 97-98, 199, 202-235, 264-265, 317, 319-321, 348-349, 916, 1014-1015, 1044-1046, 1333, 1336, 1340, 1345, 1348, 1353
swift.common.middleware.swift3           231    227    98%   218, 340, 398-401
swift.common.ring                          2      2   100%
swift.common.ring.builder                256    227    88%   73-99, 102, 130, 147
swift.common.ring.ring                    68     64    94%   33, 58, 67, 81
swift.common.utils                       490    441    90%   71-72, 98, 134, 152, 261, 317, 612-615, 644-648, 675-690, 701-707, 832-834, 870-873, 881, 886, 891, 959
swift.common.wsgi                        112     40    35%   84-86, 88, 107-194
swift.container                            0      0   100%
swift.container.auditor                   58     12    20%   30-38, 42-64, 68-87, 96-106
swift.container.replicator                 8      8   100%
swift.container.server                   254    208    81%   102, 122-123, 134-135, 139, 142, 157, 163, 170-171, 175, 178, 195, 216-217, 220, 247, 343-357, 363-364, 368, 371, 374, 390, 396-400, 412, 420-422
swift.container.updater                  166    106    63%   78-79, 89-99, 105-157, 201, 203, 237-240, 274-278
swift.obj                                  0      0   100%
swift.obj.auditor                        115    113    98%   133-134
swift.obj.replicator                     337    273    81%   152-156, 170-173, 226-229, 234-239, 241, 244, 265, 278, 288, 314, 335-336, 354, 369-372, 374-377, 389, 404-405, 437, 442-446, 455, 465-468, 483-484, 487, 497-498, 521-523, 530-532, 547-559
swift.obj.server                         465    429    92%   114, 232-233, 281-282, 364-365, 457, 460, 493, 566, 639, 675, 699-716, 724, 731-734, 747, 753, 759-761
swift.obj.updater                        131     93    70%   63-101, 112-114, 134, 138, 155-160
swift.proxy                                0      0   100%
swift.proxy.server                       978    909    92%   19-20, 62, 163-164, 210-216, 257-263, 453, 455-456, 462-463, 509, 599, 616-617, 621-625, 703-711, 728-731, 733-736, 760, 764-767, 782, 793-798, 824, 1022, 1024-1027, 1096-1098, 1120, 1171, 1251, 1289, 1444, 1466, 1501, 1543, 1560, 1583-1585
swift.stats                                0      0   100%
swift.stats.access_processor             150    137    91%   69-72, 76-79, 145-146, 162, 164, 171, 176, 200-202
swift.stats.account_stats                 64     14    21%   36-51, 55-58, 63-112
swift.stats.log_processor                291    254    87%   46, 97-111, 124-125, 136-137, 199, 204-207, 211, 227-240, 497, 520-524
swift.stats.log_uploader                 104    104   100%
swift.stats.stats_processor               30     26    86%   32, 38-41
--------------------------------------------------------------------
TOTAL                                   8639   7005    81%
----------------------------------------------------------------------
Ran 807 tests in 30.137s

OK (SKIP=8)

OKが出れば、問題なしので、Swift 起動し、初期アカウント作成。

# startmain
# recreateaccounts

Swift 確認

まずは、Token と StorageURL を入手します。

# curl -v -H 'X-Storage-User: test:tester' -H 'X-Storage-Pass: testing' http://127.0.0.1:8080/auth/v1.0
* About to connect() to 127.0.0.1 port 8080
*   Trying 127.0.0.1... connected
* Connected to 127.0.0.1 (127.0.0.1) port 8080
> GET /auth/v1.0 HTTP/1.1
> User-Agent: curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5
> Host: 127.0.0.1:8080
> Accept: */*
> X-Storage-User: test:tester
> X-Storage-Pass: testing
> 
< HTTP/1.1 200 OK
< X-Storage-Url: http://127.0.0.1:8080/v1/AUTH_35fb7955-f62b-419d-822d-e284e78a5528
< X-Storage-Token: AUTH_tkbca033187c51477fb4c3ef2f6cf80da8
< X-Auth-Token: AUTH_tkbca033187c51477fb4c3ef2f6cf80da8
< Content-Length: 112
< Date: Wed, 29 Jun 2011 06:47:33 GMT
Connection #0 to host 127.0.0.1 left intact
* Closing connection #0
{"storage": {"default": "local", "local": "http://127.0.0.1:8080/v1/AUTH_35fb7955-f62b-419d-822d-e284e78a5528"}}

Token と StorageURL を使って、実際に Container の一覧をリクエストします。Container は、Amazon S3 でいうところの Bucket にあたります。

当然ながら、何もないので No Content がレスポンスとして返ってきます。

$ curl -v -H 'X-Storage-Token: AUTH_tkbca033187c51477fb4c3ef2f6cf80da8' http://127.0.0.1:8080/v1/AUTH_35fb7955-f62b-419d-822d-e284e78a5528
* About to connect() to 127.0.0.1 port 8080
*   Trying 127.0.0.1... connected
* Connected to 127.0.0.1 (127.0.0.1) port 8080
> GET /v1/AUTH_35fb7955-f62b-419d-822d-e284e78a5528 HTTP/1.1
> User-Agent: curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5
> Host: 127.0.0.1:8080
> Accept: */*
> X-Storage-Token: AUTH_tkbca033187c51477fb4c3ef2f6cf80da8
> 
< HTTP/1.1 204 No Content
< X-Account-Object-Count: 0
< X-Account-Bytes-Used: 0
< X-Account-Container-Count: 0
< Content-Length: 0
< Date: Wed, 29 Jun 2011 06:52:19 GMT
* Connection #0 to host 127.0.0.1 left intact
* Closing connection #0
Related Posts Plugin for WordPress, Blogger...

Filed under: cloud · Tags: , , , ,

Leave a Reply

*