OpenStack版本升级之Swift
Swift升级的一般流程Swift升级的一般流程见参考文档,摘抄如下:
As always, a production Swift cluster can be upgraded live, with no downtime for clients. The normal upgrade path is:
Stop the background processes
Upgrade the packages
Reload the processes (eg swift-init object reload)
Start the background processes
A normal upgrade process will upgrade one storage server in one zone (a "canary node") to check if any unforseen issue arise.
After than node is upgraded, upgrade the other storage nodes in that zone. Next, upgrade each of the remaining zones in turn.
Finally, upgrade each of your proxy servers (one at time).
F版对依赖库的变化
F版对依赖库的变化主要是添加了一个新的依赖python-swiftclient,另外放宽Webob的版本要求为>=1.0.8,<1.3,详情如下:
$ git diff origin/stable/essex:tools/pip-requires origin/stable/folsom:tools/pip-requires > diff
$ cat diff
diff --git a/origin/stable/essex:tools/pip-requires b/origin/stable/folsom:tools/pip-requires
index f9ea5f2..28bc426 100644
--- a/origin/stable/essex:tools/pip-requires
+++ b/origin/stable/folsom:tools/pip-requires
@@ -1,4 +1,4 @@
-WebOb==1.0.8
+WebOb>=1.0.8,<1.3
configobj==4.7.1
eventlet==0.9.15
greenlet==0.3.1
@@ -6,3 +6,6 @@ netifaces==0.6
pastedeploy==1.3.3
simplejson==2.0.9
xattr==0.4
+
+# Install python-swiftclient from git
+https://github.com/openstack/python-swiftclient/zipball/master#egg=python-swiftclient
升级存储节点
停止现有服务,并备份配置文件
# ../swift-helper stop
Signal object-serverpid: 4016signal: 15
object-server (4016) appears to have stopped
Signal object-replicatorpid: 4032signal: 15
object-replicator (4032) appears to have stopped
Signal object-updaterpid: 4059signal: 15
object-updater (4059) appears to have stopped
Signal object-auditorpid: 4068signal: 15
object-auditor (4068) appears to have stopped
Signal container-serverpid: 4090signal: 15
container-server (4090) appears to have stopped
Signal container-replicatorpid: 4109signal: 15
container-replicator (4109) appears to have stopped
Signal container-updaterpid: 4115signal: 15
container-updater (4115) appears to have stopped
Signal container-auditorpid: 4123signal: 15
container-auditor (4123) appears to have stopped
Signal account-serverpid: 4129signal: 15
account-server (4129) appears to have stopped
Signal account-replicatorpid: 4137signal: 15
account-replicator (4137) appears to have stopped
Signal account-auditorpid: 4143signal: 15
account-auditor (4143) appears to have stopped
# cp -R /etc/swift ./
下载并安装相关软件
# pip install -d ./ --no-install python-swiftclient
Downloading/unpacking python-swiftclient
Downloading python-swiftclient-1.2.0.tar.gz (46Kb): 46Kb downloaded
Saved ./python-swiftclient-1.2.0.tar.gz
Running setup.py egg_info for package python-swiftclient
Downloading/unpacking simplejson (from python-swiftclient)
Downloading simplejson-2.6.2.tar.gz (53Kb): 53Kb downloaded
Saved ./simplejson-2.6.2.tar.gz
Running setup.py egg_info for package simplejson
Successfully downloaded python-swiftclient simplejson
Cleaning up...
# pip install --upgrade simplejson-2.6.2.tar.gz python-swiftclient-1.2.0.tar.gz
# wget https://github.com/openstack/swift/archive/stable/folsom.zip
# unzip folsom
# cd swift-stable-folsom/
# python setup.py install
修改配置文件,我的最终的配置文件如下,这里要注意的是前两个配置文件中的db_preallocation项,对于采用SSD盘的应当采用默认的关闭,对于一般的硬盘应当打开,相关说明见这里
# cat account-server.conf
workers = 2
db_preallocation = on
pipeline = recon account-server
use = egg:swift#account
use = egg:swift#recon
# cat container-server.conf
workers = 4
db_preallocation = on
pipeline = recon container-server
use = egg:swift#container
use = egg:swift#recon
# cat object-server.conf
workers = 8
pipeline = recon object-server
use = egg:swift#object
use = egg:swift#recon
创建缓存目录
# mkdir /var/cache/swift
# chown swift:swift /var/cache/swift
启动相关服务
# swift-init object container account reload
No container-server running
Starting container-server...(/etc/swift/container-server.conf)
No account-server running
Starting account-server...(/etc/swift/account-server.conf)
No object-server running
Starting object-server...(/etc/swift/object-server.conf)
# ./swift-helper restart
Signal object-serverpid: 7320signal: 15
object-server (7320) appears to have stopped
Starting object-server...(/etc/swift/object-server.conf)
No object-replicator running
Starting object-replicator...(/etc/swift/object-server.conf)
No object-updater running
Starting object-updater...(/etc/swift/object-server.conf)
No object-auditor running
Starting object-auditor...(/etc/swift/object-server.conf)
Signal container-serverpid: 7305signal: 15
container-server (7305) appears to have stopped
Starting container-server...(/etc/swift/container-server.conf)
No container-replicator running
Starting container-replicator...(/etc/swift/container-server.conf)
No container-updater running
Starting container-updater...(/etc/swift/container-server.conf)
No container-auditor running
Starting container-auditor...(/etc/swift/container-server.conf)
Signal account-serverpid: 7312signal: 15
account-server (7312) appears to have stopped
Starting account-server...(/etc/swift/account-server.conf)
No account-replicator running
Starting account-replicator...(/etc/swift/account-server.conf)
No account-auditor running
Starting account-auditor...(/etc/swift/account-server.conf)
升级完成一个存储节点后再按照升级流程依次完成其它存储节点的升级。
升级代理节点
升级代理节点基本同上面存储节点的升级,停止代理服务,安装相关软件,修改代理服务配置文件,启动代理服务。升级的时候需要注意几点,一是swift3已经从swift项目里移出了,有需要的话得另外安装(详情)。二是F版可以使用新的或旧的rings而E版只可以使用旧的rings,如果要考虑降级的话先不要更新rings(详情)。三是缓存的平滑过度问题(详情)。最后贴一下我修改后的配置:
# cat /etc/swift/proxy-server.conf
bind_port = 8888
pipeline = catch_errors healthcheck cache ratelimit formpost tempurl authtoken keystoneauth staticweb proxy-logging name_check proxy-server
use = egg:swift#proxy
account_autocreate = true
paste.filter_factory = keystone.middleware.auth_token:filter_factory
auth_host = localhost
auth_port = 35357
auth_protocol = http
auth_uri = http://localhost:5000/
admin_tenant_name = service
admin_user = swift
admin_password = service123
delay_auth_decision = 1
signing_dir = /etc/swift
use = egg:swift#keystoneauth
operator_roles = admin, swiftoperator
use = egg:swift#healthcheck
use = egg:swift#memcache
use = egg:swift#ratelimit
use = egg:swift#catch_errors
use = egg:swift#staticweb
use = egg:swift#tempurl
use = egg:swift#formpost
use = egg:swift#name_check
use = egg:swift#proxy_logging
北方工业大学 |
云计算研究中心 | 姜永
页:
[1]