调试OpenStack时遇到的主要问题(by quqi99)

作者:张华  发表于:2014-11-09
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明

http://blog.csdn.net/quqi99 )

今天想debug一下nova-compute进程, 用devstack迅速安装之后, kill掉nova-compute进程,然后修改nova/cmd/__init__.py文件的“eventlet.monkey_patch(os=False)”为“eventlet.monkey_patch(all=False, socket=True, select=True)", 最后在eclipse中启动nova pydev工程的nova-compute进程。运行devstack无外乎就是想快速的搭建一个debug环境去将精力集中到想要调试的代码, 但是经常性的devstack或其他不相干的组件喜欢拖一下后腿。总结一下:

1, 执行第一次‘nova boot‘命令可以启动一个虚机, 但执行第二次时直接在nova-schedule那里就ERROR了, 机器配置还行,资源肯定是够的。所以调试了一番, 问题找到了, 在nova.conf文件的default段添加配置"service_down_time = 7200", 搞定。那是因为debug时间长了, nova-compute进程没有及时向DB汇报它还活着的状态, 这样nova-schedule误认为没有合适的计算节点可供调度了。

2, 在eclipse里直接运行没问题, 但只要一debug要调用nova-conductor的方法时断点就hang在那里出不来了, 日志中时不时出现”MessagingTimeout: Timed out waiting for a reply to message“, 来点绝的, 直接修改nova.conf文件,添加:

[conductor]
use_local=true

如果计算节点宕机了,但没有在nova里将这个host disable掉,在 service_down_time and report_interval setting时间内nova-schedule会误认为这个host仍然是alive的,从而出问题了。 另外也可能是olso的bug, https://bugs.launchpad.net/oslo.messaging/+bug/1338732

或者去掉RetryFilter,

scheduler_default_filters=AvailabilityZoneFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter

3, 我将代码从master分支降级到icehouse后运行devstack时迁移DB的脚本报错不是说缺这个就是缺那个, 删除那个高版本的pyc文件, 搞定。

find . -name "*.pyc" -exec rm -rf {} \;

4, 在我的印象中, 运行devstack时, glance是最喜欢抽风的组件, 没空去搭理它, 那就在stack.sh里直接注释掉upload_image那行,最后再手动添加镜像了。

wget http://cdn.download.cirros-cloud.net/0.3.2/cirros-0.3.2-x86_64-disk.img
glance image-create --name=cirros-64 --disk-format=qcow2 --container-format=bare --is-public=True --progress < cirros-0.3.2-x86_64-disk.img

5, 和os-queues-api-version相关的error, 那是因为现在marnoi更名为zaqar, 需用zaqarclient代替marconiclient, 所以: sudo pip uninstall python_marconiclient  。不然python-openstackclient会去扫描/usr/local/lib/python2.7/dist-packages目录下的所有openstack.cli.extension模块去试图加载,这样zaqarclient与marconiclient两个都加载了重复了。

PLUGIN_MODULES.extend(get_plugin_modules(
    ‘openstack.cli.extension‘,
))

它造成的后果就是安装keystone的create_keystone_accounts脚本时会报“argparse.ArgumentError: argument --os-queues-api-version: conflicting option string(s): --os-queues-api-version”从而造成数据库里没有初始数据,最终你看到的错误是:

/bak/openstack/devstack/functions-common:286:die
2014-12-23 01:38:17.229 | [ERROR] /bak/openstack/devstack/functions-common:1192 Keystone fail to get token

6, openstack-client与其他如python-neutronclient等库版本不一致的问题,可通过配置LIBS_FROM_GIT配置让python-neutronclient这些库统一走git将库安装到/usr/local/lib/python2.7/dist-packages/python_neutronclient-2.3.10.post2-py2.7.egg-info
running install_scripts, 而不是pypi

LIBS_FROM_GIT=python-neutronclient,neutron-vpnaas,neutron-fwaas,neutron-lbaas,python-keystoneclient,python-glanceclient,python-novaclient,python-cinderclient

就会造成有时候使用openstack-client命令时报如下错误 :

+++ openstack project create admin --or-show -f value -c id
2014-12-23 01:44:30.542 | ERROR: openstackclient.shell Exception raised: python-neutronclient 2.3.9.40.g9ed73c0 is installed but python-neutronclient<3,>=2.3.6 is required by []

7, oslo的那些模块也是很容易出问题的确保用最新的代码即可。

for olso_pro in `pip freeze |grep oslo |awk -F ‘==‘ ‘{print $1}‘`; do
   echo ‘upgrade ‘ $olso_pro
   sudo pip uninstall -y $olso_pro
   sudo pip install --upgrade $olso_pro
done

8, 有时候, sudo python setup.py install将data文件安装到了/var/lib/etc/neutron目录下,后面加--prefix=/ 可以将其它装到/etc/neutron目录下

9, 有时候将openstack源代码从一个机器拷到另一个机器上运行时,这一行出现错误一个如下的SSL方面的错误,需:rm -rf ../requirements/.venv/

env http_proxy= https_proxy= no_proxy= PIP_FIND_LINKS=file:///bak/openstack/.wheelhouse /bak/openstack/requirements/.venv/bin/pip install -U pbr

