在ubuntu上安装openstack的swift组件-installing openstack object storage
2012-08-13 20:45
387 查看
这几天正在自己搭建一个swift的环境。看了一些资料,结合自己的实践,写下了它:
1.物理环境说明:
2.重要组件说明:
node:运行一个或多个object storage service
proxy node:运行 proxy services
auth node:运行Auth service
storage:运行account,container,and object services
Ring:是Openstack object storage 到物理设备的映射集合
![](http://my.csdn.net/uploads/201208/13/1344842025_5302.png)
在所有节点上的准备工作:
安装服务
配置路径
新建文件 vim /etc/swift/swift.conf
3.安装和配置storage nodes
安装:Storage node packages,所有storage都要进行操作。
新建xfs系统分区,当然,(这需要一个空分区),如果硬盘的分区已经被使用而数据你又不想要了,那就删除分区后进行下列操作。否则添加一块新硬盘是最方便的选择。所有storage都要进行操作。
创建并配置 vim /etc/rsyncd.conf
注意:path 写你实际的(刚才新建的)分区的位置。address修改为当前storage的地址。
编辑vim /etc/default/rsync(即设置为了开机启动)
重新/启动服务
创建或检查 vim /etc/swift/account-server.conf
创建或检查 vim /etc/swift/container-server.conf
创建或检查vim /etc/swift/object-server.conf
注意去掉:object-expirer
启动storage service:
4.安装和配置Proxy Node
为ssl建立签名证书
修改/etc/memcched.conf
新建 vim /etc/swift/proxy-server.conf
注意:如果你运行多个memcache ,把多个ip:端口添加到在[filter:cache]中,例如:
如果不想用keystone可以用下面的配置内容代替:
创建环,建立account,container,object的ring,参数18代表“环”是2^18(http://blog.csdn.net/zoushidexing/article/details/7852014),参数3 代表每一个存储对象有3份拷贝,当然这是有至少3个storage的情况下,所有的所有服务都在一个节点上,那就写1吧。参数1代表1小时可以移动分区一次(即延迟时间)。
添加ring节点,例如,我们在Zone 1中建立的一个存储节点,ip地址为10.214.0.182,分区为/sdb1, 路径在rsyncd.conf(存储节点)文件path中。100 代表设备的权重。可以根据磁盘的容量设定对应值,比如2T的100,则1T的可以是50。端口要与配置文件中的对应。
(为了以后重新建立环境方便,可以把它们写在vim set_devices.sh中: (一条条复制也挺烦的。)
sh set_devices.sh)
如果添加错了而你有不止到怎么修改,那可以删除/etc/swift下的account.builder、container.builder、 object.builder后重新创建环即重新执行swift-ring-builder account.builder create 18 3 1等。
核实ring的内容
平衡rings
确定所有的配置文件的权限:
启动proxy服务
5.重启服务
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.
更改默认的default_cluster_url 指向负载均衡的url以代替第一次创建在/etc/swift/proxy-server.conf配置的。
当你改变了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查看用户和密码)
得到an X-Storage-Url 和X-Auth-Token
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 到物理设备的映射集合
![](http://my.csdn.net/uploads/201208/13/1344842025_5302.png)
在所有节点上的准备工作:
安装服务
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 memcachedMemcached 是一个高性能的分布式内存对象缓存系统,用于动态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 myfilesmyfiles 是文件夹的名字
上传文件swift -V 2 -A http://10.214.0.179:5000/v2.0 -U service:swift -K 123456 upload myfiles set_devices.shset_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/
相关文章推荐
- Install and Configure OpenStack Object Storage (Swift) for Ubuntu 14.04
- OpenStack Object Storage Developer Guide/Swift官方API文档 -- 翻译 (二)
- OpenStack Object Storage(Swift)
- openstack安装(包含swift)在vmware上的ubuntu
- OpenStack Object Storage Developer Guide/Swift官方API文档 -- 翻译 (一)
- 发现 OpenStack: Storage 组件 Swift 和 Cinder
- Object Storage(Swift)安装过程——Havana
- OpenStack Object Storage(Swift)架构、原理及特性
- OpenStack Swift组件安装
- OpenStack Object Storage(Swift)架构、原理及特性
- Install and Configure OpenStack Object Storage (Swift)
- OpenStack: Storage 组件 Swift 和 Cinder(转)
- openstack object storage(swift)
- OpenStack Object Storage swift操作和实践
- OpenStack Object Storage Developer Guide/Swift官方API文档 -- 翻译 (五)
- OpenStack Object Storage Developer Guide/Swift官方API文档 -- 翻译 (三)
- OpenStack Object Storage(Swift)架构、原理及特性
- OpenStack Object Storage(Swift)概述
- OpenStack Object Storage Developer Guide/Swift官方API文档 -- 翻译 (四)
- Build Cloud Storage: Installing an OpenStack Swift cluster on EC2