易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 3345|回复: 1
收起左侧

openstack常见错误

[复制链接]
发表于 2018-9-2 15:02:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?开始注册

x
以下主要为安装部署过程中遇到的一些问题,因为openstack版本问题,带来的组件差异导致不同的版本安装的方法也完全不一样。经过测试,目前已可成功部署Essex和Grizzly两个版本,其中间还有个版本是Folsom,这个版本没有部署成功,也没有花太多时间去研究,因为Folsom版本中使用的quantum组件还不成熟,对于网络连通性还有很多问题,网上也很少有成功的案例,大多数人使用的还是folsom+nova-network模式。
) _7 K+ p4 T9 X
' y5 y5 j- R+ f; ?, m, _3 ?到了Grizzly版本,quantum组件才比较稳定,可以正常使用,自己也花了很多时间研究,现在已可以成功部署多节点环境。以下是部署过程中遇到的一些问题,包括Essex和Grizzly两个版本。国内网上关于这方面的资料很少,很多资料也都是国外网站上看到的。而且很多情况下日志错误信息相同,但导致错误的原因却不尽相同,这时候就需要仔细分析其中的原理,才能准确定位。遇到错误并不可怕,我们可以通过对错误的排查加深对系统的理解,这样也是好事。
/ t! ]8 r0 [/ H  u' ]) C  a: o: C  k0 s# X1 u  ?/ ]1 t4 N. u9 s
关于安装部署,网上有一些自动化的部署工具,如devstack和onestack,一键式部署。如果你是初学者,并不建议你使用这些工具,很明显,这样你学不到任何东西,不会有任何收获。如果没有问题可以暂时恭喜你一下,一旦中间环节出现错误信息,你可能一头雾水,根本不知道是哪里错了,加之后期的维护也是相当困难的。你可能需要花更多的时间去排查故障。因为你根本不了解中间经过了哪些环节,需要做哪些配置!这些工具大多数是为了快速部署开发环境所用,正真生产环境还需要我们一步一步来操作。这样有问题也可快速定位排查错误。2 M" C4 D8 |8 L- W1 ~* y  o8 c
" A, y: Z, x( z8 \; E. @4 ?) i
本文仅是针对部署过程中的一些错误信息进行总结梳理,并给予解决办法,这些情况是在我的环境里遇到的,并成功解决的,可能会因为环境的不同而有所差异,仅供参考。
! G2 ~1 L6 g6 R: `9 A6 a! i8 O1 h' t
! o, U# I, Y4 }/ e6 o; r3 {8 x1、检查服务是否正常:
' Q; K+ m, Q& d! u9 x( S' E: J- i7 P- o# E8 D8 K8 S; ^
root@control:~# nova-manage service list+ x7 y1 R" S+ |% B+ T# ?: i
* G/ F0 E2 C4 Q
Binary           Host                                 Zone             Status     State Updated_At/ ^7 v8 f& J9 d% _+ h7 Z; a

" x! @6 k: ~, K7 ^3 m5 }# ^+ pnova-cert        control                              internal         enabled    :-)   2013-04-26 02:29:44+ Q" f9 d  J. N$ d  E
9 @3 s* }  u6 a; s' E
nova-conductor   control                              internal         enabled    :-)   2013-04-26 02:29:42/ o2 _! E, q* H% a. I+ j
% M( ~  T9 _+ y
nova-consoleauth control                              internal         enabled    :-)   2013-04-26 02:29:44" T, y7 e  T9 Q5 b0 H" {/ z* s
6 J* Q) }* E, W7 `* _6 l9 ^2 n; H" `
nova-scheduler   control                              internal         enabled    :-)   2013-04-26 02:29:47% p- z1 s% f/ m1 H2 t

0 m. h' J# r1 p- B7 v' a2 f* Lnova-compute     node-01                              nova             enabled    :-)   2013-04-26 02:29:46
4 r8 }2 n6 G- ]! Q" i; }8 U8 ~/ l
( T4 j1 y8 R) O' }nova-compute     node-02                              nova             enabled    :-)   2013-04-26 02:29:466 `- S! n& `# S6 ?: `7 f3 F7 @

) X+ T8 P# b9 m- K, d% D" m- W9 F$ Cnova-compute     node-03                              nova             enabled    :-)   2013-04-26 02:29:42* I. M- z. v$ C2 V

# n* E* P$ a5 v4 W. l* p: U6 ?$ z7 B  J
如果看到都是笑脸状态,说明nova的服务属于正常状态,如果出现XXX,请查看该服务的相关日志信息,在/var/log/nova/下查看,通过日志一般可以分析出错误的原因。
+ `: R* R; ]! [/ |, e
7 c+ \  o1 M9 \: o( p! d2、libvirt错误
; D8 u4 p% k+ u% G/ f* s1 [2 ~
" l% G" C7 \9 U$ X / E4 @# B; f1 p  x! r
4 |! e' M) S+ r
python2.7/dist-packages/nova/virt/libvirt/connection.py”, line 338, in _connect
- K0 f& }2 @+ l' y: k2013-03-0917:05:42 TRACE nova return libvirt.openAuth(uri, auth, 0)$ Q, o& f& K0 {+ H  Y' t& Y
2013-03-09 17:05:42 TRACE nova File “/usr/lib/python2.7/dist-packages/libvirt.py”, line 102, in openAuth6 n1 @/ A' @: C& g( A
2013-03-09 17:05:42 TRACE nova if ret is None:raise libvirtError(‘virConnectOpenAuth() failed’)
$ s  I' x  |  G" H2013-03-09 17:05:42 TRACE nova libvirtError: Failed to connect socket to ‘/var/run/libvirt/libvirt-sock’: No such file or directory+ W8 ]; u1 W! v) @' P
2013-03-09 22:05:41.909+0000: 12466: info : libvirt version: 0.9.8
0 o1 ]6 _. v2 i7 P( X2013-03-09 22:05:41.909+0000: 12466: error : virNetServerMDNSStart:460 : internal error Failed to create mDNS client: Daemon not running
% _3 x" B* x/ ^* P7 Z  z ' y4 y% m! J5 ]6 G1 ]0 d: D, y7 t: `

. f! f' _; ?3 P) z  h解决方案:
! t2 n2 `# B9 |
4 h! j+ ]3 T% X% L出现这种错误首先要查看/var/log/libvirt/libvirtd.log日志信息,日志里会显示:libvirt-bin service will not start without dbus installed.8 X, Y  H& Q# Z2 f, m
  A' X- d) E: E9 j9 Z
我们再查看ps –ea|grep dbus,确认dbus is running,然后执行apt-get install lxc  |& D, z. [1 y  r) z% f: p" T4 x

& Z2 b, V0 {2 {' O8 |; C3、Failed to add image
$ c7 _4 Z$ |# X' {; e& N
. q7 }/ F6 t% X& G2 I0 x- ?9 E6 FError:6 b) R: Y9 y( p
Failed to add image. Got error:
The request returned 500 Internal Server Error
( q- ~9 L& Y6 V$ x$ H$ X
1 k; e$ A) |. y, f0 m: H- y' Y2 O3 n8 r% X
解决方案:3 A$ Q! r( w2 v. p/ w
) _5 k& }: R, ?4 w$ t! d
环境变量问题,配置环境变量,在/etc/profile文件中新增:! i7 p7 i7 X- U& C2 N
7 V+ _! h9 u# t. U
OS_AUTH_KEY=”openstack” $ A6 ?0 w' Z1 ]3 G: u
OS_AUTH_URL=”http://localhost:5000/v2.0/”
; ^- V7 q3 o6 p& oOS_PASSWORD=”openstack”
. [- I! p" e4 Z; F; ?OS_TENANT_NAME=”admin”
. H, M+ \) l  V; x1 zOS_USERNAME=”admin”
/ F1 {/ Q: m, U
2 `4 \1 u; l" c/ K, X
$ X' x3 e1 y: [$ ~然后执行source  /etc/profile即可!当然你也可以不在profile里配置环境变量,但是只能临时生效,重启服务器就很麻烦,所以建议你还是写在profile里,这样会省很多麻烦。
4 r  _0 _0 T* d" ^
6 K8 a1 A+ X7 `% k; e; U$ u5 V4、僵尸实例的产生4 [: C: Y; X$ |& |( X' @, N

# {5 ~, s( W% R4 C) f9 B* z僵尸实例一般是非法的关闭nova或者底层虚拟机,又或者在实例错误时删除不了的错误,注意用virsh list检查底层虚拟机是否还在运行,有的话停掉,然后直接进入数据库删除。
4 I2 g8 `5 F5 V8 T7 O, _# D$ q6 L' Y& v
Nova instance not found! e$ o8 ]& C" E" g5 K) ~
8 A7 [' b7 q- t" \
Local file storage of the image files.  e* ]/ X! P  @, J' k; v

" d6 o2 }5 @4 k+ p) |0 R& \  LError:
0 e# P" e# ~9 {2 K+ ]2013-03-09 17:58:08 TRACE nova raise exception.InstanceNotFound(instance_id=instance_name)
6 g& H% A1 V; _/ j2013-03-09 17:58:08 TRACE nova InstanceNotFound: Instance instance-00000002 could not be found.3 u  h/ N  O2 A/ S0 @
2013-03-09 17:58:08 TRACE nova! z/ b3 X# X# I; v5 w* M8 V$ F" k

* q1 g. ]3 t) k+ r2 }$ g) W- O) @) S
& e& G8 G. Y' P8 v

