最近几天一直在弄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
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
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
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按下图修改