本帖最后由 坎蒂丝_Swan 于 2015-1-28 16:31 编辑
问题导读
1.OpenStack对象存储需要工作在什么文件系统上?
2.代理服务器都承担了哪些工作?
安装OpenStack Object Storage
目录:
一、系统需求
二、对象存储架构
三、安装OpenStack Object Storage
四、安装配置存储节点
五、安装与配置代理节点
六、安装验证
一、系统需求
硬件: OpenStack对象存储被设计运行在通用计算机硬件平台上,以下表达为建议硬件配置。
操作系统:OpenStack 对象存储现在可以运行在Ubuntu,RHEL,CentOS或Fedora系统上。
网络:建议千兆网络。为对象存储准备一个额外的网络连接外网的代理服务器。
数据库:OpenStack对象存储,SQLite数据库是OpenStack对象存储容器和帐号管理的进程的一部分。
权限:你可以直接只用root或用户sudo权限的用户执行安装OpenStack对象存储。
网络规划
本文档提供两个网络规划,一个公共网络连接代理服务器,第二个是在存储集群外不可访问的存储网络。
公共网络大小:8IPs(CIDR/29)。
存储网络建议大小:255IPs(CIDR/24)。
二、对象存储架构
节点--运行一个或多个OpenStack对象存储服务的主机。
代理节点--运行代理服务的主机。
认证节点--一个可选的独立于代理服务并运行认证服务的节点。
存储节点--运行用户、容器、对象服务的节点。
环--OpenStack对象存储数据与物理设备之间的映射集合。
为了增加高可用,你有可能会希望添加更多的代理服务以提供性能。
本文档描述的存储节点都是在环中作为独立的区域,建议至少用5个区域。一个区域是相互独立的节点组合。环确保所有的备份数据在不同的区域,下图为最小安装的一种可能:
三、安装OpenStack Object Storage
虽然在开发或测试环境下,你可以安装OpenStack Object Storage在一台服务器上,但多服务器安装可以为你的正式发布产品带来更高的可用性与冗余。
如果你想执行单节点安装,你可以使用Swift All In One 或DevStack。
开始之前
如果你是在一台新服务器上安装,准备一份系统安装光盘。
本文档演示安装一个使用了如下节点的集群:
* 一个运行swift-proxy-server的代理节点,代理服务器将请求发送至正确的存储节点。
* 五个运行swift-account-server,swift-container-server以及swift-object-server进程的存储节点。
安装步骤
1. 在所有节点安装操作系统,如Ubuntu Server,RHEL,CentOS或Fedora。
2. 安装swift服务以及OpenSSH。
# yum install openstack-swift openstack-swift-proxy openstack-swift-account \
> openstack-swift-container openstack-swift-object memcached
3. 在所有的节点上创建目录:
# mkdir -p /etc/swift
# chown -R swift:swift /etc/swift/
4. 创建/etc/swift/swift.conf文件
[swift-hash]
# random unique string that can never change (DO NOT LOSE)
swift_hash_path_suffix = fLIbertYgibbitZ 复制代码
注意:suffix的值为随机字串。
下一步,设置你的存储节点、代理节点以及认证节点,这里我们使用keystone作为通用认证组件。
四、安装与配置存储节点
注意:OpenStack对象存储需要工作在支持XATTRS(扩展属性)的现代文件系统上。我们建议使用XFS文件系统。
1. 安装存储节点包:
# yum install openstack-swift-account openstack-swift-container \
> openstack-swift-object xfsprogs
2. 为所有的设备设置XFS卷:
# fdisk /dev/sdb (创建一个分区)
# mkfs.xfs -i size=1024 /dev/sdb1
# echo “/dev/sdb1 /srv/node/sdb1 xfs noatime,nodiratime,nobarrier,logbufs=8 0 0” >> /etc/fstab
# mkdir -p /srv/node/sdb1
# mount /srv/node/sdb1
# chown -R swift:swift /srv/node
3. 创建/etc/rsyncd.conf
uid = swift
gid = swift
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
address = <STORAGE_LOCAL_NET_IP>
[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 复制代码
4. 编辑/etc/default/rsync:
RSYNC_ENABLE = true //此处为Ubuntu环境,设置开机启动。如CentOS请使用chkconfig 复制代码
5. 开启rsync进程:
复制代码
6. 创建/etc/swift/account-server.conf文件
[DEFAULT]
bind_ip = <STORAGE_LOCAL_NET_IP>
workers = 2
[pipeline:main]
pipeline = account-server
[app:account-server]
use = egg:swift#account
[account-replicator]
[account-auditor]
[account-reaper] 复制代码
7. 创建/etc/swift/container-server.conf
[DEFAULT]
bind_ip = <STORAGE_LOCAL_NET_IP>
workers = 2
[pipeline:main]
pipeline = container-server
[app:container-server]
use = egg:swift#container
[container-replicator]
[container-updater]
[container-auditor] 复制代码
8. 创建/etc/swift/object-server.conf
[DEFAULT]
bind_ip = <STORAGE_LOCAL_NET_IP>
workers = 2
[pipeline:main]
pipeline = object-server
[app:object-server]
use = egg:swift#object
[object-replicator]
[object-updater]
[object-auditor]
[object-expirer] 复制代码
译者备注:经由译者实验证明,软件安装完成后在/etc/swift目录下,会自动生成account-server,container-server等目录,以上配置文件也可以分别放置在对应的目录下。
9. 开启storage服务:
swift-init object-server start
swift-init object-replicator start
swift-init object-updater start
swift-init object-auditor start
swift-init container-server start
swift-init container-replicator start
swift-init container-updater start
swift-init container-auditor start
swift-init account-server start
swift-init account-replicator start
swift-init account-auditor start
五、安装与配置代理节点
代理服务器接受请求并查找账户、容器或对象的位置最后将请求路由到正确的位置。代理服务器同样处理APIs请求。你可以修改proxy-server.conf文件启用帐号管理。
注意:建议所有的命令使用root帐号操作。
1. 安装swift-proxy服务:
# yum install openstack-swift-proxy memcached
2. 创建自签名证书:
# cd /etc/swift
# openssl req -new -x509 -nodes -out cert.crt -keyout cert.key
3. 修改memcached监听的端口。编辑/etc/memcached.conf文件:
将 -l 127.0.0.1 改变为 -l <代理服务器IP>
4. 重启memcached服务:
# service memcached restart
5. 使用openstack-config命令设置swift代理配置文件的keystone管理标识:
# openstack-config --set /etc/swift/proxy-server.conf filter:authtoken admin_token $ADMIN_TOKEN
# openstack-config --set /etc/swift/proxy-server.conf filter:authtoken auth_token $ADMIN_TOKEN
6. 创建/etc/swift/proxy-server.conf
[DEFAULT]
bind_port = 8888
user = <user>
[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 = 127.0.0.1
auth_port = 35357
auth_host = 127.0.0.1
auth_token = 012345SECRET99TOKEN012345
admin_token = 012345SECRET99TOKEN012345
[filter:cache]
use = egg:swift#memcache
set log_name = cache
[filter:catch_errors]
use = egg:swift#catch_errors
[filter:healthcheck]
use = egg:swift#healthcheck 复制代码
7. 创建账户,容器以及对象环。
命令第一个参数18代表2^18(2的幂),表示定义分区的大小,该值大小取决于你希望整个环使用存储的总大小;3代表每个对象备份的数量;最后一个数值表示分区移动的间隔(小时)。
# 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
8. 为每个节点的存储设备添加条目至环:
# swift-ring-builder account.builder add z<ZONE>-<STORAGE_LOCAL_NET_IP>:6002/<DEVICE> 100
# swift-ring-builder container.builder add z<ZONE>-<STORAGE_LOCAL_NET_IP_1>:6001/<DEVICE> 100
# swift-ring-builder object.builder add z<ZONE>-<STORAGE_LOCAL_NET_IP_1>:6000/<DEVICE> 100
例如,如果你在IP 10.0.0.1存储节点上在Zone 1(区域1)中设置分区。挂载点是/srv/node/sdb1,且在rsyncd.conf文件中是/srv/node/,设备为sdb1。命令如下:
swift-ring-builder account.builder add z1-10.0.0.1:6002/sdb1 100
swift-ring-builder container.builder add z1-10.0.0.1:6001/sdb1 100
swift-ring-builder object.builder add z1-10.0.0.1:6000/sdb1 100
注意:假设5个区域中每个区域有一个节点,ZONE从1开始并通过添加额外节点增加该数值。
9. 验证ring内容:
swift-ring-builder account.builder
swift-ring-builder container.builder
swift-ring-builder object.builder
10. 调整rings:
swift-ring-builder account.builder rebalance
swift-ring-builder container.builder rebalance
swift-ring-builder object.builder rebalance
注意:这里会花费一些时间。
11. 拷贝account.ring.gz, container.ring.gz, object.ring.gz到每个代理与存储节的/etc/swift目录下。
12. 确保所有的配置文件所属者为swift:
# chown -R swift:swift /etc/swift
13. 开启Proxy服务:
# swift-init proxy start
配置OpenStack对象存储:
swift-init main start
swift-init rest start
六、安装验证
1. 运行swift命令,使用$ export ADMINPASS=secretword定义全局变量。
$ swift -V 2 -A http://<AUTH_HOSTNAME>:5000/v2.0 -U adminUser:admin -K 012345SECRET99TOKEN012345 stat
2. 获得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
3. 检查账户:
$ curl -k -v -H 'X-Auth-Token: <token-from-x-auth-token-above>' <url-from-xstorage-url-above>
4. 使用swift上传一个名称为gigfile[1-2].tgz的文件至名为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
5. 使用swift下载所有的文件:
$ swift -A http://<AUTH_HOSTNAME>:5000/v2.0 -U adminUser:admin -K $ADMINPASS download myfiles
排错:如果你遇到问题,可以查看/var/log/syslog。
相关文章
转载丁丁历险博客:http://manual.blog.51cto.com/3300438/967858