`
jetway
  • 浏览: 483729 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

openstack swift SAIO

 
阅读更多

openstack swift SAIO的安装  

2013-02-03 08:32:19|  分类: 云计算 |  标签:openstack  云计算  swift   |举报 |字号 订阅

 

 

 

 

 


参考官方文档,及一些国内同行的博客
我的装系统是分了个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上的优化

    ### OpenStack Swift 对象存储在 SSD 上的优化 #### 一、对象存储为何如此火热? 随着信息技术的发展,数据量的增长速度惊人,其中非结构化数据占到了90%以上,这些数据包括了大量的小文件和大文件。同时,数据...

    OpenStack swift 安装文档

    访问OpenStack官方网站(http://www.openstack.org/)和Swift的参考文档(http://swift.openstack.org/development_saio.html)获取最新的信息和更新。 **安装依赖包**: 安装Swift之前,你需要安装一系列的依赖...

    OpenStack Swift 无水印pdf

    OpenStack Swift 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Openstack Swift 原理、架构与API介绍.docx

    OpenStack Swift 是一个高度可用的分布式对象存储系统,最初由 Rackspace 开发并在 2010 年贡献给了 OpenStack 社区。它主要设计用于存储非结构化的数据,如图片、视频和文档,尤其适用于大规模互联网应用。Swift 的...

    使用curl操作openstack swift.docx

    ### 使用curl操作OpenStack Swift详解 #### 一、概述 在云计算领域,OpenStack作为一款开源的云操作系统,提供了丰富的功能和服务。其中Swift是OpenStack项目中的一个子项目,主要负责提供对象存储服务,用于存储...

    Implementing Cloud Storage with OpenStack Swift_Packt Publishing(2014).pdf

    根据给定文件的标题和部分内容,可以看出此文档是一本关于OpenStack Swift的云计算存储系统的实用指南,由Packt Publishing在2014年出版。在深入探讨文档内容之前,我们先来对OpenStack Swift以及云计算存储做一个...

    Packt.Implementing Cloud Storage with Openstack Swift.2014

    OpenStack Swift是当前非常受欢迎的云计算平台OpenStack套件中的一个项目,它提供了一个可扩展的分布式对象存储系统。该系统设计用来存储、检索和管理大量数据,它被广泛用于云存储服务,尤其是在需要水平扩展以及...

    Jaesuk Ahn:Two Years of Life with OpenStack Swift

    标题中提到的“Jaesuk Ahn: Two Years of Life with OpenStack Swift”和描述中提到的“KT ucloud storage的存储架构,及自己在Swift方面的经验心得”,表明文章内容聚焦于Jaesuk Ahn在使用OpenStack Swift进行云...

    openstack Swift All in one 搭建手册1

    OpenStack Swift All in One 搭建手册 OpenStack Swift 是一种分布式对象存储系统,用于存储和检索大规模数据。基于 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-local-s3:一个运行 OpenStack Swift 的 Docker 容器,周围有一个 S3 API 包装器。 用于开发中,当达到真正的 S3 会很慢或很昂贵

    基于 Docker 和 OpenStack Swift 构建的本地 S3 首先,这主要是一个分支,我清理了一下并添加了 swift3 Swift 插件。 非常感谢 ccollicutt 的工作! 我分叉时那个 repo 的 README 保留在这个 README 的底部。 用法 ...

    Implementing Cloud Storage with OpenStack Swift

    ### 实施云存储使用OpenStack Swift #### 一、引言 随着云计算技术的迅猛发展,云存储成为了企业和组织管理海量数据的关键技术之一。OpenStack作为一款开源的云计算管理平台,提供了多种服务来构建和管理云基础设施...

    swift_client:小型但功能强大的客户端,可与OpenStack Swift进行交互

    迅捷客户端小型但功能强大的客户端,可与OpenStack Swift进行交互。安装将此行添加到您的应用程序的Gemfile中: gem 'swift_client' 然后执行: $ bundle或将其自己安装为: $ gem install swift_client用法首先,...

    OpenStack Swift

    OpenStack Swift - Using, Administering, and Developing for Swift Object Storage.pdf OpenStack Swift 开发文档

    django-storage-swift:适用于Django的OpenStack Swift存储后端

    标题"django-storage-swift:适用于Django的OpenStack Swift存储后端"揭示了这个项目的核心——它是一个为Django框架提供的存储解决方案,特别针对OpenStack Swift云存储服务。这意味着开发者可以利用这个后端在...

    swift:OpenStack Swift API

    OpenStack的SWIFT客户端API与ES7异步/ AWAIT设计。安装$ npm install swiftAPI /服务(auth3) Auth3 API将登录到您的openstack,并在所有操作中使用X-Auth-Token。 确保定期更新(setInterval)身份验证令牌。证书...

Global site tag (gtag.js) - Google Analytics