MyException - 我的异常网
当前位置:我的异常网» 软件架构设计 » OpenStack Swift集群部署流程与容易使用

OpenStack Swift集群部署流程与容易使用

www.MyException.Cn  网友分享于:2014-08-05  浏览:0次
OpenStack Swift集群部署流程与简单使用

那么接下来就说一说Swift集群部署吧。

1. 简介

本文档详细描述了使用两台PC部署一个小型Swift集群的过程,并给出一些简单的使用实例。本文档假定如下前提条件:

  1. 使用Ubuntu操作系统。
  2. 每台机器都运行Swift的所有服务,既是Proxy Server,又是Storage Server,用户可以向任何一台机器发起存储服务请求。
  3. 采用Swift自带的TempAuth作为用户的身份与权限认证。
  4. 所有机器构成memcached集群来提供Token缓存服务。
  5. 所有操作均在root用户下进行,并使用root作为Swift的用户和组。
  6. 所有机器都运行在局域网中。
  7. 使用回环设备和XFS文件系统作为Swift底层存储。

阅读本文档前,可以先阅读文档《Swift All In One安装部署流程》,学习Swift单机部署的相关知识。

 2. 安装部署

2.1 准备环境

 

PC 1

PC 2

机器类型:

PC物理机

PC物理机

操作系统:

Ubuntu-12.04-desktop-64位

Ubuntu-12.04-desktop-64位

用户类型:

root

root

数据库:

sqlite3

sqlite3

IP地址:

192.168.3.52(局域网)

192.168.3.53(局域网)

Proxy Server

Storage Server

Auth

TempAuth

TempAuth

Token缓存:

memcached

memcached

2.2 版本说明

本文档基于:

  1. 官方文档:Swift 1.7.7-dev documentation -> Instructions for a Multiple Server Swift Installation (Ubuntu)
  2. Swift版本:1.7.6
  3. python-swiftclient版本:1.2.0

请确保安装的Swift版本与本文档中的版本相同。如有问题,请参考官网的更新文档。

2.3 安装软件环境

首先,PC1PC2安装Swift所需的软件环境(确保你的机器可以访问互联网),例如,sqlite3作为本地数据库,memcached作为Token缓存。Ubuntu-12.04已自带rsync工具,因此不用另行安装。

# apt-get install python-software-properties

# add-apt-repository ppa:swift-core/release

# apt-get update

# apt-get install curl gcc git-core memcached python-coverage python-dev python-nose python-setuptools python-simplejson python-xattr sqlite3 xfsprogs python-eventlet python-greenlet python-pastedeploy python-netifaces python-pip

# pip install mock

 2.4 安装Swift

PC1PC2执行以下操作,安装Swift服务:

1. 在主目录(root用户)下创建swift目录。然后在该下创建bin目录,用于存放我们手动创建的Swift相关脚本文件。

# mkdir ~/swift

# mkdir –p ~/swift/bin

2. 进入~/swift目录,然后从git上获取Swift和python-swiftclient源代码,下载到本地。当然也可以使用以前下载的1.7.6版本的Swift代码和1.2.0版本的python-swiftclient代码,将代码目录放至~/swift目录下即可。

# cd ~/swift

# git clone https://github.com/openstack/swift.git

# git clone https://github.com/openstack/python-swiftclient.git

3. 然后使用上述代码以开发的方式安装Swift和python-swiftclient(假设Swift的代码目录为~/swift/swift_1.7.6,python-swiftclient的代码目录为~/swift/python-swiftclient_1.2.0)。最终,两者都会被安装到python的dist-packages中。

# cd ~/swift/swift_1.7.6

# python setup.py develop

# cd ~/swift/python-swiftclient_1.2.0

# python setup.py develop

4. 安装过程中,会自动检查其所需的依赖项,并自动进行下载安装。文件~/swift/swift_1.7.6/tools/pip-requires中(内容如下所示)记录了Swift所需的依赖项,setup.py就是根据该文件来检查依赖项的。

eventlet>=0.9.15

greenlet>=0.3.1

netifaces>=0.6

pastedeploy>=1.3.3

simplejson>=2.0.9

xattr>=0.4

python-swiftclient

5. 类似的,文件~/swift/python-swiftclient_1.2.0/tools/pip-requires中(内容如下所示)记录了python-swiftclient所需的依赖项。

simplejson

6. 修改~/.bashrc文件,在文件尾部添加如下内容:(该文件包含当前用户Bash Shell的环境变量信息,用以标明Swift测试配置文件路径和启动程序路径)

export SWIFT_TEST_CONFIG_FILE=/etc/swift/test.conf

export PATH=${PATH}:~/swift/bin

7. 然后执行如下命令,以使修改生效。一旦生效,终生有效哦亲!。

# . ~/.bashrc

