CentOS 6.2下源代码安装OpenStack图文详解(8)

最近几天一直在弄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

创建相应的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  

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://www.heiqu.com/27cf8aa4b835e702a452c17a79bcdce6.html