6 q+ j( F; Y, o( M9 H+ z" d解决方案:4 @- V" h% w% ]7 z2 p8 g

% \& m# f/ J' D( G1 G0 o删除数据库中的僵尸实例或将数据库删除重新创建:3 S" V- ~  s7 Z' K) L2 C

! d+ ^( f4 X! t9 Y8 C8 G# ?! }a、删除数据库:
4 w+ b3 B4 l( F% G4 w2 h
' y  L6 w% c6 \/ i& x$mysql –u root –p+ M$ k1 M1 c3 b. @/ c8 b: j3 \6 B1 z
DROP DATABASE nova;
) y; R9 ~: [/ q; _, H
2 W9 [6 N  d* XRecreate the DB:
! |+ U6 _2 A3 _- \' L& J, CCREATE DATABASE nova; (strip formatting if you copy and paste any of this)
  A$ j) J  M, E3 }' a% M7 k; e! P- sGRANT ALL PRIVILEGES ON nova.* TO ‘novadbadmin’@'%’ IDENTIFIED BY ‘<password>’;
* F' ?, ?0 W# D* [! RQuit9 t+ G$ ~1 H( T' e+ _
9 R' N1 C1 f) o# q/ j
Resync DB5 Z$ q) c/ J- `/ l# O% N
; a1 @- N- l/ K- M/ \

' R1 x7 g$ N# e( Xb、删除数据库中的实例:
  x# w! H4 }' t- ~# F4 b+ d9 o9 ?# e
#!/bin/bash
+ \" q* S! m  k 4 L# ?/ z% J* u) R
mysql -uroot -pmysql << _ESXU_0 Y+ S, C/ H, |2 w+ f
/ y. E: O1 a/ [
use nova;
6 E$ q" x2 M( y' ^ " W+ O& X2 ]; o. j' A; _
DELETE a FROM nova.security_group_instance_association ' b& U% p3 d5 \: O$ A! H

$ _) i8 [6 y' L& Q8 g5 P, MAS a INNER JOIN nova.instances AS b. Q+ H2 c6 v5 C, R4 o

- X- \! G: ?: M: `$ ]ON a.instance_uuid=b.id where b.uuid='$1';
8 L8 t0 u) u: `5 r8 z# q ; B& \; [8 k% ?! p
DELETE FROM nova.instance_info_caches WHERE instance_uuid='$1';( N. s' f+ B* W' r  [" e* o
. B' S4 j4 ^( S; ]
DELETE FROM nova.instances WHERE uuid='$1';
$ U: A0 o; Z8 a& E3 J/ Q! K & f: T# @- n: n/ M0 S3 E
_ESXU_
+ f, T% r( F2 J9 Z, i ( p" j8 ?6 b) w
; t, ^$ D: U* F& s) h
将以上文件写入delete_insrance.sh中,然后执行sh delete_instrance.sh insrance_id;
# U. L; g; F, c# p+ r) T
. q  g) m$ U, |$ G5 f其中instrance_id可以通过nova list 查看。
' _) a4 l; p7 U5 w* F% q  _$ M3 o7 O6 _7 ]! b( Q) }
5、Keystone NoHandlers' `' U. Q4 o. l; H5 ?( v

$ N! k9 \& ?8 x) M; a4 pError+ ^# ~) _( r; g' _+ B: G' p
root@openstack-dev-r910:/home/brent/openstack# ./keystone_data.sh1 u; C8 `' l% ]5 c' k0 Q
No handlers could be found for logger “keystoneclient.client”
+ X+ U0 r5 T7 i) }1 `$ [Unable to authorize user* }6 s3 \/ }! ^
No handlers could be found for logger “keystoneclient.client”( }$ L1 n7 ]1 W  F) s5 @4 O
Unable to authorize user8 }" e- }1 b; E4 k6 x
No handlers could be found for logger “keystoneclient.client”# `# A& k7 b( F& @
Unable to authorize user' K" k8 n! Q, C# b& h7 j! V
, a4 @& ?8 V, _5 X, `8 i
/ F8 w# L' _; P
解决方案:
; G/ n9 G0 m- B5 B% X! m+ J+ J- ]+ c; T; G; A8 g
出现这种错误是大多数是由于keystone_data.sh有误,其中
1 u6 L2 R: o" H) I6 D( y, Y4 ]" p5 U( S. E5 M, j3 c& S
admin_token必须与/etc/keystone/keystone.conf中相同。然后确认keystone.conf中有如下配置:+ I! B9 N4 u0 X4 u; V* f
" \$ [* V# i1 Z! B8 ^& F
driver = keystone.catalog.backends.templated.TemplatedCatalog template_file = /etc/keystone/default_catalog.templates
9 C2 Y4 D8 H+ v" p/ v  O' P1 \0 c( d3 d$ \( g
6、清空系统组件,重新安装:2 y4 F3 u3 s6 J& k

0 G  q+ ^. E2 s# V0 T#!/bin/bash
- |; c# x" y+ P' E4 k$ B4 ]3 V9 `mysql -uroot -popenstack -e “drop database nova;”
) V+ u% s8 x1 Cmysql -uroot -popenstack -e “drop database glance;”
8 @$ H7 c8 y: A' \2 `$ Dmysql -uroot -popenstack -e “drop database keystone;”* M! l1 ?5 t8 z' f  M
apt-get purge nova-api nova-cert nova-common nova-compute: O' y! p, N# Y5 y9 p* j
nova-compute-kvm nova-doc nova-network nova-objectstore
8 t! A. U+ s" d5 @8 ]# Unova-scheduler nova-vncproxy nova-volume python-nova python-novaclient
  S; P. y1 N$ L# [  D2 {apt-get autoremove