8. 创建/var/run/swift目录,并修改其权限。该目录是Swift运行时所需的,用于存放各个服务进程的pid文件等内容。

# mkdir -p /var/run/swift

# chown root:root /var/run/swift

9. /var/run/swift目录在操作系统关闭后会消失,因此需要在操作系统再次启动时进行创建。我们可以编辑/etc/rc.local文件,在exit 0 之前添加如下内容来实现该目录的自动创建。

mkdir -p /var/run/swift

chown root:root /var/run/swift

2.5 配置Storage Server

2.5.1 配置存储空间

Swift能够运行在任何支持扩展属性的现代文件系统之上,Swift官方推荐用户使用XFS文件系统。经过官方的验证,认为XFS文件系统能为Swift的用例提供最佳的性能,并且通过了完整的稳定性测试。

对于任何一台PC,我们可以选择使用一个分区作为存储(Using a partition for storage),也可以使用一个回环设备作为存储(Using a loopback device for storage)。由于实验环境所限,本文档使用回环设备作为存储。若希望使用独立分区作为存储,请参考官方文档。我们需要在每一台PC上创建回环设备,作为每一个Swift节点的数据存储空间。PC1PC2执行以下操作:

1. 选择一个位置创建存储文件夹。

# mkdir /srv

2. 在存储文件夹中创建XFS格式的回环设备,即/srv/swift-disk文件。

  • 第一条命令:if=/dev/zero表示空输入,即自动填充0;of=/srv/swift-disk表示输出到指定文件;bs=1024表示同时设置读入/输出的块大小(字节),即每次读入/输出1024字节的数据块;count=0表示拷贝0个块,块大小由bs指定;seek=50000000从输出文件开头跳过50000000个块后再开始复制。第一条命令的结果是创建了一个50000000*1024字节大小的文件(约50GB,未自动填充0),为创建回环设备做准备。
  • 第二条命令:.xfs表示创建的是XFS格式的回环设备;-i size=1024,当数据小于1024KB时,写入inode中,当数据大于1024KB时,写入block中,默认值为256KB;还可以考虑设置-l size=128m,可显著提升XFS文件系统删除文件、拷贝文件等操作的速度,但需要大内存的支持,默认值的是10m。第二条命令的结果是在上述文件的基础上创建了XFS回环设备。

# dd if=/dev/zero of=/srv/swift-disk bs=1024 count=0 seek=50000000

# mkfs.xfs -f -i size=1024 /srv/swift-disk

3. 编辑/etc/fstab文件,在文件末尾添加如下内容:

/srv/swift-disk /srv/node/sdb1 xfs loop,noatime,nodiratime,nobarrier,logbufs=8 0 0

4. 创建回环设备挂载点文件夹,并执行挂载。

# mkdir -p /srv/node/sdb1

# mount /srv/node/sdb1

5. 改变挂载点文件夹的权限。

# chown -R root:root /srv/node

2.5.2 配置Swift

PC1PC2创建Swift的配置文件目录。

# mkdir -p /etc/swift

# chown -R root:root /etc/swift/

在PC1中创建配置文件/etc/swift/swift.conf,编辑其内容(如下所示),然后复制到PC2中的/etc/swift目录下。该文件记录了Swift使用的哈希后缀,用于一致性哈希计算。集群中的每个节点都必须保存该文件,并且完全相同。

[swift-hash]

# random unique string that can never change (DO NOT LOSE)

swift_hash_path_suffix = jtangfs

2.5.3 配置rsync

rsync是类Unix系统下的数据镜像备份工具。Swift对象副本的复制更新是基于推送模式的。对象的复制更新使用rsync将文件同步到对等节点,Account和Container的复制更新则通过HTTP或rsync来推送数据库文件上丢失的记录。PC1PC2创建rsync的配置文件/etc/rsyncd.conf,添加如下内容:(下面以PC1为例,其中的addressPC1rsync服务端监听的IP地址,等待客户端推送复制更新,这里同样推荐设置为内网地址)

uid = root

gid = root

log file = /var/log/rsyncd.log

pid file = /var/run/rsyncd.pid

address = 192.168.3.52

 

[account]

max connections = 2

path = /srv/node/

read only = false

lock file = /var/lock/account.lock

 

[container]

max connections = 2

path = /srv/node/

read only = false

lock file = /var/lock/container.lock

 

[object]

max connections = 2

path = /srv/node/

read only = false

lock file = /var/lock/object.lock

为了使rsync能够开机启动,需要PC1PC2编辑配置文件/etc/default/rsync,将参数RSYNC_ENABLE设置为true,然后启动rsync服务。

# perl -pi -e 's/RSYNC_ENABLE=false/RSYNC_ENABLE=true/' /etc/default/rsync

# service rsync restart

2.5.4 配置存储服务(account, container, object)

