参考官方文档,及一些国内同行的博客
我的装系统是分了个lvm,/dev/sda7
注意:2.1~2.5必须以root身份进行操作
2.1、安装依赖包
apt-get install python-software-properties
add-apt-repository ppa:swift-core/ppa
apt-get update
apt-get install curl gcc bzr memcached python-configobj python-coverage python-dev python-nose python-setuptools python-simplejson python-xattr sqlite3 xfsprogs pythonwebob python-eventlet python-greenlet python-pastedeploy python-netifaces
2.2、创建swift用户
创建swift用户
sudo useradd -mk /home/swift -s /bin/bash swift
sudo password swift
编辑/etc/sudoers,添加以下一行
# User alias specification
swift ALL=(ALL) NOPASSWD:ALL
Using a partition for storage
If you are going to use a separate partition for Swift data, be sure to add another device when creating the VM, and follow these instructions.
mkfs.xfs -i size=1024 /dev/sda7
Edit /etc/fstab and add
/dev/sda7 /mnt/sda7 xfs noatime,nodiratime,nobarrier,logbufs=8 0 0
mkdir /mnt/sda7
mount /mnt/sda7
mkdir /mnt/sda7/1 /mnt/sda7/2 /mnt/sda7/3 /mnt/sda7/4
chown swift:swift /mnt/sda7/*
mkdir /srv
for x in {1..4}; do ln -s /mnt/sda7/$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 swift:swift /etc/swift /srv/[1-4]/ /var/run/swift
– Make sure to include the trailing slash after /srv/[1-4]/
Add to /etc/rc.local (before the exit 0):
mkdir -p /var/cache/swift /var/cache/swift2 /var/cache/swift3 /var/cache/swift4
chown swift:swift /var/cache/swift*
mkdir -p /var/run/swift
chown swift:swift /var/run/swift
设置rsync
创建文件:/etc/rsyncd.conf:
uid = swift
gid = swift
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
编辑/etc/default/rsync:
RSYNC_ENABLE设置为true
重启服务:
service rsync restart
2.5、日志设置(可选)
编辑/etc/rsyslog.d/10-swift.conf:
# 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/storage1.log
local2.notice /var/log/swift/storage1.error
local2.* ~
local3.*;local3.!notice /var/log/swift/storage2.log
local3.notice /var/log/swift/storage2.error
local3.* ~
local4.*;local4.!notice /var/log/swift/storage3.log
local4.notice /var/log/swift/storage3.error
local4.* ~
local5.*;local5.!notice /var/log/swift/storage4.log
local5.notice /var/log/swift/storage4.error
local5.* ~
修改/etc/rsyslog.conf:
$PrivDropToGroup adm
mkdir -p /var/log/swift/hourly
chown -R syslog.adm /var/log/swift
service rsyslog restart
注意:2.6~2.9必须以swift身份进行操作
2.6、获取代码和设置测试环境
su - swift
mkdir ~/bin
Check out the swift repo with
git clone https://github.com/openstack/swift.git
Build a development installation of swift, for example:
cd ~/swift; sudo python setup.py develop
Check out the python-swiftclient repo with
cd ~
git clone https://github.com/openstack/python-swiftclient.git
Build a development installation of python-swiftclient, for example:
cd ~/python-swiftclient; sudo python setup.py develop
Edit ~/.bashrc and add to the end:
export SWIFT_TEST_CONFIG_FILE=/etc/swift/test.conf
export PATH=${PATH}:~/bin
. ~/.bashrc
编辑~/.bashrc,在最后加入:
export SWIFT_TEST_CONFIG_FILE=/etc/swift/func_test.conf
export PATH=${PATH}:~/bin
chmod a+x .bashrc
. ~/.bashrc
2.7、配置各个节点(以下这些文件不存在的话,就需要自己创建)
1)/etc/swift/proxy-server.conf
[DEFAULT]
bind_port = 8080
user = swift
log_facility = LOG_LOCAL1
[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
# Highly recommended to change this.
super_admin_key = swauthkey
[filter:healthcheck]
use = egg:swift#healthcheck
[filter:cache]
use = egg:swift#memcache
2)/etc/swift/swift.conf
[swift-hash]
# random unique string that can never change (DO NOT LOSE)
swift_hash_path_suffix = 91d23be389715dab //可以是任意的单字符串
3)/etc/swift/account-server/1.conf
[DEFAULT]
devices = /srv/1/node
mount_check = false
bind_port = 6012
user = swift
log_facility = LOG_LOCAL2
[pipeline:main]
pipeline = account-server
[app:account-server]
use = egg:swift#account
[account-replicator]
vm_test_mode = yes
[account-auditor]
[account-reaper]
4)/etc/swift/account-server/2.conf
[DEFAULT]
devices = /srv/2/node
mount_check = false
bind_port = 6022
user = swift
log_facility = LOG_LOCAL3
[pipeline:main]
pipeline = account-server
[app:account-server]
use = egg:swift#account
[account-replicator]
vm_test_mode = yes
[account-auditor]
[account-reaper]
5)/etc/swift/account-server/3.conf
[DEFAULT]
devices = /srv/3/node
mount_check = false
bind_port = 6032
user = swift
log_facility = LOG_LOCAL4
[pipeline:main]
pipeline = account-server
[app:account-server]
use = egg:swift#account
[account-replicator]
vm_test_mode = yes
[account-auditor]
[account-reaper]
6)/etc/swift/account-server/4.conf
[DEFAULT]
devices = /srv/4/node
mount_check = false
bind_port = 6042
user = swift
log_facility = LOG_LOCAL5
[pipeline:main]
pipeline = account-server
[app:account-server]
use = egg:swift#account
[account-replicator]
vm_test_mode = yes
[account-auditor]
[account-reaper]
7)/etc/swift/container-server/1.conf
[DEFAULT]
devices = /srv/1/node
mount_check = false
bind_port = 6011
user = swift
log_facility = LOG_LOCAL2
[pipeline:main]
pipeline = container-server
[app:container-server]
use = egg:swift#container
[container-replicator]
vm_test_mode = yes
[container-updater]
[container-auditor]
[container-sync]
8)/etc/swift/container-server/2.conf
[DEFAULT]
devices = /srv/2/node
mount_check = false
bind_port = 6021
user = swift
log_facility = LOG_LOCAL3
[pipeline:main]
pipeline = container-server
[app:container-server]
use = egg:swift#container
[container-replicator]
vm_test_mode = yes
[container-updater]
[container-auditor]
[container-sync]
9)/etc/swift/container-server/3.conf
[DEFAULT]
devices = /srv/3/node
mount_check = false
bind_port = 6031
user = swift
log_facility = LOG_LOCAL4
[pipeline:main]
pipeline = container-server
[app:container-server]
use = egg:swift#container
[container-replicator]
vm_test_mode = yes
[container-updater]
[container-auditor]
[container-sync]
10)/etc/swift/container-server/4.conf
[DEFAULT]
devices = /srv/4/node
mount_check = false
bind_port = 6041
user = swift
log_facility = LOG_LOCAL5
[pipeline:main]
pipeline = container-server
[app:container-server]
use = egg:swift#container
[container-replicator]
vm_test_mode = yes
[container-updater]
[container-auditor]
[container-sync]
11)/etc/swift/object-server/1.conf
[DEFAULT]
devices = /srv/1/node
mount_check = false
bind_port = 6010
user = swift
log_facility = LOG_LOCAL2
[pipeline:main]
pipeline = object-server
[app:object-server]
use = egg:swift#object
[object-replicator]
vm_test_mode = yes
[object-updater]
[object-auditor]
12)/etc/swift/object-server/2.conf
[DEFAULT]
devices = /srv/2/node
mount_check = false
bind_port = 6020
user = swift
log_facility = LOG_LOCAL3
[pipeline:main]
pipeline = object-server
[app:object-server]
use = egg:swift#object
[object-replicator]
vm_test_mode = yes
[object-updater]
[object-auditor]
13)/etc/swift/object-server/3.conf
[DEFAULT]
devices = /srv/3/node
mount_check = false
bind_port = 6030
user = swift
log_facility = LOG_LOCAL4
[pipeline:main]
pipeline = object-server
[app:object-server]
use = egg:swift#object
[object-replicator]
vm_test_mode = yes
[object-updater]
[object-auditor]
14)/etc/swift/object-server/4.conf
[DEFAULT]
devices = /srv/4/node
mount_check = false
bind_port = 6040
user = swift
log_facility = LOG_LOCAL5
[pipeline:main]
pipeline = object-server
[app:object-server]
use = egg:swift#object
[object-replicator]
vm_test_mode = yes
[object-updater]
[object-auditor]
2.8、创建运行swift运行的脚本
1) ~/bin/resetswift
#!/bin/bash
swift-init all stop
sudo umount /mnt/sdb1
sudo mkfs.xfs -f -i size=1024 /srv/swift-disk
sudo mount /mnt/sdb1
sudo mkdir /mnt/sdb1/1 /mnt/sdb1/2 /mnt/sdb1/3 /mnt/sdb1/4
sudo chown swift:swift /mnt/sdb1/*
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
2) ~/bin/remakerings
#!/bin/bash
cd /etc/swift
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
3) ~/bin/startmain
#!/bin/bash
swift-init main start
4) ~/bin/startrest
#!/bin/bash
swift-init rest start
2.9、脚本测试
1)添加~/bin/*的执行权限
# chmod +x ~/bin/*
2)重新产生rings
# remakerings
输出以下信息:
Device z1-127.0.0.1:6010/sdb1_"" with 1.0 weight got id 0
Device z2-127.0.0.1:6020/sdb2_"" with 1.0 weight got id 1
Device z3-127.0.0.1:6030/sdb3_"" with 1.0 weight got id 2
Device z4-127.0.0.1:6040/sdb4_"" with 1.0 weight got id 3
Reassigned 262144 (100.00%) partitions. Balance is now 0.00.
……
3)单元测试
# cd ~/swift; ./.unittests
输出以下信息说明单元测试通过:
……
TOTAL 7622 5983 78%
----------------------------------------------------------------------
Ran 632 tests in 40.013s
OK (SKIP=8)
4)启动startmain
cd ~/bin
#startmain
#####################################################################
运行startmain可能会报错,此网页可以解决 : https://answers.launchpad.net/swift/+question/162957
#####################################################################
5)获取一个 X-Storage-Url 和 X-Auth-Token:
# curl -v -H 'X-Storage-User: test:tester' -H 'X-Storage-Pass: testing' http://127.0.0.1:8080/auth/v1.0
6)检查账户:
# curl -v -H 'X-Auth-Token: <token-from-x-auth-token-above>' <url-from-x-storage-url-above>
7)检查swift工作:
# swift -A http://127.0.0.1:8080/auth/v1.0 -U test:tester -K testing stat
正确情况下,应该输出以下信息:
Account: AUTH_test
Containers: 0
Objects: 0
Bytes: 0
Accept-Ranges: bytes
8)# cp ~/swift/test/functional/sample.conf /etc/swift/func_test.conf
9)功能测试
# cd ~/swift; ./.functests
正确情况下,输出类似于3)单元测试的结果。
10)probe测试
# cd ~/swift; ./.probetests
该测试脚本会在每次测试前,调用resetswift脚本
三、上传/下载文件测试
3.1、获得test用户的Storage_Auth_Token和URL
# 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 (#0)
* Trying 127.0.0.1... connected
* Connected to 127.0.0.1 (127.0.0.1) port 8080 (#0)
> GET /auth/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: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_test
< X-Storage-Token: AUTH_tk6474e5ee0cb04832b9d2a168e1a164d8
< X-Auth-Token: AUTH_tk6474e5ee0cb04832b9d2a168e1a164d8
< Content-Length: 0
< Date: Mon, 04 Jul 2011 01:36:57 GMT
* Connection #0 to host 127.0.0.1 left intact
Closing connection #0
3.2、创建container
创建一个名称为container_test的container(目录)
# curl -X PUT -D - -H "X-Auth_Token:AUTH_tk6474e5ee0cb04832b9d2a168e1a164d8" http://127.0.0.1:8080/v1/AUTH_test/container_test
//正确情况下,应该得到以下信息:
HTTP/1.1 201 Created
Content-Length: 18
Content-Type: text/html; charset=UTF-8
Date: Mon, 04 Jul 2011 01:39:38 GMT
查看test用户的container列表,发现只有一个目录:container_test:
# swift -A http://127.0.0.1:8080/auth/v1.0 -U test:tester -K testing list
container_test
3.3、上传Object(文件)
# swift -A http://127.0.0.1:8080/auth/v1.0 -U test:tester -K testing upload container_test ./cvs/CVSROOT/config //上传config文件到ljl1目录中
cvs/CVSROOT/config
# swift -A http://127.0.0.1:8080/auth/v1.0 -U test:tester -K testing list container_test //查看container_tese目录内的信息
bin/startmain
cvs/CVSROOT/config
3.4、下载Object(文件)
swift -A http://127.0.0.1:8080/auth/v1.0 -U test:tester -K testing download container_test
//将ljl1目录内的所有内容下载到目前所在目录
注意:如果上传文件的时候,有嵌套目录,则上传到swift上后,也是以嵌套目录的形式存在,下载后,会在当前目录创建一样的嵌套目录。
四、遇到的问题
1、上传文件失败,查看log文件,
File "/usr/lib/pymodules/python2.6/xattr/__init__.py", line 81, in set#012 self._set(name, value, 0, options | self.options)#012 File "/usr/lib/pymodules/python2.6/xattr/__init__.py", line 16, in _func#012 return func(first, *args)#012IOError: [Errno 95] Operation not supported
出错原因:查看/srv/下面的文件,正确的显示信息应该如下所示:可是我的四个目录显示是没有链接信息的,删除这四个目录,1,2,3,4,重新进行软连接,并修改目录的属主即可
swift@alen:/srv$ ls -l
lrwxrwxrwx 1 swift swift 11 2011-07-04 15:13 1 -> /mnt/sdb1/1
lrwxrwxrwx 1 swift swift 11 2011-07-04 15:13 2 -> /mnt/sdb1/2
lrwxrwxrwx 1 swift swift 11 2011-07-04 15:13 3 -> /mnt/sdb1/3
lrwxrwxrwx 1 swift swift 11 2011-07-04 15:13 4 -> /mnt/sdb1/4
-rw-r--r-- 1 swift swift 1024000000 2011-07-04 15:50 swift-disk
相关推荐
### OpenStack Swift 对象存储在 SSD 上的优化 #### 一、对象存储为何如此火热? 随着信息技术的发展,数据量的增长速度惊人,其中非结构化数据占到了90%以上,这些数据包括了大量的小文件和大文件。同时,数据...
访问OpenStack官方网站(http://www.openstack.org/)和Swift的参考文档(http://swift.openstack.org/development_saio.html)获取最新的信息和更新。 **安装依赖包**: 安装Swift之前,你需要安装一系列的依赖...
OpenStack Swift 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
OpenStack Swift 是一个高度可用的分布式对象存储系统,最初由 Rackspace 开发并在 2010 年贡献给了 OpenStack 社区。它主要设计用于存储非结构化的数据,如图片、视频和文档,尤其适用于大规模互联网应用。Swift 的...
### 使用curl操作OpenStack Swift详解 #### 一、概述 在云计算领域,OpenStack作为一款开源的云操作系统,提供了丰富的功能和服务。其中Swift是OpenStack项目中的一个子项目,主要负责提供对象存储服务,用于存储...
根据给定文件的标题和部分内容,可以看出此文档是一本关于OpenStack Swift的云计算存储系统的实用指南,由Packt Publishing在2014年出版。在深入探讨文档内容之前,我们先来对OpenStack Swift以及云计算存储做一个...
OpenStack Swift是当前非常受欢迎的云计算平台OpenStack套件中的一个项目,它提供了一个可扩展的分布式对象存储系统。该系统设计用来存储、检索和管理大量数据,它被广泛用于云存储服务,尤其是在需要水平扩展以及...
标题中提到的“Jaesuk Ahn: Two Years of Life with OpenStack Swift”和描述中提到的“KT ucloud storage的存储架构,及自己在Swift方面的经验心得”,表明文章内容聚焦于Jaesuk Ahn在使用OpenStack Swift进行云...
OpenStack Swift All in One 搭建手册 OpenStack Swift 是一种分布式对象存储系统,用于存储和检索大规模数据。基于 OpenStack Swift,我们可以构建高可用、高性能的存储系统。本文将指导您完成 OpenStack Swift ...
英文书, OpenStack Object Storage (Swift) Essentials Design, implement, and successfully manage your cloud storage using OpenStack Swift 作者: Amar Kapadia,Kris Rajana,Sreedhar Varma 共174页 ...
基于 Docker 和 OpenStack Swift 构建的本地 S3 首先,这主要是一个分支,我清理了一下并添加了 swift3 Swift 插件。 非常感谢 ccollicutt 的工作! 我分叉时那个 repo 的 README 保留在这个 README 的底部。 用法 ...
### 实施云存储使用OpenStack Swift #### 一、引言 随着云计算技术的迅猛发展,云存储成为了企业和组织管理海量数据的关键技术之一。OpenStack作为一款开源的云计算管理平台,提供了多种服务来构建和管理云基础设施...
迅捷客户端小型但功能强大的客户端,可与OpenStack Swift进行交互。安装将此行添加到您的应用程序的Gemfile中: gem 'swift_client' 然后执行: $ bundle或将其自己安装为: $ gem install swift_client用法首先,...
OpenStack Swift - Using, Administering, and Developing for Swift Object Storage.pdf OpenStack Swift 开发文档
标题"django-storage-swift:适用于Django的OpenStack Swift存储后端"揭示了这个项目的核心——它是一个为Django框架提供的存储解决方案,特别针对OpenStack Swift云存储服务。这意味着开发者可以利用这个后端在...
OpenStack的SWIFT客户端API与ES7异步/ AWAIT设计。安装$ npm install swiftAPI /服务(auth3) Auth3 API将登录到您的openstack,并在所有操作中使用X-Auth-Token。 确保定期更新(setInterval)身份验证令牌。证书...