您的位置:首页 > 移动开发 > Objective-C

在ubuntu上安装openstack的swift组件-installing openstack object storage

2012-08-13 20:45 387 查看
这几天正在自己搭建一个swift的环境。看了一些资料,结合自己的实践,写下了它:



1.物理环境说明:



Linux系统版本:Ubuntu Server 12.04
Proxy Server IP:   		10.214.0.181
Storage Server One:		10.214.0.179
Storage Server Two:		10.214.0.180
Storage Server three:		10.214.0.182


2.重要组件说明:

node:运行一个或多个object storage service

proxy node:运行 proxy services

auth node:运行Auth service

storage:运行account,container,and object services

Ring:是Openstack object storage 到物理设备的映射集合



在所有节点上的准备工作:

安装服务

apt-get install swift openssh-server rsync memcached python-netifaces python-xattr python-memcache


配置路径

mkdir -p /etc/swift
chown -R swift:swift /etc/swift/


新建文件 vim /etc/swift/swift.conf

[swift-hash]
# random unique string that can never change (DO NOT LOSE)
swift_hash_path_suffix = fLIbertYgibbitZ


3.安装和配置storage nodes

安装:Storage node packages,所有storage都要进行操作。

aptitude install swift-account swift-container swift-object xfsprogs


新建xfs系统分区,当然,(这需要一个空分区),如果硬盘的分区已经被使用而数据你又不想要了,那就删除分区后进行下列操作。否则添加一块新硬盘是最方便的选择。所有storage都要进行操作。

fdisk /dev/sdb 

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-488281249, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-488281249, default 488281249): 
Using default value 488281249

Command (m for help): p

Disk /dev/sdb: 250.0 GB, 250000000000 bytes
255 heads, 63 sectors/track, 30394 cylinders, total 488281250 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000081

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048   488281249   244139601   83  Linux

Command (m for help): w
The partition table has been altered!
识别并挂载新的分区:

partprobe#如果不行,就重启一下吧。
mkdir -p /srv/node/sdb1
mkfs.xfs -i size=1024 /dev/sdb1 -f
echo "/dev/sdb1 /srv/node/sdb1 xfs noatime,nodiratime,nobarrier,logbufs=8 0 0" >> /etc/fstab
mount /srv/node/sdb1
chown -R swift:swift /srv/node

创建并配置 vim /etc/rsyncd.conf

