技術情報

技術情報

OpenStack: 分散オブジェクトストレージ Swift

2013年3月6日

技術文書トップへ

初期設定

ストレージノードの設定

ストレージノードの設定には、以下の項目があります。

次に、各設定について解説します。

1. パケットフィルタの設定

パケットフィルタを有効にする場合、以下のポートを開けておきます。
なお、これらのポート番号は全て各ソフトウェアの設定により変更することが可能です。変更する場合は、それぞれ該当ポート番号に置き換えてください。

ページトップ

2. ntpの設定

Swiftは、最新のオブジェクトファイルを取得するためにタイムスタンプを使用するため、クラスタ内にある各サーバのシステムタイムができる限り正確に同期していることが重要です。
そこで、NTPを利用して各サーバのシステムタイムを同期します。NTPの設定ファイルを編集して、プロキシノードでは外部のタイムサーバの時刻を参照し、各ストレージノードはプロキシノードの時刻を参照する構成とします。

/etc/ntp.conf

	:(省略)
server proxy.example.jp			# プロキシサーバを参照(指定)する

/etc/sysconfig/ntpd

# Drop root to id 'ntp:ntp' by default.
OPTIONS="-x -u ntp:ntp -p /var/run/ntpd.pid -g"

設定を反映させるためにntpデーモンを再起動します。

[root@stor1 ~]# service ntpd restart
Shutting down ntpd: [ OK ]
Starting ntpd: [ OK ]
[root@proxy ~]#

"ntpq –p"コマンドで、時刻の同期状態を確認します。行の先頭に"*"や"+"の印のついたものがあれば、時刻の同期ができていることとなります。時刻の同期には10分程度を要します。

[root@stor1 ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*proxy 133.243.238.164 2 u 6 128 377 0.183 -0.673 0.317

行の先頭(1カラム目)の文字は、以下のような意味があります(他の文字も表示されることがあります)。

OS起動時にntpdが自動起動するよう設定を行います。

[root@proxy ~]# chkconfig ntpd on
[root@proxy ~]# chkconfig --list ntpd
ntpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@proxy ~]#

また、システム再起動時、サーバの時刻とntpの時刻の差が大きいとntpによる時刻合わせが働かなくなるため、サーバ起動時に毎回ntpdateでの強制時刻合わせを行うように設定しておくことが望ましいです。

ページトップ

3. Swift設定ファイル用ディレクトリの生成

設定ファイルやリングファイルを配置するディレクトリを作成し、オーナーとグループにSwift専用ユーザアカウントswiftを設定します。

mkdir /etc/swift
chown swift:swift /etc/swift

ページトップ

4. Swift設定ファイルとリングファイルの取得

swift.confとリングファイルをプロキシノードからコピーします。以下にscpコマンドを使用した例を記載します。

[root@stor1 ~]# scp -p proxy.example.jp:/etc/swift/swift.conf /etc/swift/.
The authenticity of host 'proxy.example.jp (192.168.0.21)' can't be established.
RSA key fingerprint is 95:0d:46:b3:75:68:e9:a1:12:e7:8e:43:64:23:87:c2.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'proxy.example.jp,192.168.0.21' (RSA) to the list of known hosts.
root@proxy.example.jp's password:
swift.conf 100% 141 0.1KB/s 00:00
[root@stor1 ~]#
[root@stor1 ~]# scp -p proxy.example.jp:/etc/swift/*.ring.gz /etc/swift/
root@proxy.example.jp's password:
account.ring.gz 100% 404KB 403.9KB/s 00:00
container.ring.gz 100% 404KB 403.7KB/s 00:00
object.ring.gz 100% 404KB 403.8KB/s 00:00
[root@stor1 ~]#

ページトップ

5. Swift専用パーティションの作成

Swift専用パーティションを用意し、その上にファイルシステムを作成します。ファイルシステムは、/srv/node/<DEVICE>にマウントします。
Swiftは、拡張属性(xattr)が使えるファイルシステムであれば、原則動作可能です。マニュアルではXFSが推奨されています(開発元の米RackSpaceでもXFSが利用されています)。

