kikumotoのメモ帳

インフラ・ミドル周りを中心に、興味をもったことを適当な感じで。twitter : @takakiku

Diablo版Swiftインストール:ストレージサーバ編

前回、前々回からの続きで最後にストレージサーバを構築したときの手順をメモしておく。

構成とOS環境

keystone やプロクシサーバと同様。

パッケージインストール

ストレージサーバに必要なパッケージは以下のようにしてインストールした。

# yum install python-greenlet python-netifaces
# yum --disablerepo=diablo install openstack-swift-object openstack-swift-account openstack-swift-container xinetd

データ保存ディスクの準備

今回は、/dev/sdb に接続されたディスクにデータを保存する構成とした。そのために、fdisk で /dev/sdb 全体を1つのパーティションをつくり /dev/sdb1 として構成した。
これを以下のように XFS でフォーマットし、マウントしておく。

# yum -y install xfsprogs
# mkfs.xfs -i size=1024 /dev/sdb1
# echo "/dev/sdb1 /srv/node/sdb1 xfs noatime,nodiratime,nobarrier,logbufs=8 0 0" >> /etc/fstab
# mkdir -p /srv/node/sdb1
# mount /srv/node/sdb1
# chown -R swift:swift /srv/node

rsync

Swiftではデータの復旧などにrsyncを使うので、rsyncに関する設定をおこなっておく。まず、/etc/rsyncd.confを以下の内容で作成。address 部分は各ストレージサーバのIPに対応したものとなる。

uid = swift
gid = swift
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
address = 192.168.0.101

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

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

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

サービスと起動させるために、/etc/xinetd.d/rsync を以下のように記述し

service rsync
{
	disable	= no
	flags		= IPv4
	socket_type     = stream
	wait            = no
	user            = root
	server          = /usr/bin/rsync
	server_args     = --daemon
	log_on_failure  += USERID
}

xinetd サービスを再起動する。

# service xinetd restart

swift共通設定

プロクシサーバから /etc/swift 配下にある

  • swift.conf
  • account.ring.gz
  • container.ring.gz
  • object.ring.gz

を scp などで/etc/swiftにコピーしてくる。

ストレージサーバ設定

/etc/swift に account-server.conf, container-server.conf, object-server.conf を以下の内容で作成。各ファイルのbind_ipが、各ストレージサーバのIPに対応するように記述する。

account-server.conf
[DEFAULT]
bind_ip = 192.168.0.101
workers = 2
mount_check = false
user = swift
log_facility = LOG_LOCAL2

[pipeline:main]
pipeline = account-server

[app:account-server]
use = egg:swift#account

[account-replicator]

[account-auditor]

[account-reaper]
container-server.conf
[DEFAULT]
bind_ip = 192.168.0.101
workers = 2
mount_check = false
user = swift
log_facility = LOG_LOCAL2

[pipeline:main]
pipeline = container-server

[app:container-server]
use = egg:swift#container

[container-replicator]

[container-updater]

[container-auditor]
object-server.conf
[DEFAULT]
bind_ip = 192.168.0.101
workers = 2
mount_check = false
user = swift
log_facility = LOG_LOCAL2

[pipeline:main]
pipeline = object-server

[app:object-server]
use = egg:swift#object

[object-replicator]

[object-updater]

[object-auditor]

ファイルのオーナーを修正しておく。

# chown -R swift.swift /etc/swift

以上で設定ができたので、

# swift-init main start

で起動する。

動作確認

すべてのストレージサーバをセットアップした後、以下のようにして動作確認を行った。

コンテナを作成する。

$ swift -A http://172.16.0.99:5000/v1.0 -U demo -K secrete post folder1

コンテナにファイルをアップする。

$ swift -A http://172.16.0.99:5000/v1.0 -U demo -K secrete upload folder1 file1.txt

コンテナの内容を確認

$ swift -A http://172.16.0.99:5000/v1.0 -U demo -K secrete list folder1

以上で、DiabloSwiftの環境ができた。
今後は、これをベースにいろいろいじっていきたい。。。けれど、はたして。。。