PC1PC2执行以下操作,以完成每个节点上的account、container和object存储服务的配置。下面以PC1上的操作为例。

1. 配置account存储服务,创建配置文件/etc/swift/account-server.conf,并添加以下内容:(其中,devices参数表示Parent directory of where devices are mounted,默认值为/srv/node;log_facility表示日志标签,与独立日志的配置有关)

[DEFAULT]

devices = /srv/node

mount_check = false

bind_ip = 192.168.3.52

bind_port = 6002

workers = 4

user = root

log_facility = LOG_LOCAL4

 

[pipeline:main]

pipeline = account-server

 

[app:account-server]

use = egg:swift#account

 

[account-replicator]

 

[account-auditor]

 

[account-reaper]

2. 配置container存储服务,创建配置文件/etc/swift/container-server.conf,并添加以下内容:

[DEFAULT]

devices = /srv/node

mount_check = false

bind_ip = 192.168.3.52

bind_port = 6001

workers = 4

user = root

log_facility = LOG_LOCAL3

 

[pipeline:main]

pipeline = container-server

 

[app:container-server]

use = egg:swift#container

 

[container-replicator]

 

[container-updater]

 

[container-auditor]

 

[container-sync]

3. 配置object存储服务,创建配置文件/etc/swift/object-server.conf,并添加以下内容:

[DEFAULT]

devices = /srv/node

mount_check = false

bind_ip = 192.168.3.52

bind_port = 6000

workers = 4

user = root

log_facility = LOG_LOCAL2

 

[pipeline:main]

pipeline = object-server

 

[app:object-server]

use = egg:swift#object

 

[object-replicator]

 

[object-updater]

 

[object-auditor]

2.5.5 配置独立日志(可选)

Swift默认将日志信息输出到文件/var/log/syslog中。如果要按照个人需求设置rsyslog,生成特有的Swift日志文件,则需要PC1PC2执行以下操作,完成独立日志的配置。

1. 创建日志配置文件/etc/rsyslog.d/10-swift.conf,编辑内容如下:(增加account、container、object的日志配置信息)

# Uncomment the following to have a log containing all logs together

#local1,local2,local3,local4,local5.*   /var/log/swift/all.log

 

# Uncomment the following to have hourly proxy logs for stats processing

$template HourlyProxyLog,"/var/log/swift/hourly/%$YEAR%%$MONTH%%$DAY%%$HOUR%"

#local1.*;local1.!notice ?HourlyProxyLog

 

local2.*;local2.!notice /var/log/swift/object.log

local2.notice           /var/log/swift/ object.error

local2.*                ~

 

local3.*;local3.!notice /var/log/swift/container.log

local3.notice           /var/log/swift/ container.error

local3.*                ~

 

local4.*;local4.!notice /var/log/swift/account.log

local4.notice           /var/log/swift/ account.error

local4.*                ~

2. 编辑文件/etc/rsyslog.conf,更改参数$PrivDropToGroup为adm。

$PrivDropToGroup adm

3. 创建/var/log/swift目录,用于存放独立日志。此外,上面的10-swift.conf 文件中设置了输出Swift Proxy Server每小时的stats日志信息,于是也要创建/var/log/swift/hourly目录。

# mkdir -p /var/log/swift/hourly

4. 更改Swift独立日志目录的权限。

# chown -R syslog.adm /var/log/swift

# chmod -R g+w /var/log/swift

5. 重启rsyslog服务

# service rsyslog restart

2.6 配置Proxy Server

2.6.1 配置memcached

Proxy Server使用memcached来缓存用户的Token。我们可根据具体需求修改memcached配置文件/etc/memcached.conf。例如,考虑到安全因素,只允许memcached在局域网内被访问,则应将其监听的IP地址修改为局域网IP地址(默认为127.0.0.1,内外网通吃)。推荐配置为内部的、非公网的IP地址。PC1上的修改为192.168.3.52PC2上的修改为192.168.3.53,并在完成后重启memcached服务。下面以PC1上执行的命令为例:

# perl -pi -e "s/-l 127.0.0.1/-l 192.168.3.52/" /etc/memcached.conf

# service memcached restart

2.6.2 配置Swift

由于每一台PC都运行Swift的所有服务,既作为Proxy Server,又作为Storage Server,上面在配置Storage Server时已经完成了Swift的配置,此处可省略。但是,如果Proxy Server和Storage Server是分离的,那么就需要将上面的swift.conf文件复制到Proxy Server中的/etc/swift目录下。

2.6.3 配置proxy-server

PC1PC2创建proxy-server配置文件/etc/swift/proxy-server.conf,添加以下内容:

[DEFAULT]

bind_port = 8080

user = root

workers = 8

log_facility = LOG_LOCAL1

 

[pipeline:main]