以下の例では、2台のSwift専用HDD(/dev/sdbと/dev/sdc)を用意し、以下の作業を行っています。

  • それぞれHDD全体を1つのパーティションとして、/dev/sdb1と/dev/sdc1を作成
  • 作成したパーティションをXFSでフォーマットを実行
  • /etc/fstabの編集を行い、Swift専用パーティションを/srv/node配下のsdb1およびsdc1ディレクトリにマウント

OSのインストール時にSwift専用パーティションをした場合、パーティションの作成は省略し、XFSフォーマット以降の作業を行います。

HDD全体を1つのパーティションとして、/dev/sdb1と/dev/sdc1を作成します。

[root@stor1 ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
:(省略)
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-6374, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-6374, default 6374):
Using default value 6374
Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@stor1 ~]#
[root@stor1 ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
(省略)
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-6374, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-6374, default 6374):
Using default value 6374

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@stor1 ~]#

作成したパーティションにXFS形式のフォーマットを行います。
Swiftのマニュアルでは、XFSでのフォーマット時、パフォーマンスの観点から、オプション"-i size=1024"を指定し、inodeのサイズをデフォルト値(512)より大きくすることを推奨しています。OSインストール時に、XFSフォーマットを指定したパーティションは、inodeサイズが512になっているため、フォーマット済みであっても再度フォーマットを行い、inodeサイズを大きくすることを推奨します。

[root@stor1 ~]# mkfs.xfs –f -i size=1024 /dev/sdb1
meta-data=/dev/sdb1 isize=1024 agcount=4, agsize=3199945 blks
= sectsz=512 attr=2
data = bsize=4096 blocks=12799780, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0
log =internal log bsize=4096 blocks=6249, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@stor1 ~]#
[root@stor1 ~]# mkfs.xfs -fi size=1024 /dev/sdc1
meta-data=/dev/sdc1 isize=1024 agcount=4, agsize=3199945 blks
= sectsz=512 attr=2
data = bsize=4096 blocks=12799780, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0
log =internal log bsize=4096 blocks=6249, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@stor1 ~]#

/etc/fstabの編集を行い、Swift専用パーティションを/srv/node配下のsdb1およびsdc1にマウントします。
以下の/etc/fstabのマウントオプションは、マニュアルの推奨値です。

/etc/fstab

	:(省略)
/dev/sdb1     /srv/node/sdb1 xfs noatime,nodiratime,nobarrier,logbufs=8 0 0
/dev/sdc1     /srv/node/sdc1 xfs noatime,nodiratime,nobarrier,logbufs=8 0 0

mountコマンドで/etc/fstabに追記した、マウントポイントをマウントします。マウントポイントのディレクトリが存在しない場合は作成します。また、マウント後、/srvディレクトリ配下の全てのディレクトリをユーザ、グループともにSwift専用のswiftに設定します。

[root@stor1 ~]# mkdir -p /srv/node/sdb1 /srv/node/sdc1
[root@stor1 ~]# mount -a
[root@stor1 ~]# mount
/dev/sda1 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sdb1 on /srv/node/sdb1 type xfs (rw,noatime,nodiratime,nobarrier,logbufs=8)
/dev/sdc1 on /srv/node/sdc1 type xfs (rw,noatime,nodiratime,nobarrier,logbufs=8)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
[root@stor1 ~]#
[root@stor1 ~]# chown -R swift:swift /srv/
[root@stor1 ~]# ls -al /srv/
total 16
drwxr-xr-x. 3 swift swift 4096 Feb 9 06:38 .
dr-xr-xr-x. 22 root root 4096 Feb 9 06:11 ..
drwxr-xr-x 4 swift swift 4096 Feb 9 06:38 node
[root@stor1 ~]# ls -al /srv/node/*
/srv/node/sdb1:
total 8
drwxr-xr-x 2 swift swift 4096 Feb 9 06:38 .
drwxr-xr-x 4 swift swift 4096 Feb 9 06:38 ..

