OpenStack版本升级之Nova

来源:互联网 发布:python3 人工智能 编辑:程序博客网 时间:2024/05/22 13:32

F版对依赖库的变化

F版Nova对依赖库的变化比较大,官网文档就提到了5点,另外还增加和去掉了一些依赖,详情如下:

[plain] view plaincopy
  1. [ugyn@localhost nova]$ git diff origin/stable/essex:tools/pip-requires origin/stable/folsom:tools/pip-requires  
  2. diff --git a/origin/stable/essex:tools/pip-requires b/origin/stable/folsom:tools/pip-requires  
  3. index 3359f64..d1a2bcf 100644  
  4. --- a/origin/stable/essex:tools/pip-requires  
  5. +++ b/origin/stable/folsom:tools/pip-requires  
  6. @@ -1,27 +1,23 @@  
  7. -SQLAlchemy>=0.7.3  
  8. +SQLAlchemy>=0.7.8,<=0.7.9  
  9.  Cheetah==2.4.4  
  10.  amqplib==0.6.1  
  11.  anyjson==0.2.4  
  12.  boto==2.1.1  
  13. -carrot==0.10.5  
  14. -eventlet  
  15. +eventlet>=0.9.17  
  16.  kombu==1.0.4  
  17. -lockfile==0.8  
  18. -lxml==2.3  
  19. -python-daemon==1.5.5  
  20. -python-gflags==1.3  
  21. -python-novaclient  
  22. +lxml>=2.3,<=2.3.5  
  23.  routes==1.12.3  
  24.  WebOb==1.0.8  
  25. -wsgiref==0.1.2  
  26.  greenlet>=0.3.1  
  27.  PasteDeploy==1.5.0  
  28.  paste  
  29.  sqlalchemy-migrate>=0.7.2  
  30.  netaddr  
  31. -glance>=2011.3.1  
  32.  suds==0.4  
  33.  paramiko  
  34. -feedparser  
  35.  Babel>=0.9.6  
  36.  iso8601>=0.1.4  
  37. +httplib2  
  38. +setuptools_git>=0.4  
  39. +python-quantumclient>=2.0  
  40. +python-glanceclient>=0.5.0,<2  

备份配置文件及数据库

[plain] view plaincopy
  1. [root@stack1 update_nova]# cp -R /etc/nova ./nova-etc  
  2. [root@stack1 update_nova]# mysqldump -h10.61.2.12 -unova -p nova > nova.sql  

下载相关升级软件

考虑到nova的升级涉及多个节点,所以最好把这些包都下载到本地然后写一个简单的脚本安装比较合适。用pip下载依赖包时容易出现timeout重新运行命令即可。

[plain] view plaincopy
  1. [root@stack1 update_nova]# pip install -d ./ --no-install SQLAlchemy eventlet httplib2 setuptools_git python-quantumclient python-glanceclient  
  2. [root@stack1 update_nova]# ll *gz *zip  
  3. -rw-r--r-- 1 root root   69297 Nov 19 16:11 argparse-1.2.1.tar.gz  
  4. -rw-r--r-- 1 root root  123636 Nov 19 16:10 cliff-1.3.tar.gz  
  5. -rw-r--r-- 1 root root   21147 Nov 19 16:20 cmd2-0.6.4.tar.gz  
  6. -rw-r--r-- 1 root root  638335 Nov 19 16:18 distribute-0.6.30.tar.gz  
  7. -rw-r--r-- 1 root root  262991 Nov 19 16:04 eventlet-0.9.17.tar.gz  
  8. -rw-r--r-- 1 root root   72790 Nov 19 16:10 greenlet-0.4.0.zip  
  9. -rw-r--r-- 1 root root  116500 Nov 19 16:04 httplib2-0.7.7.zip  
  10. -rw-r--r-- 1 root root    9621 Nov 19 16:20 jsonschema-0.2.zip  
  11. -rw-r--r-- 1 root root   22779 Nov 19 16:11 prettytable-0.6.1.zip  
  12. -rw-r--r-- 1 root root 1418892 Nov 19 16:17 pyparsing-1.5.6.tar.gz  
  13. -rw-r--r-- 1 root root   64924 Nov 19 16:09 python-glanceclient-0.5.1.tar.gz  
  14. -rw-r--r-- 1 root root   57538 Nov 19 16:17 python-keystoneclient-0.1.3.tar.gz  
  15. -rw-r--r-- 1 root root   43397 Nov 19 16:05 python-quantumclient-2.1.tar.gz  
  16. -rw-r--r-- 1 root root    3646 Nov 19 16:04 setuptools-git-0.4.2.tar.gz  
  17. -rw-r--r-- 1 root root   53228 Nov 19 16:12 simplejson-2.6.2.tar.gz  
  18. -rw-r--r-- 1 root root 2649932 Nov 19 16:03 SQLAlchemy-0.7.9.tar.gz  
  19. -rw-r--r-- 1 root root    6717 Nov 19 16:18 warlock-0.5.0.tar.gz  
  20. [root@stack1 update_nova]# git clone git://github.com/openstack/nova.git  
  21. [root@stack1 update_nova]# cd nova  
  22. [root@stack1 nova]# git checkout -b folsom origin/stable/folsom  