10, 虚机不能ping主机。检查虚机的eth0是否以非internal方式加到了ovs网络里,且路由又配置在eth0上

sudo ovs-vsctl -- --may-exist add-port br-phy eth0 -- set interface eth0 type=internal

http://blog.csdn.net/quqi99/article/details/40949799

时间: 2024-10-24 23:39:27

调试OpenStack时遇到的主要问题(by quqi99)的相关文章

[转]使用eclipse+pydev远程调试OpenStack

作者:张华  发表于:2014-01-17版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.csdn.net/quqi99 ) 1, 对于要远程调试的WSGI web应用中,添加如下代码,其中172.16.1.122是指远程安装eclipse机器的ip地址.import pydevdpydevd.settrace('172.16.1.122', 1234, stdoutToServer=False, stderrToServer=

VELT-0.1.5开发: gdb串口调试内核时信息丢失的问题

快乐虾 http://blog.csdn.net/lights_joy/(QQ群:Visual EmbedLinux Tools 375515651) 欢迎转载,但请保留作者信息 本文仅适用于vs2013 + velt-0.1.5 VELT的全称是Visual EmbedLinuxTools,它是一个与visual gdb类似的visual studio插件,用以辅助完成Linux开发.利用这个插件,将可以在visual studio的IDE中进行Linux应用程序的开发(包括编译和调试),也可

gdb调试运行时的程序小技巧

使用gdb调试运行时的程序小技巧 标签: 未分类 gdb pstack | 发表时间:2012-10-15 04:32 | 作者:士豪 分享到: 出处:http://rdc.taobao.com/blog/cs 原创文章,欢迎转载.转载请注明:转载自淘宝核心系统团队博客,谢谢! 原文链接地址: 使用gdb调试运行时的程序小技巧 下面介绍我调试时经常遇到的三种问题,如果大家也有类似的问题交流一下解决方法: 情景1:在不中止程序服务的情况下,怎么调试正在运行时的程序 情景2:需要同时看几个变量的值或

eclipse + pydev远程调试OpenStack

一.安装eclipse.PyDev插件 官方eclipse下载地址:https://www.eclipse.org/downloads/ 这里不详细描述了,先装java运行环境,再装eclipse就对了. 安装PyDev插件:打开eclipse --> Help --> Install New Software:详情参考这(http://www.pydev.org/manual_101_install.html) 二.配置Pydev debug 配置debug server信息 三.远程调试O

[转]使用gdb调试运行时的程序小技巧

原创文章,欢迎转载.转载请注明:转载自淘宝核心系统团队博客,谢谢!原文链接地址:使用gdb调试运行时的程序小技巧 下面介绍我调试时经常遇到的三种问题,如果大家也有类似的问题交流一下解决方法:情景1:在不中止程序服务的情况下,怎么调试正在运行时的程序情景2:需要同时看几个变量的值或者批量查看多个core文件的堆栈信息怎么办情景3:遇到需要查看.队列.链表.树.堆等数据结构里的变量怎么办1. 情景1:在不中止程序服务的情况下,怎么调试正在运行时的程序我们在生产环境或者测试环境,会遇到一些异常,我们需

解决Myeclipse在调试(debug)时无法显示变量值问题

解决Myeclipse在调试(debug)时无法显示变量值问题 突然发现myeclipse在调试时当鼠标放在变量上面时无法显示变量值了 ctrl+shift+D居然提示cannot be resolved 网上查到的最多的方法是 Window->Preferences->Java->Editor->Hovers 将[Variable Values]选择就可以,假设[Combined Hover]已经勾选,取消并勾选[Variable Values] 这样的方法适用的应该不是我的这样

eclipse调试openstack的nova代码

前段时间一直在研究openstack的nova部分的代码.特别想知道,如何用eclipse来调试代码,也在论坛上问了别人,无果,没人回复我.最后还是自己摸索出了出路. 下面写出自己探索之路.我是用devstack搭建的openstack环境.搭建步骤可以参见我另一篇博客文章. 我的nova代码是这段代码里面没有bin目录,这就使得程序没有入口.但是devstack安装的环境中,在/usr/loacl/bin/目录下有nova-api文件. 在你自己的项目下,新建一个bin文件下,将nova-ap

LINUX下IDEA等工具调试项目时提示:Unable to open debugger port

在Ubuntu下调试项目时使用TOMCAT容器,在设置好相应的TOMCAT LOCAL 路径及相关信息后,点击调试项目出现: Unable to open debugger port : java.net.SocketException "Socket closed" 网上搜了一大堆,好像都和自己的情况不一样. 后面偶然发现TOMCAT的Bin目录里面的.sh全部都没有可执行权限.果断切换到Bin目录下: chmod +x *.sh; 一切都顺顺利利的了. 原来是因为自己提取文件的时候

Eclipse debug断点调试代码时出现source not found问题

偶尔调试代码的时候会出现这种事情,之前并没有特别注意,今天稍微搜集一下相关资料: 1.跳转到的代码的确没有源码,下载源码后选择源码位置后便会正常显示源码. 2.源码和class文件不一致.即便勾选了auto build选项,eclipse依然存在class没有实时编译的情况,致使我们当前的代码和编译的class文件不统一,导致debug断点时定位源码失败.此时只要重新build或是重新clean package一下就好了.