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

来源:互联网 发布:美国eia数据在那里看 编辑:程序博客网 时间:2024/06/02 10:36

参考文档: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 memcachedpip 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 swiftmkdir /etc/swiftchown –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/swiftopenssl req -new -x509 -nodes -out cert.crt -keyout cert.key

创建代理服务的配置文件

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

[DEFAULT]bind_port = 8888user = swift#cert_file = /etc/swift/cert.crt#key_file = /etc/swift/cert.key [pipeline:main]pipeline = catch_errors healthcheck cache swift3 authtoken keystone proxy-server [app:proxy-server]use = egg:swift#proxyaccount_autocreate = true [filter:swift3]use = egg:swift#swift3 [filter:keystone]paste.filter_factory =keystone.middleware.swift_auth:filter_factoryoperator_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 = trueauth_protocol = httpservice_port = 5000service_host = 127.0.0.1auth_port = 35357auth_host = 127.0.0.1auth_token = 012345SECRET99TOKEN012345admin_token = 012345SECRET99TOKEN012345 [filter:cache]use = egg:swift#memcacheset 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/swiftswift-ring-builder account.builder create 18 3 1swift-ring-builder container.builder create 18 3 1swift-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 add z<ZONE>-<STORAGE_LOCAL_NET_IP>:6002/<DEVICE> 100swift-ring-builder container.builder add z<ZONE>-<STORAGE_LOCAL_NET_IP_1>:6001/<DEVICE> 100swift-ring-builder object.builder add z<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/sdb1100swift-ring-builder container.builder add z1-10.61.2.13:6001/sdb1 100swift-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.builderswift-ring-builder container.builderswift-ring-builder object.builder

Rebalance rings

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

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

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

chown -R swift:swift /etc/swiftswift-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按下图修改


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