配置Nova

将F的配置文件拷入到你的升级目录下(如update_nova)并修改nova.conf和api-paste.ini,注意,我这里用eth1作为public_interface,如果只有一个网卡的话public_interface设为br100即可,另外,我这里使用ccip代表控制节点ip,nodeip代表本地节点ip便于后面运行升级脚本:

[plain] view plaincopy
  1. [root@stack1 nova]# cp -R etc/nova ../etc  
  2. [root@stack1 nova]# cd ..  
  3. [root@stack1 update_nova]# cat etc/nova.conf  
  4. [DEFAULT]  
  5. # LOGS/STATE  
  6. #verbose=True  
  7. logdir=/var/log/nova  
  8. state_path=/var/lib/nova  
  9. lock_path=/var/lock/nova  
  10.   
  11. # ROOTWRAP  
  12. rootwrap_config=/etc/nova/rootwrap.conf  
  13.   
  14. # AUTHENTICATION  
  15. auth_strategy=keystone  
  16.   
  17. # SCHEDULER  
  18. compute_scheduler_driver=nova.scheduler.filter_scheduler.FilterScheduler  
  19.   
  20. # VOLUMES  
  21. volume_group=nova-volumes  
  22. #volume_name_template=volume-%08x  
  23. iscsi_helper=tgtadm  
  24.   
  25. # DATABASE  
  26. sql_connection=mysql://nova:nova@ccip/nova  
  27.   
  28. # COMPUTE  
  29. libvirt_type=kvm  
  30. compute_driver=libvirt.LibvirtDriver  
  31. instances_path=/var/lib/nova/instances  
  32. instance_name_template=instance-%08x  
  33. api_paste_config=/etc/nova/api-paste.ini  
  34. allow_resize_to_same_host=True  
  35. #resume_guests_state_on_host_boot=True  
  36. #start_guests_on_host_boot=True  
  37.   
  38. # APIS  
  39. osapi_compute_extension=nova.api.openstack.compute.contrib.standard_extensions  
  40. cc_host=ccip  
  41. metadata_host=ccip  
  42. metadata_listen=0.0.0.0  
  43. ec2_host=ccip  
  44. ec2_dmz_host=ccip  
  45. ec2_url=http://ccip:8773/services/Cloud  
  46. keystone_ec2_url = http://ccip:5000/v2.0/ec2tokens  
  47. nova_url=http://ccip:8774/v1.1/  
  48. s3_host=ccip  
  49. s3_dmz=ccip  
  50.   
  51. # RABBITMQ  
  52. # rabbit_host=ccip  
  53. # rabbit_userid=guest  
  54. # rabbit_password=service123  
  55.   
  56. # QPID  
  57. rpc_backend=nova.rpc.impl_qpid  
  58. qpid_hostname=ccip  
  59.   
  60. # GLANCE  
  61. image_service=nova.image.glance.GlanceImageService  
  62. glance_host=ccip  
  63. glance_api_servers=ccip:9292  
  64.   
  65. # NETWORK  
  66. network_manager=nova.network.manager.FlatDHCPManager  
  67. force_dhcp_release=True  
  68. dhcp_release_time=1200  
  69. dhcpbridge_flagfile=/etc/nova/nova.conf  
  70. dhcpbridge=/usr/bin/nova-dhcpbridge  
  71. auto_assign_floating_ip=True  
  72. routing_source_ip=ccip  
  73. firewall_driver=nova.virt.libvirt.firewall.IptablesFirewallDriver  
  74. my_ip=nodeip  
  75. public_interface=eth1  
  76. vlan_interface=eth0  
  77. flat_network_bridge=br100  
  78. flat_interface=eth0  
  79. fixed_range=10.0.0.0/24  
  80.   
  81. # NOVNC CONSOLE  
  82. novncproxy_base_url=http://ccip:6080/vnc_auto.html  
  83. xvpvncproxy_base_url=http://ccip:6081/console  
  84. vncserver_proxyclient_address=nodeip  
  85. vncserver_listen=0.0.0.0  
  86. [root@stack1 update_nova]# tail -n 9 etc/api-paste.ini  
  87. [filter:authtoken]  
  88. paste.filter_factory = keystone.middleware.auth_token:filter_factory  
  89. auth_host = ccip  
  90. auth_port = 35357  
  91. auth_protocol = http  
  92. admin_tenant_name = service  
  93. admin_user = nova  
  94. admin_password = service123  
  95. signing_dirname = /tmp/keystone-signing-nova  