9 L4 D0 m% p3 G" J% drm -rf /var/lib/glance2 Y0 {3 Y! c6 [% A0 U
rm -rf /var/lib/keystone/+ ~  @/ ]8 b" f7 w6 G
rm -rf /var/lib/nova/
2 _5 Y* ^  C6 Jrm -rf /var/lib/mysql( M( o; Y* l1 w5 J% N' X1 c1 q
- g, f8 F  P+ w, h4 m' N
9 I( E/ D. o" F5 G  \2 v
可通过执行上面的脚本,卸载已安装的组件并清空数据库。这样可以省去重装系统的麻烦!! t7 U1 z3 ]- l3 D$ H' Z4 Y
6 v8 ~8 V' K4 s1 z  O
7、Access denied for user ‘keystone@localhost(using password:YES’)
* y& o+ k0 k. @- Y5 t; [2 C. `
( H! {. K9 h! E, J) ]4 c/ w# keystone-manage db_sync
8 m, ?; ?- V6 ?6 j( S
& f) p8 h9 t0 I* @% i3 IFile “/usr/lib/python2.7/dist-packages/MySQLdb/connections.py”, line 187, in __init__/ Y$ d/ r+ {2 D# @& b' M- [

. h2 ?5 M8 I4 |5 a0 `% Gsuper(Connection, self).__init__(*args, **kwargs2)
" H! J) E" O1 k6 x5 N% W- ysqlalchemy.exc.OperationalError: (OperationalError) (1045, “Access denied for user ‘keystone’@'openstack1′ (using password: YES)”) None None; t* F+ Q# @! o# ]! x9 }2 n
3 s1 P: n( f/ a0 i% Q. b

+ s9 P) ?3 y2 @# n  a解决方案:- g# n: v% K* h, m! Q4 g
( C& F0 x* @, ?, M1 h
查看keystone.conf配置文件链接数据库是否有误,正确如下:
8 y8 i! e# R$ w+ D
' G" I  g6 e2 |6 R" V[sql]
8 U0 a% F4 Z& D7 \ , K% O. X4 }! b+ X4 f( e# p  J
connection = mysql://keystone:openstack@localhost:3306/keystone
+ u: c' `9 E& a' e8 q  F
( ]1 K$ g: ~" c: [4 `! S  t' h
% P# i& n' x3 W8、nova-compute挂掉与时间同步的关系
! G$ b9 S9 A& O' _% L- B# J2 P& L- _3 ?9 n6 `$ `: c2 n3 N/ D+ k
很多时候发现nova-compute挂掉,或者不正常了,通过nova-manage查看状态是XXX了。
4 R% w% L/ _1 ?5 g4 x4 B, m4 ~' V' l; d1 p
往往是nova-compute的主机时间和controller的主机时间不一致。 nova-compute是定时地往数据库中services这个表update时间的,这个时间是nova-compute的主机时间。- s, z7 d' L# c* ~
% I9 m5 B# Y7 r) o0 |' Q0 I" [
controller校验nova-compute的存活性是以controller的时间减去nova-compute的update时间,如果大于多少秒(具体数值代码里面有,好像是15秒)就判断nova-compute异常。- E# c2 t1 i$ N
) Z& n: h5 e$ f7 t# Z+ s" c- f' ~
这个时候你用nova-manage查看nova-compute状态是XXX,如果创建虚拟机,查看nova-scheduler.log 就是提示找不到有效的host 其他服务节点类同,这是nova心跳机制问题。所以讲nova环境中各节点时间同步很重要。一定要确保时间同步!!
( ^7 h1 Y! N# M" t$ Y
2 B2 i; C7 t- x9 W- d  y如果在dashboard上看nova-compute状态,可能一会儿变红,一会儿变绿。那就严格同步时间,或者找到代码,把上面的那个15秒改大一点。
: \/ {, }8 {3 R8 s' @. w0 J+ ^
8 j  l3 K, L, H; y9、noVNC不能连接到实例
3 T  ^# j1 H8 _% P& q
9 m+ R# |( p/ @2 b: O0 h" N! lnovnc的问题比较多,网上也有关于这方面的很多配置介绍,其实配置不复杂,只有四个参数,配置正确基本上没什么大问题,但是装的过程中还是遇到了不少的问题。
  t# h. j/ b, ~% w
' c5 S. @3 j: ?7 ra、提示“Connection Refuesd”
" Q6 J4 H0 K1 d8 v7 O, n
' O2 Y* w: }5 v/ J* Y8 Q6 _6 z' ~$ r可能是控制节点在收到vnc请求的时候,无法解析计算节点的主机名,从而无法和计算节点上的实例建立连接。+ x! e% i2 P7 Z
( f5 Y. a7 {# u. e+ q! ]
另外可能是,当前浏览器不支持或者不能访问,将计算节点的ip和主机名的对应关系加入到控制节点的/etc/hosts文件中。
: n; R3 w3 y. w- h
$ K$ C  T# O. B1 b" E  [% d* Sb、提示“failed connect to server”2 ]  {3 L# K( z$ K- P
8 i0 z/ T3 B; K: B
出现这种错误的情况比较多,有可能是配置文件的错误,我们的环境中遇到这个错误是因为网络源有更新,导致安装版本不一致,使组件无法正常使用,解决方法就是使用本地源。另外需要特别说明的是使用novnc的功能需要浏览器支持Web Socket和HTML5.推荐使用谷歌。! y( I+ m+ ]2 w! v5 w  u* x

' _. u1 h" O: j! M10、cinder错误,无法登录dashboard.
1 g4 ^) @8 O5 _! m5 s6 z! p" c$ Y0 e/ u. L1 ]4 G# `& m9 n
出现如下错误:
( k' {+ T# ?" n* D3 h. k1 W: X+ U! D2 }
   2 d9 j* ~5 z5 e( b2 [+ R
TypeError at /admin/
8 ]: F3 W' `9 j* \* ahasattr(): attribute name must be string0 t$ ]. j4 F% @3 y) ~  N
/ d' l- G3 [- N; i! _
Request Method:   GET. C( L/ l& K! S
* Q5 H: w! i6 b: v
Request URL: http://192.168.80.21/horizon/admin/: m+ u2 F# c9 C8 i5 R5 u2 B
$ L& ^- C9 }% u, r- N5 U
Django Version:   1.4.5$ t- Z* L2 q  ^
, m. L* ^  X8 L; W
Exception Type:   TypeError
' n5 O9 j! p7 L, o; ?* U7 v7 f
- W2 m" i; D  u! p& xException Value:
0 i1 ]# m0 Q; b' V; X( ? - r5 y) e, R# k' B# `& Y6 [# Z
hasattr(): attribute name must be string9 G. I: T3 Q, I, B6 Z
- j0 x8 \7 Q/ d. j9 v
Exception Location: /usr/lib/python2.7/dist-packages/cinderclient/client.py in __init__, line 78
: K0 L& e# c* w, U5 [
+ f/ {" ]+ v) G' ^Python Executable:   /usr/bin/python( x& M$ j0 }0 m3 V
4 H& s' @6 G7 z# A; n0 k
Python Version:   2.7.3# U  S  W  ]6 R, h) |, h
, G; p# i4 a9 r6 g# j) u
Python Path:
- P5 S& L0 {4 o6 ~" V
8 \1 e. }$ m# L# a/ c: f7 U8 }4 d  `: D['/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../..',1 J% |* g4 T+ w: v9 B

* \3 H% Y: L; f2 W8 x( C( l- G '/usr/lib/python2.7',, U, H3 k; Y1 s

" t$ U$ h3 w+ O  s '/usr/lib/python2.7/plat-linux2',
0 y8 [, {) D& x# m- } ; S& {" Y% ?, t, j. X+ `( D+ n
'/usr/lib/python2.7/lib-tk',
! J5 w, E2 L/ E7 B/ S! A- f* d
7 f( I) U! |' J0 _2 R8 A/ w '/usr/lib/python2.7/lib-old',+ Y4 N, r6 z: u
5 i, p' Z  [  ^# `4 @# l
'/usr/lib/python2.7/lib-dynload',9 y0 ^) |4 h5 V4 E

8 \8 @1 r0 A8 J2 y '/usr/local/lib/python2.7/dist-packages',
: x" R0 G7 @1 k0 [4 h; V
6 s/ |- |0 G- D( }* w1 }* Q5 _4 H '/usr/lib/python2.7/dist-packages',) R( O: K8 o1 D# ?

, K# k6 f' A$ Y! u. [, F) H5 e '/usr/share/openstack-dashboard/',
% A* `! [1 o# Q3 j& g1 C" m2 }
0 _7 z  I2 V4 O; G; _ '/usr/share/openstack-dashboard/openstack_dashboard']4 H0 u2 |6 ~* l0 f  c' P7 s
9 v" A" H/ ]; m" q/ }# }" o
6 X3 J1 u4 J  P7 |8 V
' x  y0 O# m' M  ?5 H' T* Y( _
Server time: Fri, 29 Mar 2013 12:51:09 +0000
6 [! e* Z3 Q% }8 L  ~4 j: X
/ l$ z) @% A  @% Q0 T% r
* }+ O+ N8 q! R3 P$ q+ _5 [解决方案
# I7 m) `9 w" \
# W2 R- N5 i& i. e) E7 n$ G查看 apache2 的 error 日志,报如下错误:5 k3 e! h5 T+ g+ r: F; D8 l( C- h
3 y$ g1 H) G; b, z8 g
1 y5 r+ I! p! v& R
ERROR:django.request:Internal Server Error: /horizon/admin/- ^& Y( e( `1 g+ P

. R; p/ H# e3 ^  oTraceback (most recent call last):, T  j% [- K. ?9 P$ T1 n+ ~, [/ g
& @9 X  h2 P1 |5 W8 r; x8 ?6 J
  File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py", line 111, in get_response
* W4 e. A$ d2 f' D4 n$ E- |8 K " {2 I( s) {, Z0 O' ^
    response = callback(request, *callback_args, **callback_kwargs)
  U3 j4 ~' X9 S4 s/ z, p* F3 W
% H- K* M& g3 |/ @  }% H0 u+ D5 C* F  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 38, in dec9 ]: y: y! D0 K: }: j3 B
$ T: Q0 Y$ ^/ V0 Q' ?  w$ u* ~
    return view_func(request, *args, **kwargs); w! G; b3 w+ }; P
0 M9 L5 L# }( c, D) k: e
  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 86, in dec! q1 G! P4 w' L/ e, i- [

6 h7 I0 K0 \3 D* {' |( W/ T2 o3 a0 p    return view_func(request, *args, **kwargs)! e6 E2 \* N3 s* c  a7 p+ w% T

' H" K9 Q0 A# t4 s2 U. k# e  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 54, in dec
+ f9 r0 `1 w( P
5 j' y5 d9 d1 _! Z7 y* f. s! G    return view_func(request, *args, **kwargs)
# N. L8 Y" }  L( \( l* C 4 p. `3 s2 `5 d1 K, F. d
  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 38, in dec+ Z* B0 M! M" d; ~4 z3 M# E( H
7 P+ `/ c. j7 H; t4 Y, ]; r
    return view_func(request, *args, **kwargs); Z$ }4 e* i$ X0 h" A9 X
4 C0 e3 K3 h, W6 N: i  f1 v7 r' u2 G( n
  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 86, in dec7 m) Z/ X  V5 p% O# u" U7 v; M3 x

! h. s( @# e. n5 \7 \; ~    return view_func(request, *args, **kwargs)
( [: g1 [  M( U6 |4 g( K7 E ; g9 t+ a0 l! v* }- T3 [
  File "/usr/lib/python2.7/dist-packages/django/views/generic/base.py", line 48, in view
; B; {  y; F3 l1 y8 }
3 U: ]1 W( P* Q& d8 [0 F    return self.dispatch(request, *args, **kwargs)8 B1 |- l3 v' _( u& w
5 ]8 n) B5 w, i, B5 Z
  File "/usr/lib/python2.7/dist-packages/django/views/generic/base.py", line 69, in dispatch, x/ o& ?: |8 E& K4 M( J* m# G

0 {2 c: V; k1 I: V. G* _    return handler(request, *args, **kwargs)
' G! n8 o- x9 W% G6 s$ r' m
" @8 i6 s+ C8 G# o7 A  File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 155, in get% s  w2 m5 F0 d/ d) g0 A

: ]' H; O3 |5 r9 v# K    handled = self.construct_tables()1 v% C+ g" O, q2 r- q% G4 `: ^

2 b6 `& E$ R7 d( h" d  File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 146, in construct_tables
) v) D& F! C1 \0 ]
' [5 O  L, q: H    handled = self.handle_table(table): J: w( `4 ^, |, \( h' ^

) _" i2 l* U( T8 j- L, _% L  File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 118, in handle_table
, o' v: ]5 M, S, c9 D8 W1 O! K( q
! ?% y9 g7 N0 V    data = self._get_data_dict()9 x) L: }# }) _0 O

2 F' @1 x1 ^/ F8 M  File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 182, in _get_data_dict" H+ ]7 o1 P) b/ l% k( [2 _

' h, S; Q# c' K, V    self._data = {self.table_class._meta.name: self.get_data()}$ p3 w* R6 c2 V# P

$ p& ~. V( J- @' s8 l  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/dashboards/admin/overview/views.py", line 41, in get_data) ~1 }8 p$ e. I% |, e* Z

' Y5 ]( D8 ~0 n% O# G' A    data = super(GlobalOverview, self).get_data()- F- D: K/ K1 p4 H1 p7 @

6 _2 E5 \# N/ l% x  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/views.py", line 34, in get_data9 _; W; r1 s' s( q9 t

8 V1 X2 l; i0 g6 k( b    self.usage.get_quotas()
$ h1 B, Q+ k% |3 C2 K, n! }" V9 a2 y " l3 X, w& Q; B* A8 y
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/base.py", line 115, in get_quotas. V6 i9 N9 M4 F
. c  n' e* E! ^, ^5 F- V) E
    _("Unable to retrieve quota information."))$ U8 T( M0 u1 Q9 k1 }
4 N! G4 D' s. y4 s# [% y
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/base.py", line 112, in get_quotas( j1 n. U5 z" f& D* `
* ^6 \" ]4 b2 e- P- a) ^
    self.quotas = quotas.tenant_quota_usages(self.request)
% M% H$ ], e$ m; L! O4 l8 S$ O
& R3 ~4 B6 {4 f: a# R+ X# F9 ]  File "/usr/lib/python2.7/dist-packages/horizon/utils/memoized.py", line 33, in __call__# t8 a# J$ P  L1 m' P3 \& l3 }
4 G2 t8 |" h, v) ~8 M6 M
    value = self.func(*args)/ n- m# b/ @9 p$ s

2 S" C. v7 c& |8 U, c  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/quotas.py", line 115, in tenant_quota_usages
6 G* j7 J/ N3 ~: e3 o; x9 ? $ c9 q9 a% _* b. g$ W6 N4 f/ }6 g( g
    disabled_quotas=disabled_quotas):
# g: H4 q/ O! M' S' P ; k( m$ S! d& M. \+ |
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/quotas.py", line 98, in get_tenant_quota_data8 e7 G5 ^, `, g& Y7 @+ y) I
# E- l% o6 t; R8 j- g7 S6 I1 V
    tenant_id=tenant_id)+ H( W  q6 S$ ~$ t* W

( Y# g0 U- U2 w) m3 ]+ g5 C" T  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/quotas.py", line 80, in _get_quota_data: P# j1 `* n6 ?9 X  p$ E0 i

0 n3 P) N1 u# d. d, }    quotasets.append(getattr(cinder, method_name)(request, tenant_id)); v! ]/ `5 \7 L0 G. ]2 y: z
+ l/ S, ]) Y1 c& i
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/api/cinder.py", line 123, in tenant_quota_get! Z1 ]  q" I- S& N' Y8 U3 H: `

7 T( v3 n7 y4 X+ S    c_client = cinderclient(request)
/ m) K2 r7 s. n " }5 d; m5 V( J- H! s2 O6 M% X
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/api/cinder.py", line 59, in cinderclient0 V$ o2 Q5 k  ^
' B) L& s& l7 x5 k8 H7 \6 O, b
    http_log_debug=settings.DEBUG)4 I% R! E# I* C9 @2 \! z. u% A0 X

7 a9 h( \5 V" Q$ q- z$ a; v  H  File "/usr/lib/python2.7/dist-packages/cinderclient/v1/client.py", line 69, in __init__3 P* d( f3 J: @, l8 ]" ~

$ E3 c+ {8 n: |9 U- E! W( }$ z4 U    cacert=cacert)  p9 w, |7 I( a% o( J
  h: i# y6 [1 w  f( @8 y
  File "/usr/lib/python2.7/dist-packages/cinderclient/client.py", line 78, in __init__
" {1 k9 I8 w" i; R3 N$ C5 M2 i 8 F1 B( Z7 b) v7 |( \9 e$ ]
    if hasattr(requests, logging):
' j, X6 K. S% c1 A) V
; h1 y& |% d& ]: T: v; E! A7 u, GTypeError: hasattr(): attribute name must be string
* z& [  }: h* i+ K: Z% K
- x# T; l( r6 @3 m( X2 Q; R( M. n  N% c
错误信息中指出了 Cinderclient 的 client.py 中 78 行 hasattr() 方法的属性必须是一个字符串。& N8 |: f) h  B  t! C
修改代码:
7 E5 d, P8 q) v8 K- h5 B2 Q
' M" S2 M" c+ l0 j. X- z& w ! m2 H( T. `7 ^6 G6 \- R0 |

4 H% h3 q4 R+ A. m# vim /usr/lib/python2.7/dist-packages/cinderclient/client.py
! S7 H3 [# q0 B2 |  u' R6 H; V
. L% y  t6 ^" {8 e( a5 D4 Q 78 if hasattr(requests, logging): # 改为 : if hasattr(requests, 'logging'):
( d& A5 l/ C' s2 h* ?6 K
, P& }1 }* f; `9 U  h* p1 [8 { 79 requests.logging.getLogger(requests.__name__).addHandler(ch)2 z/ p' D# M3 h' f9 i8 _

# N! C* u9 \0 S8 _+ ~0 x6 \
) _5 N  _; U6 i0 u% G9 ?' q4 [  C2 g重新启动 apache2 :
1 x& ~5 M. y, u$ Z" Z' ?' d; J; F6 N2 |$ u( \
/etc/init.d/apache2 restart
' ]  a- S6 L5 u6 d9 N  w! k' s
7 G9 A) e7 ?2 _- K) _  R  [: S: X这次访问 dashboard 没有报错,尝试创建 volume 也没有问题了。+ N% M- I% H# q- n, ?

9 S! M" x3 a7 W7 T11、Unable to attach cinder volume to VM
, r8 P% o  ]+ Q1 g) s# s
( G: |9 {% b: }( d8 N( Q" A, C% Z     在测试openstack中的volume服务时把lvm挂载到虚拟机实例时失败,这其实不是cinder的错误,是iscsi挂载的问题。8 c; V: ^1 ^) t

9 B- j6 X9 T1 `# ]# F9 t% N以下是计算节点nova-compute.log 的错误日志:
9 U7 H% e  L8 j" F5 M4 v$ H2 G6 {' c0 U
2012-07-24 14:33:08 TRACE nova.rpc.amqp ProcessExecutionError: Unexpected error while running command.4 v$ @: I% f. Z: J' m9 M
2012-07-24 14:33:08 TRACE nova.rpc.amqp Command: sudo nova-rootwrap iscsiadm -m node -T iqn.2010-10.org.openstack:volume-00000011 -p 192.168.0.23:3260 –rescan
; N% j& |! m- [6 w& |2012-07-24 14:33:08 TRACE nova.rpc.amqp Exit code: 255
9 @& O6 V" `# e2012-07-24 14:33:08 TRACE nova.rpc.amqp Stdout: ”
* }: z/ |' V  m1 N' w" X2012-07-24 14:33:08 TRACE nova.rpc.amqp Stderr: ‘iscsiadm: No portal found.\n’) u# T0 ]/ h& M4 a) J

0 T, C2 N" v8 K( s
; w/ m+ D, I% E. U; D! J+ I( e. P8 c
以上错误是没有找到iscsi服务端共享出的存储,查找了很多openstack 资料说要添加以下两个参数:
5 c2 C% d: l# w7 a3 i. G/ }
% Y% i" o2 t- T. G) i/ _, Piscsi_ip_prefix=192.168.80 #openstack环境内网段) M2 T* ~% s: y$ `" ?) a4 w6 P
! G: C& `- F% a
iscsi_ip_address=192.168.80.22 # volume机器内网IP' z2 G" l" D4 A6 ?# _. q$ z7 e4 a

9 B. a$ r4 h' s# s9 O$ _6 X可是问题依然无法解决,后来发现只要在nova.conf配置文件中添加参数iscsi_helper=tgtadm 就挂载失败。
- ~3 s. C& N3 y0 ~8 W' H; |1 @
根据这个情况进行了测试查看日志才发现:如果使用参数 :iscsi_helper=tgtadm 时就必须使用 tgt 服务,反之使用iscsitarget服务再添加参数iscsi_helper=ietadm。
  s. l( i1 V/ V7 ~4 c6 A, G7 L7 U" K' s. U- n) g
我测试环境的问题是tgt和iscsitarget服务都已安装并运行着(在安装nova-common时会把tgt服务也安装上,这个不小心还真不会发现),在nova.conf配置中添加参数iscsi_helper=tgtadm ,查看端口3260 发现是iscsitarget服务占用,所以导致挂载失败,我们可以根据情况来使用哪个共享存储服务!!将tgt 和iscsi_helper=tgtadm、iscsitarget和iscsi_helper=ietadm保留一个即可。
- K) m4 v6 F# R6 h0 m+ V# z7 F
/ p" A, X0 c2 t4 O12、glance index报错:/ \2 ]- [' ?, }! ?0 D- L$ C

8 L" Q8 s- I( D( }% qAuthorization Failed: Unable to communicate with identity service: {"error": {"message": "An unexpected error prevented the server from fulfilling your request. Command 'openssl' returned non-zero exit status 3", "code": 500, "title": "Internal Server Error"}}. (HTTP 500)
# P* X& U. r* m- L3 O2 e : s+ w7 Z$ L6 `/ U/ d7 C

+ M3 g% C* x& B 在 Grizzly 版,我测试 glance index 时候报错:
8 P- z) G* z; i0 Y$ Q8 d4 F$ M7 c
Authorization Failed: Unable to communicate with identity service: {"error": {"message": "An unexpected error prevented the server from fulfilling your request. Command 'openssl' returned non-zero exit status 3", "code": 500, "title": "Internal Server Error"}}. (HTTP 500)
+ j- _% `+ Z4 F. O错误信息指出:glance 没有通过keystone验证,查看了 keystone 日志,报错如下:
+ B8 w0 B( T. r) [8 c& I6 x4 j6 ?* J
2677 2013-03-04 12:40:58    ERROR [keystone.common.cms] Signing error: Error opening signer certificate /etc/keystone/ssl/certs/signing_cert.pem
, ~$ R/ |6 d& S7 U1 a2678 139803495638688:error:02001002:system library:fopen:No such file or directory:bss_file.c:398:fopen('/etc/keystone/ssl/certs/signing_cert.pem','r')
6 o/ I1 ]$ U4 F2679 139803495638688:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:400:% {# w* k8 ]) C; d2 b& u4 _
2680 unable to load certificate
* r0 N4 O$ Z1 G; @! m2682 2013-03-04 12:40:58    ERROR [root] Command 'openssl' returned non-zero exit status 3
; n/ e& n( }! y$ M* ~, I2683 Traceback (most recent call last):
+ p- N' l3 E4 ~5 N. u7 X  h2684   File "/usr/lib/python2.7/dist-packages/keystone/common/wsgi.py", line 231, in __call__+ p6 R: }" A" g0 O! c
2685     result = method(context, **params)* o1 W8 c1 f3 K, B5 B
2686   File "/usr/lib/python2.7/dist-packages/keystone/token/controllers.py", line 118, in authenticate
9 i% l  U) q/ M8 `8 I2687     CONF.signing.keyfile)
& H  `# S' }, I! `2688   File "/usr/lib/python2.7/dist-packages/keystone/common/cms.py", line 140, in cms_sign_token
: D) Q* L8 ^1 j2689     output = cms_sign_text(text, signing_cert_file_name, signing_key_file_name)
  k; t7 B8 a7 s. _9 i4 U+ a2690   File "/usr/lib/python2.7/dist-packages/keystone/common/cms.py", line 135, in cms_sign_text
: D8 _6 g8 T$ Q* ~* J: D5 n5 ]2691     raise subprocess.CalledProcessError(retcode, "openssl")
( t( g0 z% a' G6 J0 J( U2692 CalledProcessError: Command 'openssl' returned non-zero exit status 3! w: p# ]! |  i+ r! ]
在Grizzly 版中,keystone 默认验证方式是 PKI , 需要签名证书,之前的版本都是用的 UUID,改 keystone.conf:
5 m& p% ], z" K' n% a& l$ [9 P6 M' _4 {* c5 d; p3 t1 s$ E
token_format = UUID
3 f1 l: p8 l5 n9 y8 y在试一次就没有错误了。/ j! c' U1 x8 `6 L( C) i" u) g# Q7 y, f
, K$ w/ Y/ Y  ?2 s. U" J( f# |2 w
13、镜像制作9 ^6 w+ f/ P. b( R0 o% l7 F  B

/ D7 u. S1 i5 k( a7 N, @这里主要强调下windows的镜像制作,因为windows的涉及到加载驱动的问题,就比较麻烦。' I7 B. @( I5 g' g% W. x$ Q1 h2 k

5 h) ]8 L" O! L下载virtio驱动,因为win默认不支持virtio驱动,而通过openstack管理虚拟机是需要virtio驱动的。需要两个virtio驱动,一个是硬盘的,一个是网卡的,即:virtio-win-0.1-30.iso和virtio-win-1.1.16.vfd。这里主要强调两个地方:
% x2 ^# H5 T7 a( @- c
' e' r- U# f  p8 c* K( I$ o! R/ }- h1、创建镜像: 4 M4 N& U2 Y* B9 C

% K- {$ |; M5 m3 O# {$ i3 r$ L kvm -m 512 -boot d –drive" g: R' L# y9 ?- f/ |

6 |5 `$ E8 `! rfile=win2003server.img,cache=writeback,if=virtio,boot=on -fda virtio-win-1.1.16.vfd -cdrom windows2003_x64.iso -vnc:10                  
5 b8 e) E" P* w% Z5 a$ K . [4 F4 ~7 ?8 y4 [, y  `$ l( H3 F$ J
3 E$ `$ Y8 {! M( |' {1 C
2、引导系统 :/ j8 h  l# u  n6 Q

* B4 g& q, R0 J0 Jkvm -m 1024 –drive file=win2003server.img,if=virtio,
: E) a, @* Q$ X  I" f1 m2 D : C  M7 k) f6 x; \% k
boot=on -cdrom virtio-win-0.1-30.iso -net nic,model=virtio -net user -boot c -nographic -vnc 8
: \% \6 f  @1 K% S, K
3 g: x, @  ?7 l
8 Q0 E: i2 }* l# {; s" L+ T. \; C9 G这里需要注意的地方是if=virtio,boot=on –fda virtio-win-1.1.16.vfd和引导系统时使用的virtio-win-0.1-30.iso 这两个驱动分别是硬盘和网卡驱动。如果不加载这两个驱动安装时会发现找不到硬盘,并且用制作好的镜像生成实例也会发现网卡找不到驱动,所以在这里安装镜像生成后需要重新引导镜像安装更新网卡驱动为virtio。
; @" ^8 j/ J, ~# a. F5 e7 U! f/ i& J$ o6 U: I3 J$ f: z
14、删除僵尸volume
* y4 E8 ]+ R+ q" G7 j& J( B) B
% |2 ?8 k# ]7 j+ n7 k9 |如果cinder服务不正常,我们在创建volume时会产生一些僵尸volume,如果在horizon中无法删除的话,我们需要到服务器上去手动删除,7 j9 y8 E: o( A5 E( B3 G

2 N8 Q: a3 d, h命令:lvremove /dev/nova-volumes/volume-000002
) U5 D0 U2 ^2 i( d; _2 h) e) L3 G$ t- N
注意这里一定要写完整的路径,不然无法删除,如果删除提示:
0 j0 w# n! q0 C# \0 H; r8 v8 k
5 E8 \8 T  D3 ~' p6 z“Can't remove open logical volume“ 可尝试将相关服务stop掉,再尝试删除。删除完还需到数据库cinder的volumes表里清除相关记录。
 楼主| 发表于 2018-9-2 22:29:09 | 显示全部楼层
以下主要为安装部署过程中遇到的一些问题,因为openstack版本问题,带来的组件差异导致不同的版本安装的方法也完全不一样。经过测试,目前已可成 功部署Essex和Grizzly两个版本,其中间还有个版本是Folsom,这个版本没有部署成功,也没有花太多时间去研究,因为Folsom版本中使 用的quantum组件还不成熟,对于网络连通性还有很多问题,网上也很少有成功的案例,大多数人使用的还是folsom+nova-network模 式。) O9 @" W  L' Y" q& v% _1 X+ y8 B
/ l% R0 T5 C# E9 c- `
到了Grizzly版本,quantum组件才比较稳定,可以正常使用,自己也花了很多时间研究,现在已可以成功部署多节点环境。以下是部署过程中遇到的 一些问题,包括Essex和Grizzly两个版本。国内网上关于这方面的资料很少,很多资料也都是国外网站上看到的。而且很多情况下日志错误信息相同, 但导致错误的原因却不尽相同,这时候就需要仔细分析其中的原理,才能准确定位。遇到错误并不可怕,我们可以通过对错误的排查加深对系统的理解,这样也是好 事。
, z) ]% |5 {* r! @! w6 _
! ~) ?& u/ T  i- {% `, p, W( h关于安装部署,网上有一些自动化的部署工具,如devstack和onestack,一键式部署。如果你是初学者,并不建议你使用这些工具,很明显,这样 你学不到任何东西,不会有任何收获。如果没有问题可以暂时恭喜你一下,一旦中间环节出现错误信息,你可能一头雾水,根本不知道是哪里错了,加之后期的维护 也是相当困难的。你可能需要花更多的时间去排查故障。因为你根本不了解中间经过了哪些环节,需要做哪些配置!这些工具大多数是为了快速部署开发环境所用, 正真生产环境还需要我们一步一步来操作。这样有问题也可快速定位排查错误。0 F/ g/ Q8 \7 S, k1 }
- c; H$ _3 N& P8 r+ p7 q
本文仅是针对部署过程中的一些错误信息进行总结梳理,并给予解决办法,这些情况是在我的环境里遇到的,并成功解决的,可能会因为环境的不同而有所差异,仅供参考。9 z" U4 R' S7 z" v

6 E( M$ t# V/ }9 d5 H( p9 X1、检查服务是否正常1 N# [  q8 M3 h& |, D( A* n
; S! N; R: _- r+ d
root@control:~# nova-manage service list
$ d6 z$ B9 J5 ]2 H
& I. b. }- {8 T8 DBinary           Host                                 Zone             Status     State Updated_At
* N( A. q1 G) C$ o8 b0 R# P' E% c  ]4 B4 D' R6 k) E
nova-cert        control                              internal         enabled    :-)   2013-04-26 02:29:44
- r& @  C+ l3 |  P3 E" r0 j) M  Q- x  M: N6 s" K8 e6 K
nova-conductor   control                              internal         enabled    :-)   2013-04-26 02:29:42
" }3 n  E% R9 h9 ^+ ?9 y+ M8 }0 z  z. g$ A3 i8 ]3 ^) X
nova-consoleauth control                              internal         enabled    :-)   2013-04-26 02:29:44
( O) V0 l" }7 d( ]7 A/ F5 S/ @3 n3 q! T+ F# {
nova-scheduler   control                              internal         enabled    :-)   2013-04-26 02:29:47
) k1 _* `& h; |/ I  S) e  x% X: W0 ~
nova-compute     node-01                              nova             enabled    :-)   2013-04-26 02:29:46) e6 c+ R3 q" D
; d! B6 \8 y3 x
nova-compute     node-02                              nova             enabled    :-)   2013-04-26 02:29:46
3 R. ]! K: H* }- O" Z, a8 `
" m8 C' n* Z. a7 ^1 ]- L9 r2 y/ e* inova-compute     node-03                              nova             enabled    :-)   2013-04-26 02:29:42( S! o, _5 `+ z2 T& k4 v% W0 E
复制代码  ]2 L, \+ ^+ ^6 X  h2 \* h
如果看到都是笑脸状态,说明nova的服务属于正常状态,如果出现XXX,请查看该服务的相关日志信息,在/var/log/nova/下查看,通过日志一般可以分析出错误的原因。, W1 W+ Y9 C" O% D8 W
9 n- b$ W* E+ i" j. H
. [8 }, d/ }$ A% U  x
2、libvirt错误
8 I# W! T8 s0 ~8 [) ?python2.7/dist-packages/nova/virt/libvirt/connection.py”, line 338, in _connect7 F' g1 G) r+ E7 q; R& V
2013-03-0917:05:42 TRACE nova return libvirt.openAuth(uri, auth, 0)( g) L2 ?( q2 F. j, X8 U
2013-03-09 17:05:42 TRACE nova File “/usr/lib/python2.7/dist-packages/libvirt.py”, line 102, in openAuth. d, z( ^9 c' Z6 q5 O/ |) g/ c
2013-03-09 17:05:42 TRACE nova if ret is None:raise libvirtError(‘virConnectOpenAuth() failed’)& v# D  W( s7 l) E0 b- ]
2013-03-09 17:05:42 TRACE nova libvirtError: Failed to connect socket to ‘/var/run/libvirt/libvirt-sock’: No such file or directory+ h% j' B: e# X2 i- y- W
2013-03-09 22:05:41.909+0000: 12466: info : libvirt version: 0.9.8
, }; j" }! y: j) u) Y/ |8 Z9 `2013-03-09 22:05:41.909+0000: 12466: error : virNetServerMDNSStart:460 : internal error Failed to create mDNS client: Daemon not running
' V0 R# |; y. S复制代码
" n" k7 [9 T& R/ v9 |% X解决方案:
) T0 }9 O# t% q0 k( L出现这种错误首先要查看/var/log/libvirt/libvirtd.log日志信息,日志里会显示:libvirt-bin service will not start without dbus installed.3 F% f; ^; _  v; F
我们再查看ps –ea|grep dbus,确认dbus is running,然后执行apt-get install lxc: @) Z( U2 R+ Z
* b; T/ x2 `2 J" z5 \  v
' O# G" H3 V8 p" k: H: [" \
3、Failed to add image7 u( ]8 V8 r" m0 F
Error:4 t% f- P+ ^% U2 U, @% b
Failed to add image. Got error:
The request returned 500 Internal Server Error1 T% F- j4 @8 I% ^( I
复制代码0 g9 b3 @4 g" E
( {$ R2 W% E/ A2 F9 F- }
7 |3 V8 x6 e6 \0 r1 j) r
解决方案:: E, f+ g& a, \* ~+ l
环境变量问题,配置环境变量,在/etc/profile文件中新增:
+ _3 P( l7 z1 n; c 1 X7 ~* e: j) A
2 d% ]8 ~! w* \3 B
OS_AUTH_KEY=”openstack”
. `) {$ X+ J* ?# [- X. fOS_AUTH_URL=”http://localhost:5000/v2.0/”; P0 t6 a6 K6 L8 J3 k. n- Q0 L
OS_PASSWORD=”openstack”! _; S4 I2 n/ n
OS_TENANT_NAME=”admin” ) I. ^9 b% C5 e
OS_USERNAME=”admin”. j/ [  D9 R$ _# }: C* r( `
复制代码8 A9 o$ k: R/ C! @5 _  C! v
然后执行source  /etc/profile即可!当然你也可以不在profile里配置环境变量,但是只能临时生效,重启服务器就很麻烦,所以建议你还是写在profile里,这样会省很多麻烦。6 U( x5 R6 z4 z5 t  k% `" b. N

$ H4 t& ?4 K8 d8 F* Z) [7 C
' ~# a' E3 W. ?4、僵尸实例的产生
0 j* R/ q8 n% G僵尸实例一般是非法的关闭nova或者底层虚拟机,又或者在实例错误时删除不了的错误,注意用virsh list检查底层虚拟机是否还在运行,有的话停掉,然后直接进入数据库删除。
8 L7 B% l6 u  r  BNova instance not found, d# Y" I; Q) S- h+ C* X; h! g

. q  z& _) T/ W/ P& {+ R( I  VLocal file storage of the image files.& @1 @$ V5 c- }7 I2 V
3 m$ R2 D+ C# X* R7 W1 F+ E3 T; m5 [
Error:% P0 e7 f' s; Y/ S. r* {
2013-03-09 17:58:08 TRACE nova raise exception.InstanceNotFound(instance_id=instance_name)
, d: R2 d# d- R5 V3 K. Z2013-03-09 17:58:08 TRACE nova InstanceNotFound: Instance instance-00000002 could not be found./ [9 ~3 J0 F+ V& F9 I7 J  F8 d
2013-03-09 17:58:08 TRACE nova
5 u/ q* K3 }/ O: o4 k复制代码
4 E7 e6 K7 r1 i5 b! q解决方案:
5 w& ~3 i- j& A! n删除数据库中的僵尸实例或将数据库删除重新创建:, H" l2 @1 |( s3 R& y" H8 z" C
a、删除数据库:0 v" p+ ^9 g8 i( |" a( x, a( h9 l' G
$mysql –u root –p
6 {% ]: y5 @: D9 m  LDROP DATABASE nova;/ [. A' V# }5 ]$ ?0 T3 ]) [

+ m$ b5 F, A4 y) [- v3 `; BRecreate the DB:% x) }! i7 X' O- {. ]# ?* n3 z
CREATE DATABASE nova; (strip formatting if you copy and paste any of this)1 |! [5 c& F8 W) T+ z" \3 Z
GRANT ALL PRIVILEGES ON nova.* TO ‘novadbadmin’@'%’ IDENTIFIED BY ‘<password>’;
. y/ e: L4 w: j6 c! {" t3 mQuit8 O1 u+ f$ }3 e) n/ K2 Q# `. N

% f! \* i. A7 m0 H# R" y& l  g- B( Y' HResync DB$ W( p; u4 V" r8 C( K
复制代码9 y. L" D0 s+ Q7 S  K8 ]
b、删除数据库中的实例:% c8 Q: A. T9 Q
#!/bin/bash
0 ~+ n6 x" ?) S& u0 T; U9 F, v7 b4 v8 A/ o1 h
mysql -uroot -pmysql << _ESXU_5 D: ^7 L6 ?; |3 A

3 n5 V, C2 _, W" v7 }# o% G, t3 Duse nova;
; M% |& _/ C  o; g+ \' x- o7 T8 m& V3 }& P& v7 w  l% y/ }
DELETE a FROM nova.security_group_instance_association
8 e( U, q# ?, V& }6 @( }! ~' Z1 j4 x( i+ e% H5 P
AS a INNER JOIN nova.instances AS b
- n, G" V2 q& E0 C$ m* [6 |5 K% V$ p; `4 t" w9 p8 K
ON a.instance_uuid=b.id where b.uuid='$1';# d0 n, T1 Q% u( L. v* ]
' v4 h! S; @3 Z' C2 c+ [1 }
DELETE FROM nova.instance_info_caches WHERE instance_uuid='$1';
; s* P" ~: L; s+ u
! S9 v# R* }: M  A- ~9 F* m" HDELETE FROM nova.instances WHERE uuid='$1';
8 ~. m% _) r1 d5 h3 r
" y5 q% c1 x5 Y4 ?/ j- h3 A_ESXU_' ?/ Y, q8 s. T- h0 H1 |4 g5 ~
复制代码% L1 f8 h# O1 q$ {* G# Y2 v; [: I# b
将以上文件写入delete_insrance.sh中,然后执行sh delete_instrance.sh insrance_id;
8 |$ C& z( Y  ]( ]: f1 P! a其中instrance_id可以通过nova list 查看。
7 C% H9 W$ L: y4 I  P! e " M0 s# f( L. r

- I0 f. ^3 v; ]5、Keystone NoHandlers4 x6 y  K4 t7 d) @, s' j$ D
. D4 X8 N# ?. ?# }& x
Error  1 u% z" q8 @* M2 T( g' H
root@openstack-dev-r910:/home/brent/openstack# ./keystone_data.sh  ' u; @$ {' t' G, N! {; l
No handlers could be found for logger “keystoneclient.client”  $ j' T+ |$ e$ y$ n) G( S
Unable to authorize user  
$ o" z( o: F$ H& N$ GNo handlers could be found for logger “keystoneclient.client”  % k! {8 o/ @7 j! D( ]. V2 e/ x
Unable to authorize user  ; P! V1 s8 o6 B5 j, b
No handlers could be found for logger “keystoneclient.client”  
6 m6 v& p3 C+ d/ WUnable to authorize user  
- Y1 @, P! d8 W( k- `( k% c  T2 @% r$ E复制代码; s2 |% A; N' G5 ?+ B' d

! t$ z$ X5 c! l
3 \2 g  m. _2 ^3 y9 G' j$ I解决方案:
% @6 Y& [/ G0 G7 W( l出现这种错误是大多数是由于keystone_data.sh有误,其中+ i$ |* E5 V; U% k* ^
admin_token必须与/etc/keystone/keystone.conf中相同。然后确认keystone.conf中有如下配置:
! b+ |6 K& v, A; M0 y6 G; Xdriver = keystone.catalog.backends.templated.TemplatedCatalog template_file = /etc/keystone/default_catalog.templates8 R$ W. O7 C: ^$ x; h0 V6 C; x
2 F  x$ r5 l  W) z

5 n+ J' S+ X, T5 w6、nova-compute挂掉与时间同步的关系* D) s. z9 i2 e) X$ W
很多时候发现nova-compute挂掉,或者不正常了,通过nova-manage查看状态是XXX了。2 H/ M; y8 L+ O" G$ L
往往是nova-compute的主机时间和controller的主机时间不一致。 nova-compute是定时地往数据库中services这个表update时间的,这个时间是nova-compute的主机时间。
: L# _8 i8 q' i! D# _: F$ G! acontroller校验nova-compute的存活性是以controller的时间减去nova-compute的update时间,如果大于多少秒(具体数值代码里面有,好像是15秒)就判断nova-compute异常。
9 a  u1 k# r* [- ]' |- F; F这 个时候你用nova-manage查看nova-compute状态是XXX,如果创建虚拟机,查看nova-scheduler.log 就是提示找不到有效的host 其他服务节点类同,这是nova心跳机制问题。所以讲nova环境中各节点时间同步很重要。一定要确保时间同步!!# A3 i, i  n2 P/ s  ~' m+ ?6 n' w( W
如果在dashboard上看nova-compute状态,可能一会儿变红,一会儿变绿。那就严格同步时间,或者找到代码,把上面的那个15秒改大一点。' d5 T3 e" }' `; T- S! r% s
: A" Q* s- d" W

  M" v; Q2 v* n. s3 `, d& W7、noVNC不能连接到实例) z* E4 @4 G. k% K1 p* e$ Z4 `
novnc的问题比较多,网上也有关于这方面的很多配置介绍,其实配置不复杂,只有四个参数,配置正确基本上没什么大问题,但是装的过程中还是遇到了不少的问题。
4 S4 T0 |0 k* O% f! {# `7 |a、提示“Connection Refuesd”1 Y) Z. X  {! X/ `) B; F( i
可能是控制节点在收到vnc请求的时候,无法解析计算节点的主机名,从而无法和计算节点上的实例建立连接。
8 S# G* X. P2 X+ B另外可能是,当前浏览器不支持或者不能访问,将计算节点的ip和主机名的对应关系加入到控制节点的/etc/hosts文件中。
' ~- t& k2 D$ U/ R2 E" q: _b、提示“failed connect to server”" V6 h$ a; S3 O* H
出 现这种错误的情况比较多,有可能是配置文件的错误,我们的环境中遇到这个错误是因为网络源有更新,导致安装版本不一致,使组件无法正常使用,解决方法就是 使用本地源。另外需要特别说明的是使用novnc的功能需要浏览器支持Web Socket和HTML5.推荐使用谷歌。
! ~1 ^. ^; l1 }2 @
2 g( C' }5 m5 W8 O0 [, n" x. Y0 k% I0 L2 {9 [
8、Unable to attach cinder volume to VM. R2 N- t! X% D" R
     在测试openstack中的volume服务时把lvm挂载到虚拟机实例时失败,这其实不是cinder的错误,是iscsi挂载的问题。% e4 O: _0 r9 P; z' F
以下是计算节点nova-compute.log 的错误日志:7 h) a2 h  I$ [6 X
2012-07-24 14:33:08 TRACE nova.rpc.amqp ProcessExecutionError: Unexpected error while running command.
" ~+ x2 v  U  D8 b7 H# p  m1 s5 b2012-07-24 14:33:08 TRACE nova.rpc.amqp Command: sudo nova-rootwrap iscsiadm -m node -T iqn.2010-10.org.openstack:volume-00000011 -p 192.168.0.23:3260 –rescan
/ T. V& n8 E4 R- P- S2012-07-24 14:33:08 TRACE nova.rpc.amqp Exit code: 255
  g; Q/ U! ^' D4 \# R& w2012-07-24 14:33:08 TRACE nova.rpc.amqp Stdout: ”
% a3 L. i! t1 P# K2012-07-24 14:33:08 TRACE nova.rpc.amqp Stderr: ‘iscsiadm: No portal found.\n’
  G& g" @1 T' m' @4 a8 c& \  z2 @复制代码
$ K* m. [$ [/ m以上错误是没有找到iscsi服务端共享出的存储,查找了很多openstack 资料说要添加以下两个参数:
7 X; R+ k: U9 S, Ziscsi_ip_prefix=192.168.80 #openstack环境内网段
) n& d% D! V2 \7 Miscsi_ip_address=192.168.80.22 # volume机器内网IP* @. a1 ^! y/ y2 e: c) K
可是问题依然无法解决,后来发现只要在nova.conf配置文件中添加参数iscsi_helper=tgtadm 就挂载失败。* G* i9 g/ G- Z5 l4 u, [7 `: J
根据这个情况进行了测试查看日志才发现:如果使用参数 :iscsi_helper=tgtadm 时就必须使用 tgt 服务,反之使用iscsitarget服务再添加参数iscsi_helper=ietadm。5 ~1 g' k( v- S9 q1 g; v( R
我 测试环境的问题是tgt和iscsitarget服务都已安装并运行着(在安装nova-common时会把tgt服务也安装上,这个不小心还真不会发 现),在nova.conf配置中添加参数iscsi_helper=tgtadm ,查看端口3260 发现是iscsitarget服务占用,所以导致挂载失败,我们可以根据情况来使用哪个共享存储服务!!将tgt 和iscsi_helper=tgtadm、iscsitarget和iscsi_helper=ietadm保留一个即可。4 m( [9 Q0 e! r1 q, q+ n/ ^* q
8 Y, N- F9 p# l* j5 i# X9 f, [3 }

" X' I4 K( t$ M; o9、glance index报错:
0 j- ^6 f& b1 ?: o! dAuthorization Failed: Unable to communicate with identity service: {"error": {"message": "An unexpected error prevented the server from fulfilling your request. Command 'openssl' returned non-zero exit status 3", "code": 500, "title": "Internal Server Error"}}. (HTTP 500)) H$ a1 {- V7 ^- b* {0 ]
复制代码
2 ?3 q' C$ a; Q! f1 @9 G$ c在 Grizzly 版,我测试 glance index 时候报错:( R5 B2 `1 Q# _0 k+ s& i
Authorization Failed: Unable to communicate with identity service: {"error": {"message": "An unexpected error prevented the server from fulfilling your request. Command 'openssl' returned non-zero exit status 3", "code": 500, "title": "Internal Server Error"}}. (HTTP 500)
& y8 W3 c7 h' D# H
! F7 }. B) @4 f4 Y4 r错误信息指出:glance 没有通过keystone验证,查看了 keystone 日志,报错如下:
. `! J& ?5 N; Z8 |; Z6 {3 E) \; \2677 2013-03-04 12:40:58    ERROR [keystone.common.cms] Signing error: Error opening signer certificate /etc/keystone/ssl/certs/signing_cert.pem2678 139803495638688:error:02001002:system library:fopen:No such file or directory:bss_file.c:398:fopen('/etc/keystone/ssl/certs/signing_cert.pem','r')2679 139803495638688:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:400:2680 unable to load certificate2682 2013-03-04 12:40:58    ERROR [root] Command 'openssl' returned non-zero exit status 32683 Traceback (most recent call last):2684   File "/usr/lib/python2.7/dist-packages/keystone/common/wsgi.py", line 231, in __call__2685     result = method(context, **params)2686   File "/usr/lib/python2.7/dist-packages/keystone/token/controllers.py", line 118, in authenticate2687     CONF.signing.keyfile)2688   File "/usr/lib/python2.7/dist-packages/keystone/common/cms.py", line 140, in cms_sign_token2689     output = cms_sign_text(text, signing_cert_file_name, signing_key_file_name)2690   File "/usr/lib/python2.7/dist-packages/keystone/common/cms.py", line 135, in cms_sign_text2691     raise subprocess.CalledProcessError(retcode, "openssl")2692 CalledProcessError: Command 'openssl' returned non-zero exit status 3
6 A9 G1 x9 i/ J: C1 Y- Q4 h
8 x+ k; t1 C* v# L) k0 j! F, j在Grizzly 版中,keystone 默认验证方式是 PKI , 需要签名证书,之前的版本都是用的 UUID,改 keystone.conf:
  N8 J+ T  ^/ S( F0 J/ R( `token_format = UUID
' V3 @5 ]- l. D8 s/ J: c: M- U' {( k4 p7 z1 g, w
在试一次就没有错误了。7 c$ p3 Y/ l0 Y, J

* s+ {! d3 f) o, u
1 k3 z$ h" {- b8 E, T$ x10、镜像制作3 G% _' O5 K1 k& b
这里主要强调下windows的镜像制作,因为windows的涉及到加载驱动的问题,就比较麻烦。
6 b% D' y' ~) E: p: F下载virtio 驱动,因为win默认不支持virtio驱动,而通过openstack管理虚拟机是需要virtio驱动的。需要两个virtio驱动,一个是硬盘的, 一个是网卡的,即:virtio-win-0.1-30.iso和virtio-win-1.1.16.vfd。这里主要强调两个地方:2 V* \8 _7 n% Q2 U4 }
1、创建镜像:
4 V  \# B& u5 Kkvm -m 512 -boot d –drive  
5 @1 b: s4 H4 J. x5 N% b+ I  
7 b6 q6 q6 k2 i/ Jile=win2003server.img,cache=writeback,if=virtio,boot=on -fda virtio-win-1.1.16.vfd -cdrom w( q" z+ `# E. U" b( ~1 Z
复制代码
" l+ p( ^: ?  s7 l) t1 n* W
0 X1 \0 ~4 B0 d- V8 Z3 [6 O% ?, s/ J+ ]1 }9 K
/ o2 F: {# n7 d! Z  p& t2 L( |
; F4 @0 y- ?6 I
2、引导系统 :
# P( ~# g4 @$ y; F  ekvm -m 1024 –drive file=win2003server.img,if=virtio,
# A; L) p) G, p9 R; [3 o+ E" k$ z( x% K( h4 B/ }% X( e
boot=on -cdrom virtio-win-0.1-30.iso -net nic,model=virtio -net user -boot c -nographic -vnc 8
5 t; o* n7 Z, H$ X: B复制代码2 Q1 e8 E* w8 ~8 j* @( T6 P4 j
这 里需要注意的地方是if=virtio,boot=on –fda virtio-win-1.1.16.vfd和引导系统时使用的virtio-win-0.1-30.iso 这两个驱动分别是硬盘和网卡驱动。如果不加载这两个驱动安装时会发现找不到硬盘,并且用制作好的镜像生成实例也会发现网卡找不到驱动,所以在这里安装镜像 生成后需要重新引导镜像安装更新网卡驱动为virtio。
- v4 `& B  ], _; H2 m; f) \" ?1 @; n) R/ ^2 y8 T
11、删除僵尸volume1 y$ ]. m/ I. j3 y" f" {
$ o% h- N; X" k3 n; U, x9 ?
3 ]+ e& L& a4 T
如果cinder服务不正常,我们在创建volume时会产生一些僵尸 volume,如果在horizon中无法删除的话,我们需要到服务器上去手动删除,命令:lvremove /dev/nova-volumes/volume-000002注意这里一定要写完整的路径,不然无法删除,如果删除提示:“Can't remove open logical volume“ 可尝试将相关服务stop掉,再尝试删除。删除完还需到数据库cinder的volumes表里清除相关记录。
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

北京云银创陇科技有限公司以云计算运维,代码开发

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 点击这里给我发消息

GMT+8, 2026-4-8 15:23 , Processed in 0.072610 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

快速回复 返回顶部 返回列表