pipeline = healthcheck cache tempauth proxy-logging proxy-server

 

[app:proxy-server]

use = egg:swift#proxy

allow_account_management = true

account_autocreate = true

 

[filter:tempauth]

use = egg:swift#tempauth

user_admin_admin = admin .admin .reseller_admin

user_test_tester = testing .admin

user_test2_tester2 = testing2 .admin

user_test_tester3 = testing3

reseller_prefix = AUTH

# account和token的命名前缀,注意此处不可以加“_”。

# 例如X-Storage-Url为http://192.168.3.52:8080/v1/AUTH_test

# 例如X-Auth-Token为AUTH_tk440e9bd9a9cb46d6be07a5b6a585f7d1

token_life = 86400

# token的有效期,单位:秒。

 

[filter:healthcheck]

use = egg:swift#healthcheck

 

[filter:cache]

use = egg:swift#memcache

memcache_servers = 192.168.3.52:11211,192.168.3.53:11211

 

[filter:proxy-logging]

use = egg:swift#proxy_logging

配置参数中:memcache_servers指定memcached地址,可配置为集群,以“,”分隔;workers为工作线程数,推荐配置为CPU核心数的2-4倍;“user_admin_admin = admin .admin .reseller_admin”中,user_为前缀,第一个“admin”为账户名,第二个“admin”为用户名,第三个“admin为”密码,“.admin”为角色信息,“.reseller_admin”表示超级管理员角色(可操作任何账户)。