创建升级脚本

[plain] view plaincopy
  1. [root@stack1 update_nova]# cat install.sh  
  2. #!/usr/bin/env bash  
  3.   
  4. TOP_DIR=$(cd $(dirname "$0") && pwd)  
  5. nodeip=${1:-null}  
  6. ccip=${2:-10.61.2.12}  
  7.   
  8. if [[ "$nodeip" == "null" ]]; then  
  9.     echo "Usage: `basename $0` nodeip [ccip]"  
  10.     exit 1  
  11. fi  
  12.   
  13. pip install --upgrade  simplejson-2.6.2.tar.gz prettytable-0.6.1.zip argparse-1.2.1.tar.gz httplib2-0.7.7.zip  
  14. pip install jsonschema-0.2.zip pyparsing-1.5.6.tar.gz  
  15. pip install cmd2-0.6.4.tar.gz distribute-0.6.30.tar.gz warlock-0.5.0.tar.gz python-keystoneclient-0.1.3.tar.gz cliff-1.3.tar.gz greenlet-0.4.0.zip  
  16. pip install python-glanceclient-0.5.1.tar.gz python-quantumclient-2.1.tar.gz setuptools-git-0.4.2.tar.gz eventlet-0.9.17.tar.gz SQLAlchemy-0.7.9.tar.gz  
  17.   
  18. file=$(find /usr/lib -name "subprocess.py")  
  19. sed -i 's/0.01)/0.01, timeout=None)/' $file  
  20.   
  21. if [[ -f /etc/tgt/targets.conf ]] && ! grep -q 'volumes' /etc/tgt/targets.conf  
  22. then  
  23.     sed -i 's;\(#include.*\);\1\ninclude /var/lib/nova/volumes/\*;' /etc/tgt/targets.conf  
  24. fi  
  25.   
  26. cd nova/  
  27. python setup.py install > $TOP_DIR/../install.info  
  28. cd ..  
  29.   
  30. rm -fr /etc/nova/*  
  31. cp -R etc/* /etc/nova/  
  32. sed -i -e "s/ccip/$ccip/g" -e "s/nodeip/$nodeip/g" /etc/nova/nova.conf /etc/nova/api-paste.ini  

升级各节点

使用如下命令将文件传输到各节点,停止节点的nova服务,然后运行升级脚本升级nova。全部升级完成后用命令nova-manage db sync同步数据库,然后就可以启动各服务了。

[plain] view plaincopy
  1. [root@stack1 update_nova]# cd ..  
  2. [root@stack1 ~]# rsync -az --exclude=update_nova/.git update_nova root@10.61.2.5:/root/  
  3. [root@stack1 ~]# ssh root@10.61.2.5  
  4. [root@stack5 ~]# cd update_nova/  
  5. [root@stack5 update_nova]# service nova-compute stop  
  6. [root@stack5 update_nova]# ./install.sh 10.61.2.5  

注意事项

建议仔细阅读Nova的Upgrade Notes
1.nova-volume到cinder的迁移,这个打算全部升级完成后再搞
2.配置targets.conf,见上面的升级脚本
3.rootwrap的配置,由于我是用root运行nova的(尝试过用nova用户运行,但是在libvirt这一个的权限没搞好,后面就没弄了),只简单的设置了rootwrap_config来代替原来的root_helper 
4.nova.conf中用compute_driver=libvirt.LibvirtDriver代替了connection_type=libvirt 
5.flavors的变化。。。

升级时遇到的一些问题

1.同步数据库失败,报:CRITICAL nova [-] /usr/lib/python2.6/site-packages/nova-2012.2.1-py2.6.egg/nova/db/sqlalchemy/migrate_repo 
我刚开始打算用命令wget https://github.com/openstack/nova/archive/stable/folsom.zip从github直接获取源码安装,可是这样获取的源码缺少文件,导致上述问题。解决办法:使用git clone git://github.com/openstack/nova.git获取源码 
2.启动nova-network、nova-compute时报:CRITICAL nova [-] wait() got an unexpected keyword argument 'timeout' 
这是老问题了,在E版就有,因为升级了eventlet的原故把原来的修改覆盖了(详情),解决办法见上面的脚本。
3.启动nova-volume报: CRITICAL nova [-] %x format: a number is required, not unicode 
这是由于沿用了E版中的一些配置造成的,注释掉volume_name_template=volume-%08x即可。