/srv/node/sdc1:
total 8
drwxr-xr-x 2 swift swift 4096 Feb 9 06:38 .
drwxr-xr-x 4 swift swift 4096 Feb 9 06:38 ..
[root@stor1 ~]#

ページトップ

6. rsyncの設定と起動

設定ファイルを作成します。設定ファイルの"path ="に記述したディレクトリ配下に、プロキシサーバでリング作成時に、swift-ring-builderコマンドで指定した、

<ゾーン>-<ストレージノードのホスト名またはIPアドレス>:<ポート番号>/<DEVICE>

の<DEVICE>と同じ名前のディレクトリが存在し、また、そのディレクトリに作成したSwift専用パーティションがマウントされていなければならないことに注意が必要です。

/etc/rsyncd.conf

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

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

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

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

rsyncdを自動起動するように設定したのち、rsyncdの起動を行います。

/etc/default/rsyncに以下の設定を行います。

/etc/default/rsync

	:(省略)
RSYNC_ENABLE=true
	:(省略)

rsyncdの起動を行います。

root@stor1:~# service rsync start
* Starting rsync daemon rsync [ OK ]

root@stor1:~#

ページトップ

7. アカウント(Account)サーバの設定

アカウントサーバの設定ファイル(/etc/swift/account-server.conf)を作成します。
以下に、例を記載します。

/etc/swift/account-server.conf

[DEFAULT]
bind_ip = 192.168.0.31
workers = 2

[pipeline:main]
pipeline = account-server

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

[account-replicator]

[account-auditor]

[account-reaper]

ページトップ

8. コンテナ(Container)サーバの設定

コンテナサーバの設定ファイル(/etc/swift/container-server.conf)を作成します。
以下に、例を記載します。

/etc/swift/container-server.conf

[DEFAULT]
bind_ip = 192.168.0.31
workers = 2

[pipeline:main]
pipeline = container-server

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

[container-replicator]

[container-updater]

[container-auditor]

ページトップ

9. オブジェクト(Object)サーバの設定

オブジェクトサーバの設定ファイル(/etc/swift/object-server.conf)を作成します。
以下に、例を記載します。

/etc/swift/object-server.conf

[DEFAULT]
bind_ip = 192.168.0.31
workers = 2

[pipeline:main]
pipeline = object-server

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

[object-replicator]

[object-updater]

[object-auditor]

ページトップ

10. 各ファイルのオーナー設定

/etc/swiftおよびその配下のディレクトリとファイル全てのユーザとグループがswiftになるよう変更します。

[root@stor1 ~]# chown -R swift:swift /etc/swift/
[root@stor1 ~]#
[root@stor1 ~]# ls -al /etc/swift
total 1256
drwxr-xr-x 2 swift swift 4096 Feb 11 17:16 .
drwxr-xr-x. 63 root root 4096 Feb 20 11:44 ..
-rw-r--r-- 1 swift swift 220 Feb 11 16:08 account-server.conf
-rw-r--r-- 1 swift swift 413480 Feb 11 22:52 account.ring.gz
-rw-r--r-- 1 swift swift 207 Feb 9 07:30 container-server.conf
-rw-r--r-- 1 swift swift 413590 Feb 11 22:52 container.ring.gz
-rw-r--r-- 1 swift swift 706 Feb 11 17:16 log-processor.conf
-rw-r--r-- 1 swift swift 189 Feb 9 07:30 object-server.conf
-rw-r--r-- 1 swift swift 413315 Feb 11 22:52 object.ring.gz
-rw-r--r-- 1 swift swift 475 Feb 11 11:29 proxy-server_conf
-rw-r--r-- 1 swift swift 141 Feb 7 20:02 swift.conf
[root@stor1 ~]#

以上で、ストレージノードの設定は終了です。

ページトップ