“user_admin_admin = admin .admin .reseller_admin”后面还可以增加一项<storage-url>,显示地指定Swift为该用户提供的存储服务入口(PC1为admin用户提供的默认值是http://192.168.3.52:8080/v1/AUTH_admin)。admin用户通过认证后,Swift会把Token和该<storage-url>返回给用户,此后admin用户可以使用该<storage-url>访问Swift来请求存储服务。特别值得说明的是,如果在Proxy Server前面增加了负载均衡器(如nginx),那么该<storage-url>应该指向负载均衡器,使得用户在通过认证后,向负载均衡器发起存储请求,再由负载均衡器将请求均衡地分发给Proxy Server集群。此时的<storage-url>形如http://<LOAD_BALANCER_HOSTNAME>:<PORT>/v1/AUTH_admin。

Swift同时支持http和https协议,本文档中我们使用http协议,若想使用https协议,则需要进行ssl的配置,具体操作请查看参考链接中的内容。

2.6.4 配置独立日志(可选)

上文中已经做了说明,此处可用于设置Proxy Server的独立日志,需要PC1PC2执行以下操作,完成其配置。

1. 编辑日志配置文件/etc/rsyslog.d/10-swift.conf,增加proxy的日志配置信息:

# Uncomment the following to have a log containing all logs together

#local1,local2,local3,local4,local5.*   /var/log/swift/all.log

 

# Uncomment the following to have hourly proxy logs for stats processing

$template HourlyProxyLog,"/var/log/swift/hourly/%$YEAR%%$MONTH%%$DAY%%$HOUR%"

#local1.*;local1.!notice ?HourlyProxyLog

 

local1.*;local1.!notice /var/log/swift/proxy.log

local1.notice           /var/log/swift/ proxy.error

local1.*                ~

 

local2.*;local2.!notice /var/log/swift/object.log

local2.notice           /var/log/swift/ object.error

local2.*                ~

 

local3.*;local3.!notice /var/log/swift/container.log

local3.notice           /var/log/swift/ container.error

local3.*                ~

 

local4.*;local4.!notice /var/log/swift/account.log

local4.notice           /var/log/swift/ account.error

local4.*                ~

2. 重启rsyslog服务

# service rsyslog restart

2.6.5 创建Ring

      Ring共有三种,分别为Account Ring、Container Ring、Object Ring。Ring需要在整个集群中保持完全相同,因此需要在某一台PC上创建Ring文件,然后复制到其他PC上。我们将在PC1上进行Ring的创建,然后复制到PC2

      首先,使用如下命令创建三个Ring。其中,18表示Ring的分区数为218;2表示对象副本数为2;1表示分区数据的迁移时间为1小时(这个解释有待证实)。

# cd /etc/swift

# swift-ring-builder account.builder create 18 2 1

# swift-ring-builder container.builder create 18 2 1

# swift-ring-builder object.builder create 18 2 1

然后向三个Ring中添加存储设备。其中z1和z2表示zone1和zone2;sdb1为Swift使用的存储空间,即上文挂在的回环设备;100代表设备的权重。

# cd /etc/swift

# swift-ring-builder account.builder add z1-192.168.3.52:6002/sdb1 100

# swift-ring-builder container.builder add z1-192.168.3.52:6001/sdb1 100

# swift-ring-builder object.builder add z1-192.168.3.52:6000/sdb1 100

 

# swift-ring-builder account.builder add z2-192.168.3.53:6002/sdb1 100

# swift-ring-builder container.builder add z2-192.168.3.53:6001/sdb1 100

# swift-ring-builder object.builder add z2-192.168.3.53:6000/sdb1 100

Ring文件创建完毕后,可以通过以下命令来查看刚才添加的信息,以验证是否输入正确。若发现错误,以Account Ring为例,可以使用swift-ring-builder account.builder的删除方法删除已添加的设备,然后重新添加。

# cd /etc/swift

# swift-ring-builder account.builder

# swift-ring-builder container.builder

# swift-ring-builder object.builder

完成设备的添加后,我们还需要创建Ring的最后一步,即平衡环。这个过程需要消耗一些时间。成功之后,会在当前目录生成account.ring.gz、container.ring.gz和object.ring.gz三个文件,这三个文件就是所有节点(包括Proxy Server和Storage Server)要用到的Ring文件。我们需要将这三个文件拷贝到PC2中的/etc/swift目录下

# cd /etc/swift

# swift-ring-builder account.builder rebalance

# swift-ring-builder container.builder rebalance

# swift-ring-builder object.builder rebalance

由于我们统一采用root用户部署,所以要确保所有节点上的/etc/swift目录都属于root用户。

# chown -R root:root /etc/swift

2.7 创建Swift执行脚本

为便于操作,我们可以PC1PC2创建以下Swift脚本。

1. 创建~/swift/bin/remakerings脚本文件,添加以下内容,即可一键完成Ring的重新创建,当然具体内容需要根据实际环境进行修改。

#!/bin/bash

 

cd /etc/swift

 

rm -f *.builder *.ring.gz backups/*.builder backups/*.ring.gz

 

swift-ring-builder account.builder create 18 2 1

swift-ring-builder container.builder create 18 2 1

swift-ring-builder object.builder create 18 2 1

 

swift-ring-builder account.builder add z1-192.168.3.52:6002/sdb1 100

swift-ring-builder container.builder add z1-192.168.3.52:6001/sdb1 100

swift-ring-builder object.builder add z1-192.168.3.52:6000/sdb1 100

 

swift-ring-builder account.builder add z2-192.168.3.53:6002/sdb1 100

swift-ring-builder container.builder add z2-192.168.3.53:6001/sdb1 100

swift-ring-builder object.builder add z2-192.168.3.53:6000/sdb1 100

 

swift-ring-builder account.builder rebalance

swift-ring-builder container.builder rebalance

swift-ring-builder object.builder rebalance

2. 创建~/swift/bin/resetswift脚本文件,添加以下内容,即可一键清空Swift的对象数据和日志,完成重置。注意:如果使用的是独立分区存储,则需要另行处理,例如将/srv/swift-disk替换为/dev/sdb1等;如果没有使用rsyslog作为独立日志,则需要去掉“find /var/log/swift... ”和“sudo service rsyslog restart”这两行。

#!/bin/bash

 

swift-init all stop

find /var/log/swift -type f -exec rm -f {} \;

sudo umount /srv/node/sdb1

sudo mkfs.xfs -f -i size=1024 /srv/swift-disk

sudo mount /srv/node/sdb1

sudo chown root:root /srv/node/sdb1

sudo rm -f /var/log/debug /var/log/messages /var/log/rsyncd.log /var/log/syslog

sudo service rsyslog restart

sudo service rsync restart

sudo service memcached restart

3. 创建~/swift/bin/startmain脚本文件,添加以下内容,即可一键启动Swift的基本服务,包括proxy-server、account-server、container-server和object-server。

#!/bin/bash

 

swift-init main start

4. 创建~/swift/bin/stopmain脚本文件,添加以下内容,即可一键关闭Swift的基本服务,包括proxy-server、account-server、container-server和object-server。

#!/bin/bash

 

swift-init main stop

5. 创建~/swift/bin/startall脚本文件,添加以下内容,即可一键启动Swift的所有服务,包括proxy-server、account-server、account-replicator 、account-auditor、container-server、container-replicator、container-updater、container-auditor、object-server、object-replicator、object-updater、object-auditor。

#!/bin/bash

 

swift-init proxy start

swift-init account-server start

swift-init account-replicator start

swift-init account-auditor start

swift-init container-server start

swift-init container-replicator start

swift-init container-updater start

swift-init container-auditor start

swift-init object-server start

swift-init object-replicator start

swift-init object-updater start

swift-init object-auditor start

6. 创建~/swift/bin/stopall脚本文件,添加以下内容,即可一键关闭Swift的所有服务,包括proxy-server、account-server、account-replicator 、account-auditor、container-server、container-replicator、container-updater、container-auditor、object-server、object-replicator、object-updater、object-auditor。

#!/bin/bash

 

swift-init proxy stop

swift-init account-server stop

swift-init account-replicator stop

swift-init account-auditor stop

swift-init container-server stop

swift-init container-replicator stop

swift-init container-updater stop

swift-init container-auditor stop

swift-init object-server stop

swift-init object-replicator stop

swift-init object-updater stop

swift-init object-auditor stop

7. 完成脚本创建后,需要更改脚本权限,使之能够执行。

# chmod +x ~/swift/bin/*

2.8 启动与关闭Swift服务

由于我们是以开发的方式安装Swift的,所以能够执行功能单元测试。若提示“Unable to read test config /etc/swift/test.conf – file not found”,可不必理会,或手动将配置文件~/swift/swift_1.7.6/test/sample.conf复制过去。

# cd ~/swift/swift_1.7.6

# ./.unittests

我们需要PC1PC2启动Proxy Server和Storage Server的服务。为了便于操作,我们直接使用上文中创建的脚本文件(在~/swift/bin目录下)运行Swift。可以使用~/swift/bin/startmain脚本文件启动Swift的基本服务;或使用~/swift/bin/startall脚本文件键启动Swift的所有服务。若提示“Unable to increase file descriptor limit.  Running as non-root?”警告为正常现象,不必理会。

# startmain

# startall

同样的,我们可以使用~/swift/bin/stopmain脚本文件关闭Swift的基本服务;使用~/swift/bin/stopall脚本文件键关闭Swift的所有服务。

# stopmain

# stopall

2.9 查看Swift帮助信息

完成安装部署后,可以使用swift --help命令查看Swift帮助信息。

# swift --help

Usage: swift <command> [options] [args]

 

Commands:

  stat [container] [object]

    Displays information for the account, container, or object depending on the

    args given (if any).

  list [options] [container]

    Lists the containers for the account or the objects for a container. -p or

    --prefix is an option that will only list items beginning with that prefix.

    -d or --delimiter is option (for container listings only) that will roll up

    items with the given delimiter (see Cloud Files general documentation for

    what this means).

  upload [options] container file_or_directory [file_or_directory] [...]

    Uploads to the given container the files and directories specified by the

    remaining args. -c or --changed is an option that will only upload files

    that have changed since the last upload. -S <size> or --segment-size <size>

    and --leave-segments are options as well (see --help for more).

  post [options] [container] [object]

    Updates meta information for the account, container, or object depending on

    the args given. If the container is not found, it will be created

    automatically; but this is not true for accounts and objects. Containers

    also allow the -r (or --read-acl) and -w (or --write-acl) options. The -m

    or --meta option is allowed on all and used to define the user meta data

    items to set in the form Name:Value. This option can be repeated. Example:

    post -m Color:Blue -m Size:Large

  download --all OR download container [options] [object] [object] ...

    Downloads everything in the account (with --all), or everything in a

    container, or a list of objects depending on the args given. For a single

    object download, you may use the -o [--output] <filename> option to

    redirect the output to a specific file or if "-" then just redirect to

    stdout.

  delete [options] --all OR delete container [options] [object] [object] ...

    Deletes everything in the account (with --all), or everything in a

    container, or a list of objects depending on the args given. Segments of

    manifest objects will be deleted as well, unless you specify the

    --leave-segments option.

 

Example:

  swift -A https://auth.api.rackspacecloud.com/v1.0 -U user -K key stat

 

Options:

  --version             show program's version number and exit

  -h, --help            show this help message and exit

  -s, --snet            Use SERVICENET internal network

  -v, --verbose         Print more info

  -q, --quiet           Suppress status output

  -A AUTH, --auth=AUTH  URL for obtaining an auth token

  -V AUTH_VERSION, --auth-version=AUTH_VERSION

                        Specify a version for authentication. Defaults to 1.0.

  -U USER, --user=USER  User name for obtaining an auth token.

  -K KEY, --key=KEY     Key for obtaining an auth token.

  --os-username=<auth-user-name>

                        Openstack username. Defaults to env[OS_USERNAME].

  --os-password=<auth-password>

                        Openstack password. Defaults to env[OS_PASSWORD].

  --os-tenant-id=<auth-tenant-id>

                        OpenStack tenant ID. Defaults to env[OS_TENANT_ID]

  --os-tenant-name=<auth-tenant-name>

                        Openstack tenant name. Defaults to

                        env[OS_TENANT_NAME].

  --os-auth-url=<auth-url>

                        Openstack auth URL. Defaults to env[OS_AUTH_URL].

  --os-auth-token=<auth-token>

                        Openstack token. Defaults to env[OS_AUTH_TOKEN]

  --os-storage-url=<storage-url>

                        Openstack storage URL. Defaults to env[OS_STORAGE_URL]

  --os-region-name=<region-name>

                        Openstack region name. Defaults to env[OS_REGION_NAME]

  --os-service-type=<service-type>

                        Openstack Service type. Defaults to

                        env[OS_SERVICE_TYPE]

  --os-endpoint-type=<endpoint-type>

                        Openstack Endpoint type. Defaults to

                        env[OS_ENDPOINT_TYPE]

  --insecure            Allow swiftclient to access insecure keystone server.

                        The keystone's certificate will not be verified.

3. 使用实例

启动PC1和PC2上的Swift服务后,我们交替地在PC1和PC2上执行操作,并随机使用两者提供的storage-url,如果用户验证和存储服务全部正确,则表明Swift集群部署成功。

3.1 用curl测试

我们先使用curl测试几个简单的命令。

1. 在PC1上访问192.168.3.52,进行tester用户验证,获取Token和storage-url。

# curl -k -v -H 'X-Storage-User: test:tester' -H 'X-Storage-Pass: testing' http://192.168.3.52:8080/auth/v1.0

* About to connect() to 192.168.3.52 port 8080 (#0)

*   Trying 192.168.3.52... connected

> GET /auth/v1.0 HTTP/1.1

> User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3

> Host: 192.168.3.52:8080

> Accept: */*

> X-Storage-User: test:tester

> X-Storage-Pass: testing

>

< HTTP/1.1 200 OK

< X-Storage-Url: http://192.168.3.52:8080/v1/AUTH_test

< X-Auth-Token: AUTH_tk440e9bd9a9cb46d6be07a5b6a585f7d1

< Content-Type: text/html; charset=UTF-8

< X-Storage-Token: AUTH_tk440e9bd9a9cb46d6be07a5b6a585f7d1

< Content-Length: 0

< Date: Wed, 20 Mar 2013 06:13:15 GMT

<

* Connection #0 to host 192.168.3.52 left intact

* Closing connection #0

2. 在PC1上访问192.168.3.52,查看test账户的状态信息。

# curl -k -v -H 'X-Auth-Token: AUTH_tk440e9bd9a9cb46d6be07a5b6a585f7d1' http://192.168.3.52:8080/v1/AUTH_test

* About to connect() to 192.168.3.52 port 8080 (#0)

*   Trying 192.168.3.52... connected

> GET /v1/AUTH_test HTTP/1.1

> User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3

> Host: 192.168.3.52:8080

> Accept: */*

> X-Auth-Token: AUTH_tk440e9bd9a9cb46d6be07a5b6a585f7d1

>

< HTTP/1.1 204 No Content

< Content-Length: 0

< Accept-Ranges: bytes

< X-Timestamp: 1363760036.52552

< X-Account-Bytes-Used: 0

< X-Account-Container-Count: 0

< Content-Type: text/html; charset=UTF-8

< X-Account-Object-Count: 0

< Date: Wed, 20 Mar 2013 06:13:56 GMT

<

* Connection #0 to host 192.168.3.52 left intact

* Closing connection #0

3. 在PC1上访问192.168.3.53,查看test账户的状态信息。

# curl -k -v -H 'X-Auth-Token: AUTH_tk440e9bd9a9cb46d6be07a5b6a585f7d1' http://192.168.3.53:8080/v1/AUTH_test

* About to connect() to 192.168.3.53 port 8080 (#0)

*   Trying 192.168.3.53... connected

> GET /v1/AUTH_test HTTP/1.1

> User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3

> Host: 192.168.3.53:8080

> Accept: */*

> X-Auth-Token: AUTH_tk440e9bd9a9cb46d6be07a5b6a585f7d1

>

< HTTP/1.1 204 No Content

< Content-Length: 0

< Accept-Ranges: bytes

< X-Timestamp: 1363760036.52552

< X-Account-Bytes-Used: 0

< X-Account-Container-Count: 0

< Content-Type: text/html; charset=UTF-8

< X-Account-Object-Count: 0

< Date: Wed, 20 Mar 2013 06:15:19 GMT

<

* Connection #0 to host 192.168.3.53 left intact

* Closing connection #0

4. 在PC2上访问192.168.3.52,查看test账户的状态信息。

# curl -k -v -H 'X-Auth-Token: AUTH_tk440e9bd9a9cb46d6be07a5b6a585f7d1' http://192.168.3.52:8080/v1/AUTH_test

* About to connect() to 192.168.3.52 port 8080 (#0)

*   Trying 192.168.3.52... connected

> GET /v1/AUTH_test HTTP/1.1

> User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3

> Host: 192.168.3.52:8080

> Accept: */*

> X-Auth-Token: AUTH_tk440e9bd9a9cb46d6be07a5b6a585f7d1

>

< HTTP/1.1 204 No Content

< Content-Length: 0

< Accept-Ranges: bytes

< X-Timestamp: 1363760036.52552

< X-Account-Bytes-Used: 0

< X-Account-Container-Count: 0

< Content-Type: text/html; charset=UTF-8

< X-Account-Object-Count: 0

< Date: Wed, 20 Mar 2013 06:17:01 GMT

<

* Connection #0 to host 192.168.3.52 left intact

* Closing connection #0

  上述测试一切正常,表明curl测试通过。

3.2 用Swift客户端测试

接着,我们使用Swift客户端进行测试。

1. 在PC1上访问192.168.3.53,查看test账户的状态信息。

# swift -A http://192.168.3.53:8080/auth/v1.0 -U test:tester -K testing stat

   Account: AUTH_test

Containers: 0

   Objects: 0

     Bytes: 0

Accept-Ranges: bytes

X-Timestamp: 1363760036.52552

Content-Type: text/plain; charset=utf-8

 

2. 在PC1上访问192.168.3.52,在test账户下创建名为myfiles的container。

# swift -A http://192.168.3.52:8080/auth/v1.0 -U test:tester -K testing post myfiles

 

 

3. 在PC1上访问192.168.3.53,显示test账户下的container列表。

# swift -A http://192.168.3.53:8080/auth/v1.0 -U test:tester -K testing list

myfiles

 

4. 在PC2上访问192.168.3.52,显示test账户下的container列表。

# swift -A http://192.168.3.52:8080/auth/v1.0 -U test:tester -K testing list

myfiles

 

5. 在PC2上访问192.168.3.53,在刚才创建的container下上传文件。上传完成后,Swift服务端会以完整路径作为文件名。

# swift -A http://192.168.3.53:8080/auth/v1.0 -U test:tester -K testing upload myfiles ~/file

root/file

 

6. 在PC1上访问192.168.3.52,显示刚才创建的container下的文件列表。

# swift -A http://192.168.3.52:8080/auth/v1.0 -U test:tester -K testing list myfiles

root/file

 

7. 在PC1上访问192.168.3.52,下载刚才上传的文件。给定的文件名必须是其完整路径,例如上传的文件为~/file,服务端记录的文件名为root/file,于是下载时也要给文件名root/file,而不能是file。最终,文件会被下载到~/root目录下,成为~/root/file。可以使用额外的命令参数来决定下载位置,详情参考swift --help。

# swift -A http://192.168.3.52:8080/auth/v1.0 -U test:tester -K testing download myfiles root/file

root/file [headers 0.041s, total 0.065s, 0.000s MB/s]

  上述测试一切正常,表明Swift客户端测试通过。

4. 参考链接

4.1 官方连接

  • Instructions for a Multiple Server Swift Installation (Ubuntu)

http://docs.openstack.org/developer/swift/howto_installmultinode.html

  • SAIO - Swift All In One

http://docs.openstack.org/developer/swift/development_saio.html

  • Swift 1.8.0-dev documentation -> Deployment Guide

http://docs.openstack.org/developer/swift/deployment_guide.html

4.2 非官方链接

  • OpenStack Hands on lab 2: Swift安装并使用Keystone做身份验证

http://liangbo.me/index.php/2012/03/29/openstack-hands-on-lab-2-swift-installation-with-keystone/

  • OpenStack Swift Install Multi Node

http://blog.csdn.net/zzcase/article/details/6578520

  • Swift部署和动态扩展

http://www.kissthink.com/archive/4175.html

  • Swift简介(实为深入讲解)

http://www.cnblogs.com/Bob-FD/archive/2012/07/25/2608413.html

  • 在Ubuntu上安装OpenStack Swift组件

http://blog.csdn.net/zoushidexing/article/details/7860226

文章评论

代码女神横空出世
代码女神横空出世
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
编程语言是女人
编程语言是女人
 程序员的样子
程序员的样子
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
程序员必看的十大电影
程序员必看的十大电影
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
10个调试和排错的小建议
10个调试和排错的小建议
程序员的鄙视链
程序员的鄙视链
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
总结2014中国互联网十大段子
总结2014中国互联网十大段子
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
我的丈夫是个程序员
我的丈夫是个程序员
那些争议最大的编程观点
那些争议最大的编程观点
每天工作4小时的程序员
每天工作4小时的程序员
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
为什么程序员都是夜猫子
为什么程序员都是夜猫子
一个程序员的时间管理
一个程序员的时间管理
鲜为人知的编程真相
鲜为人知的编程真相
中美印日四国程序员比较
中美印日四国程序员比较
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
Java程序员必看电影
Java程序员必看电影
程序员都该阅读的书
程序员都该阅读的书
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
漫画:程序员的工作
漫画:程序员的工作
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
如何成为一名黑客
如何成为一名黑客
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
旅行,写作,编程
旅行,写作,编程
程序员应该关注的一些事儿
程序员应该关注的一些事儿
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有