CentOS6.2下一步一步源代码安装OpenStack(八)Swift代理节点配置、运行

长平狐 发布于 2012/08/24 09:59
阅读 1K+
收藏 2

参考文档:http://docs.openstack.org/essex/openstack-object-storage/admin/content/

最近几天一直在弄swift,总算是跑起来了,因此跟大家分享下,计划写三篇文章:swift代理节点配置、运行;swift存储节点安装、配置及运行;swift测试。这次安装共使用了四台服务器:一个代理节点(10.61.2.12,也是OpenStack的控制节点,上面还运行着Keystone、Glance及Nova的除nova-compute外的相关组件,三个存储节点(10.61.2.13-15,每个节点作为一个单独的Zone)。

下面就开始代理节点的配置、运行吧。

安装相关软件

代理节点的安装在前面CentOS6.2下一步一步源代码安装OpenStack(二)组件安装已经安装好了,此外还要安装memcached及netifaces。

yum install memcached
pip install netifaces

启动memcached

参考文档提到要修改memcached的监听ip地址,但在CentOS下没有找到相关配置文件,并且memcached启动后是监听所有ip的,并且仅本地代理节点使用memcached,因此也就没管了,如果真要考虑安全的话可以考虑在iptables中只开放127.0.0.1的11211端口
chkconfig memcached on && service memcached start

创建相应用户、组及配置文件目录

Swift默认以swift:swift用户及组运行,如果采用其它用户必须在很多配置文件中显示配置用户,比较麻烦。

useradd –Mr swift
mkdir /etc/swift
chown –R swift:swift /etc/swift

创建swift.conf文件

该文件/etc/swift/swift.conf在所有节点必须完全一样,内容如下:

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

创建用于SSL的证书文件

Swift默认使用https协议,因此需要创建证书文件,这也是使用Cyberduck作为客户端所必须的,当然在这里先不打算使用https因此可以省略

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

创建代理服务的配置文件

代理服务的配置文件为/etc/swift/proxy-server.conf,内容如下:

[DEFAULT]
bind_port = 8888
user = swift
#cert_file = /etc/swift/cert.crt
#key_file = /etc/swift/cert.key 

[pipeline:main]
pipeline = catch_errors healthcheck cache swift3authtoken keystone proxy-server 

[app:proxy-server]
use = egg:swift#proxy
account_autocreate = true 

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

[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 tosupport token-less
# usage for anonymous referrers ('.r:*').
delay_auth_decision = true
auth_protocol = http
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

这里有两个token需要设置成keydtonek admin token一样。如果打算使用https的话需要修改端口为443,创建前面据说的证书文件,去掉证书文件配置前的注释,去掉[filter:authtoken]下的auth_protocol = http。如果打算使用非本地的或多个memcached服务器的话,需要在[filter:cache]下添加一项,多个地址用逗号分开,如下:
memcache_servers = 10.1.2.3:11211,10.1.2.4:11211

创建相应的rings

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
这里得注意中间这个3它表示存储对象在swift中的拷贝数,这个值得少于等于你的zone数,否则在后面rebalance的时候会报list index out of range错,在产品环境中推荐的值是3。创建完ring后会生成对应的builder文件,这些文件很重要,应当实时备份。

将每个存储节点的每个存储设备添加到各个ring

语法格式如下

swift-ring-builder account.builder addz<ZONE>-<STORAGE_LOCAL_NET_IP>:6002/<DEVICE> 100
swift-ring-builder container.builder addz<ZONE>-<STORAGE_LOCAL_NET_IP_1>:6001/<DEVICE> 100
swift-ring-builder object.builder addz<ZONE>-<STORAGE_LOCAL_NET_IP_1>:6000/<DEVICE> 100
比如说我这里计划将10.61.2.13作为zone 1,计划在上面建一个分区/dev/sdb1挂载到/srv/node/sdb1,那我的命令如下:
swift-ring-builder account.builder add z1-10.61.2.13:6002/sdb1100
swift-ring-builder container.builder add z1-10.61.2.13:6001/sdb1 100
swift-ring-builder object.builder add z1-10.61.2.13:6000/sdb1 100
如果还有其它分区要添加的话依样就是了,最后的100是一个表示权重的浮点数文档建议的值是100XTB,就是你分区有1TB大小就设100,2TB大小就设200。Zone的数是从1开始的依次递增。

验证ring

通过以上命令添加完实体后可通过以下命令来列出所ring的信息进行验证

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

Rebalance rings

添加完全后要rebalance 这些rings,命令如下

swift-ring-builder account.builder rebalance
swift-ring-builder container.builder rebalance
swift-ring-builder object.builder rebalance
完全后会产生account.ring.gz, container.ring.gz和 object.ring.gz三个文件,这些文件以后要复制到每个代理节点(如果添加了多个的话)及存储节点的/etc/swift目录下

最后确保配置文件的用户属性并运行代理服务

chown -R swift:swift /etc/swift
swift-init proxy start

修正:修正proxy启动时的ValueError:invalid literal for int() with base 10: 'true'错误,方法见这:
https://github.com/openstack/keystone/commit/bc803a4cede7ed2f39f4dc5c74977eedf46eb205
vim /usr/lib/python2.6/site-packages/keystone-2012.1-py2.6.egg/keystone/middleware/auth_token.py按下图修改


北方工业大学 | 云计算研究中心 | 姜永


原文链接:http://blog.csdn.net/ugyn109/article/details/7901157
加载中
返回顶部
顶部