uid = swift
gid = swift
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
address = 10.214.0.179
[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

注意:path 写你实际的(刚才新建的)分区的位置。address修改为当前storage的地址。

编辑vim /etc/default/rsync(即设置为了开机启动)

RSYNC_ENABLE = true

重新/启动服务

service rsync restart


创建或检查 vim /etc/swift/account-server.conf

[DEFAULT]
devices = /sdb1
mount_check = false
bind_port = 6002
user = swift
bind_ip = 0.0.0.0
workers = 2
[pipeline:main]
pipeline = account-server
[app:account-server]
use = egg:swift#account
[account-replicator]
[account-auditor]
[account-reaper]


创建或检查 vim /etc/swift/container-server.conf

[DEFAULT]
devices = /sdb1
mount_check = false
bind_ip = 0.0.0.0
bind_port = 6001
workers = 2
[pipeline:main]
pipeline = container-server
[app:container-server]
use = egg:swift#container
[container-replicator]
[container-updater]
[container-auditor]
[container-sync]
注意:[container-sync]这个是添加上去的,不要忘记了


创建或检查vim  /etc/swift/object-server.conf

[DEFAULT]
devices = /sdb1
mount_check = false
bind_ip = 0.0.0.0
bind_port = 6000
workers = 2
[pipeline:main]
pipeline = object-server
[app:object-server]
use = egg:swift#object
[object-replicator]
[object-updater]
[object-auditor]

注意去掉:object-expirer

启动storage service:

swift-init object-server restart
swift-init object-replicator restart
swift-init object-updater restart
swift-init object-auditor restart
swift-init container-server restart
swift-init container-replicator restart
swift-init container-updater restart
swift-init container-auditor restart
swift-init account-server restart
swift-init account-replicator restart
swift-init account-auditor restart
也可以用命令
swift-init all restart



4.安装和配置Proxy Node

apt-get install swift-proxy swift-doc memcached
 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。

为ssl建立签名证书

cd /etc/swift
openssl req -new -x509 -nodes -out cert.crt -keyout cert.key


修改/etc/memcched.conf

-l 127.0.0.1
#改为proxy节点的ip
-l  10.214.0.181
重新启动memcached服务

service memcached restart


新建 vim /etc/swift/proxy-server.conf

[DEFAULT]
bind_port = 8080
bind_ip = 10.214.0.181
user = swift
[pipeline:main]
pipeline = catch_errors healthcheck cache authtoken keystone proxy-server
[app:proxy-server]
use = egg:swift#proxy
account_autocreate = true
[filter:keystone]
paste.filter_factory = keystone.middleware.swift_auth:filter_factory
operator_roles = admin, swiftoperator
[filter:authtoken]
paste.filter_factory = keystone.middleware.auth_token:filter_factory
# Delaying the auth decision is required to support token-less
# usage for anonymous referrers ('.r:*').
delay_auth_decision = true
service_port = 5000
service_host = 10.214.0.179
auth_port = 35357
auth_host = 10.214.0.179
auth_token =123456
admin_token =123456

auth_protocol = http
auth_uri = http://10.214.0.179:5000/ admin_tenant_name = admin
admin_user = admin
admin_password = 123456

[filter:cache]
use = egg:swift#memcache
memcache_servers = 10.214.0.181:11211
set log_name = cache
[filter:catch_errors]
use = egg:swift#catch_errors
[filter:healthcheck]
use = egg:swift#healthcheck


注意:如果你运行多个memcache ,把多个ip:端口添加到在[filter:cache]中,例如:

memcache_servers =10.1.2.3:11211,10.1.2.4:11211


如果不想用keystone可以用下面的配置内容代替:

[DEFAULT]
bind_port =8080
bind_ip = 10.214.0.181 user = swift

[pipeline:main]
pipeline = healthcheck cache tempauth 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

[filter:healthcheck]
use = egg:swift#healthcheck

[filter:cache]
use = egg:swift#memcache
memcache_servers = 10.214.0.181:11211


创建环,建立account,container,object的ring,参数18代表“环”是2^18(http://blog.csdn.net/zoushidexing/article/details/7852014),参数3 代表每一个存储对象有3份拷贝,当然这是有至少3个storage的情况下,所有的所有服务都在一个节点上,那就写1吧。参数1代表1小时可以移动分区一次(即延迟时间)。

cd /etc/swift
swift-ring-builder account.builder create 18 3 1
swift-ring-builder container.builder create 18 3 1
swift-ring-builder object.builder create 18 3 1


添加ring节点,例如,我们在Zone 1中建立的一个存储节点,ip地址为10.214.0.182,分区为/sdb1, 路径在rsyncd.conf(存储节点)文件path中。100 代表设备的权重。可以根据磁盘的容量设定对应值,比如2T的100,则1T的可以是50。端口要与配置文件中的对应。

swift-ring-builder account.builder add z1-10.214.0.179:6002/sdb1 93
swift-ring-builder container.builder add z1-10.214.0.179:6001/sdb1 93
swift-ring-builder object.builder add z1-10.214.0.179:6000/sdb1 93
注意:假定有若干个zones,每一个zones有一个node。zone应该起始于1,以1递增。例如:swift-ring-builder account.builder add z2-10.214.0.180:6002/sdb1 28

(为了以后重新建立环境方便,可以把它们写在vim set_devices.sh中: (一条条复制也挺烦的。)

swift-ring-builder account.builder add z1-10.214.0.179:6002/sdb1 93
swift-ring-builder container.builder add z1-10.214.0.179:6001/sdb1 93
swift-ring-builder object.builder add z1-10.214.0.179:6010/sdb1 93

swift-ring-builder account.builder add z2-10.214.0.180:6002/sdb1 28
swift-ring-builder container.builder add z2-10.214.0.180:6001/sdb1 28
swift-ring-builder object.builder add z2-10.214.0.180:6010/sdb1 28

swift-ring-builder account.builder add z3-10.214.0.182:6002/sdb1 23
swift-ring-builder container.builder add z3-10.214.0.182:6001/sdb1 23
swift-ring-builder object.builder add z3-10.214.0.182:6000/sdb1 23

swift-ring-builder account.builder
swift-ring-builder container.builder
swift-ring-builder object.builder
执行脚本。

sh set_devices.sh)

如果添加错了而你有不止到怎么修改,那可以删除/etc/swift下的account.builder、container.builder、 object.builder后重新创建环即重新执行swift-ring-builder account.builder create 18 3 1等。

核实ring的内容

swift-ring-builder account.builder
swift-ring-builder container.builder
swift-ring-builder object.builder


平衡rings

swift-ring-builder account.builder rebalance
swift-ring-builder container.builder rebalance
swift-ring-builder object.builder rebalance
成功之后会在当前目录生成 account.ring.gz 文件,把/etc/swift/下的account.ring.gz, container.ring.gz, and object.ring.gz拷贝到每一个proxy节点和storage节点。

确定所有的配置文件的权限:

chown -R swift:swift /etc/swift


启动proxy服务

swift-init proxy restart


5.重启服务

swift-init main restart
swift-init rest restart
swift-init all restart


Proxy节点:swift-init  proxy  start

各个Storage节点:swift-init  all  start

6.(可选)添加一个额外的proxy server

为了提高可靠性,可以添加额外的proxy server。安装过程和上述安装proxy node  的过程类似。但是要进行一些配置。

一旦拥有了多个proxy,就可能需要用到负载均衡。有多种负载均衡的方法可以选择,比如:轮询、在proxy前加一个负载均衡器,指定特定的storage。

添加proxy需要进行一些配置,当然这些配置需要需要在其proxy同时进行。

更新/etc/swift/proxy-server.conf文件,如果使用的多个memcache servers,那么,要如下添加IP.

[filter:cache]
use = egg:swift#memcache
memcache_servers = 10.214.0.179:11211,10.214.0.182:11211


更改默认的default_cluster_url 指向负载均衡的url以代替第一次创建在/etc/swift/proxy-server.conf配置的。

[app:auth-server]
use = egg:swift#auth
default_cluster_url = https://10.214.0.180/v1 # Highly recommended to change this key to something else!
super_admin_key = devauth


当你改变了default_cluster_url设置,就需要删除auth database 并且重新创建openstack object storage的users,或者也可以在auth database中手动为每一个account更新正确的url。

下一步,需要拷贝ring的信息到所有几点,包括你新建的proxy节点。并且确定ring可以到达所有的存储节点。

当同步了所有的节点之后,确保admin在/etc/swift有key,并且对ring文件有充分的权限。

7.验证设置。

使用正确的服务Identity service URL,通过export ADMINPASS=secretword导入对ADMINPASS设置。(可以通过proxy-server.conf查看用户和密码)

swift -V 2 -A http://10.214.0.179:5000/v2.0 -U service:swift -K 123456 stat


得到an X-Storage-Url 和X-Auth-Token

curl -k -v -H 'X-Storage-User: adminUser:admin' -H 'X-Storage-Pass: $ADMINPASS' http://<AUTH_HOSTNAME>:5000/auth/v1.0[/code] 例如:

curl -v -H 'X-Storage-User: test:tester' -H 'X-Storage-Pass: testing' http://10.214.0.181:8080/auth/v1.0[/code] 
检查你de账号

curl -k -v -H 'X-Auth-Token: <token-from-x-auth-token-above>' <url-from-xstorage-url-above>

例如:

使用swift删除一些小文件,命名为‘bigfile[1-2].tgz’ 给一个container 名字叫 ‘myfiles’:

$ swift -A http://<AUTH_HOSTNAME>:5000/v2.0 -U adminUser:admin -K $ADMINPASS
upload myfiles bigfile1.tgz
$ swift -A http://<AUTH_HOSTNAME>:5000/v2.0 -U adminUser:admin -K $ADMINPASS
upload myfiles bigfile2.tgz


使用swift从‘myfiles’ container下载所有文件

$ swift -A http://<AUTH_HOSTNAME>:5000/v2.0 -U adminUser:admin -K $ADMINPASS
download myfiles


8.错误解决提示

如果遇到问题,可以查看日志文件var/log/syslog

同时,在/var/log/kern.log中也会有错误日志。

注意端口的占用情况,我在安装的时候由于8080端口被占用,出了好多莫名奇妙的情况。

查看端口的命令为:

netstat -anp | grep 8080
如果你的服务不能够启动,而这个端口还被占用这,那请kill 到你用查看端口命令看到的进程的ID号。

关联关系:

keystone user-role-add --user 83cd1180b3794811848265cd012dffb7 --tenant_id 3804546967574be38aaa08faca23c32d --role d8c278323c9e4663bbf4ff48ebcb24d6

endpoint 配置再次提醒, 上面的service id需要换成你自己创建的service的id, 在publicurl和internalurl里出现的AUTHxxxx,这里的xxxx需要换成你的adminTenant的id 这里的格式需要参考你的swift\_auth里定义的格式, 有个reseller_prefix的设置, 这里我们设置成AUTH。

keystone endpoint-create --region RegionOne \

                         --service_id c7a8827453ef4364af3b6809a174c6bb  \

                         --publicurl http://10.214.0.181:8080/v1/AUTH_3804546967574be38aaa08faca23c32d \
                         --adminurl http://10.214.0.181:8080 \

                         --internalurl http://10.214.0.181:8080/v1/AUTH_3804546967574be38aaa08faca23c32d
9.常用命令

查看文件统计结果

创建一个文件夹

swift -V 2 -A http://10.214.0.179:5000/v2.0 -U service:swift -K 123456 post myfiles
myfiles 是文件夹的名字

上传文件

swift -V 2 -A http://10.214.0.179:5000/v2.0 -U service:swift -K 123456 upload myfiles set_devices.sh
set_devices.sh 是文件的名称

下载文件

swift -V 2 -A http://10.214.0.179:5000/v2.0 -U service:swift -K 123456 download  myfiles set_devices.sh


参考文献:

官方文档:http://docs.openstack.org/essex/openstack-compute/install/apt/openstack-install-guide-essex.pdf

atkisc的[Openstack] swift 安装配置过程(all in one) :http://bbs.linuxtone.org/thread-16276-1-1.html

free_coder的Ubuntu 12.04 LTS 上安装swift1.4.8:http://www.cnblogs.com/free--coder/archive/2012/05/28/2521135.html

cywosp的使用Swauth认证多节点安装Swift:http://blog.csdn.net/cywosp/article/details/7428769 和 http://blog.csdn.net/cywosp/article/details/7439440

趣云的Swift部署和动态扩展:http://blog.lightcloud.cn/?p=68#sec-4.1

Openstack Hands on lab 2: Swift安装并使用Keystone做身份验证:http://liangbo.me/index.php/2012/03/29/openstack-hands-on-lab-2-swift-installation-with-keystone/




                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: