找回密码
 注册
查看: 3343|回复: 1

openstack常见错误

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2018-9-2 15:02:15 | 显示全部楼层 |阅读模式
以下主要为安装部署过程中遇到的一些问题,因为openstack版本问题,带来的组件差异导致不同的版本安装的方法也完全不一样。经过测试,目前已可成功部署Essex和Grizzly两个版本,其中间还有个版本是Folsom,这个版本没有部署成功,也没有花太多时间去研究,因为Folsom版本中使用的quantum组件还不成熟,对于网络连通性还有很多问题,网上也很少有成功的案例,大多数人使用的还是folsom+nova-network模式。
9 w# E, ^0 S; N1 o2 ]
1 }8 a7 a0 V- u" n7 _. m到了Grizzly版本,quantum组件才比较稳定,可以正常使用,自己也花了很多时间研究,现在已可以成功部署多节点环境。以下是部署过程中遇到的一些问题,包括Essex和Grizzly两个版本。国内网上关于这方面的资料很少,很多资料也都是国外网站上看到的。而且很多情况下日志错误信息相同,但导致错误的原因却不尽相同,这时候就需要仔细分析其中的原理,才能准确定位。遇到错误并不可怕,我们可以通过对错误的排查加深对系统的理解,这样也是好事。
! p) h  z' s: S& Q7 a8 f/ E1 W) D2 y" W' Z6 u8 ~3 I
关于安装部署,网上有一些自动化的部署工具,如devstack和onestack,一键式部署。如果你是初学者,并不建议你使用这些工具,很明显,这样你学不到任何东西,不会有任何收获。如果没有问题可以暂时恭喜你一下,一旦中间环节出现错误信息,你可能一头雾水,根本不知道是哪里错了,加之后期的维护也是相当困难的。你可能需要花更多的时间去排查故障。因为你根本不了解中间经过了哪些环节,需要做哪些配置!这些工具大多数是为了快速部署开发环境所用,正真生产环境还需要我们一步一步来操作。这样有问题也可快速定位排查错误。0 s5 S. w# m1 ]& y! b# k( a

4 R1 s; [' O; v+ x9 Z本文仅是针对部署过程中的一些错误信息进行总结梳理,并给予解决办法,这些情况是在我的环境里遇到的,并成功解决的,可能会因为环境的不同而有所差异,仅供参考。
) a5 S3 u! k* Y. _9 O1 _- u/ s5 k
% G9 f$ c1 G& D+ S0 Z, M. F1、检查服务是否正常:. R1 G4 F0 y  H% a$ F9 ^4 r4 ~
  m5 Z/ Q2 `( l; h6 F
root@control:~# nova-manage service list: k" N8 f0 @1 H/ M3 u1 L) ]

. v" N6 M; k; l6 Q2 Q" R, ~7 o' kBinary           Host                                 Zone             Status     State Updated_At; @" I6 Q. U! W' b; H5 I

2 x4 }& d' M! ^: T1 anova-cert        control                              internal         enabled    :-)   2013-04-26 02:29:44$ E  J: e  M, m6 Y, j5 K9 D
  k* E9 b9 U$ D/ g1 M- J
nova-conductor   control                              internal         enabled    :-)   2013-04-26 02:29:42) T6 `7 X$ i6 f0 M* [

- Y, j0 w  z0 Inova-consoleauth control                              internal         enabled    :-)   2013-04-26 02:29:441 X2 J$ p0 T( c5 @! W/ g
0 q9 |8 p8 f9 |% j& }! c: b
nova-scheduler   control                              internal         enabled    :-)   2013-04-26 02:29:47; d* v& L8 R) h4 y9 k1 |
, N; A. W5 X8 e! m. P: e* r
nova-compute     node-01                              nova             enabled    :-)   2013-04-26 02:29:46
/ J0 Y9 q1 b% C6 c% ^, K
$ X0 [4 S" h: L$ i  snova-compute     node-02                              nova             enabled    :-)   2013-04-26 02:29:46
6 J3 ~( k# l" D9 G& j# ?) E- V" h $ E) @  R6 M% H5 Q' B
nova-compute     node-03                              nova             enabled    :-)   2013-04-26 02:29:42
8 o9 V" p1 x; g- ]! y* G, X9 c9 ^ " D# c1 l6 L% |/ y4 g& W3 R" u

- l. K& ^9 Z+ D4 [0 z6 R+ @) l如果看到都是笑脸状态,说明nova的服务属于正常状态,如果出现XXX,请查看该服务的相关日志信息,在/var/log/nova/下查看,通过日志一般可以分析出错误的原因。$ b3 P+ [0 q1 {  _& a( ]0 J

. A# j9 T8 z/ j8 n1 M5 ^2 z2、libvirt错误
& c6 D; u2 G0 \. d5 m/ L  h4 Z/ X- m8 Q. a
  U. d1 F- o5 H4 f/ ^- E

9 G0 \. W: k; j' r- cpython2.7/dist-packages/nova/virt/libvirt/connection.py”, line 338, in _connect5 A8 @( D/ w# V4 g  \5 N4 a9 F
2013-03-0917:05:42 TRACE nova return libvirt.openAuth(uri, auth, 0)0 e; v; S% i0 |2 l$ J9 u+ ?' o7 n" V
2013-03-09 17:05:42 TRACE nova File “/usr/lib/python2.7/dist-packages/libvirt.py”, line 102, in openAuth$ n: b9 n# k9 v+ r
2013-03-09 17:05:42 TRACE nova if ret is None:raise libvirtError(‘virConnectOpenAuth() failed’)
5 i3 h$ E# B4 |! r2013-03-09 17:05:42 TRACE nova libvirtError: Failed to connect socket to ‘/var/run/libvirt/libvirt-sock’: No such file or directory
- [9 S2 j& G$ L' W6 K( ?: U% O, w2013-03-09 22:05:41.909+0000: 12466: info : libvirt version: 0.9.8' R; p; W$ w4 G/ t8 T2 y
2013-03-09 22:05:41.909+0000: 12466: error : virNetServerMDNSStart:460 : internal error Failed to create mDNS client: Daemon not running
2 u+ j. D8 W. w* w5 m 1 t5 b' r; c; K
7 J6 F7 P# R" b! [5 {. w
解决方案:2 E0 m$ ^& d7 p( O" g2 W
2 c; I% K3 `4 J9 p
出现这种错误首先要查看/var/log/libvirt/libvirtd.log日志信息,日志里会显示:libvirt-bin service will not start without dbus installed.4 Z* U7 E3 Y  V: T3 ]
- q& J$ l4 x8 h
我们再查看ps –ea|grep dbus,确认dbus is running,然后执行apt-get install lxc6 o# y$ P' z- l: [5 T- e
( p$ m6 b9 `- d: |0 a! O
3、Failed to add image: A  e. e' u6 N" F9 _
) ~- S4 k; y0 O! a* H+ ?
Error:
# |9 W) z& e8 I. [Failed to add image. Got error:
The request returned 500 Internal Server Error6 Y* g' W, x: l& d+ e

) {& i; c0 T, H2 r! T# P# P. ^$ }# e* v1 p, I) W! n  c7 [
解决方案:* K5 e% [! g4 p3 P( {  ~/ f" p

- i5 ^0 L+ Z8 R, n4 n环境变量问题,配置环境变量,在/etc/profile文件中新增:% b0 }+ f* J% c, u
, ]  E0 ^2 O2 v% z+ G- `, w% f  z
OS_AUTH_KEY=”openstack” 1 J4 O+ `$ v+ U7 b7 F, v" Q; n
OS_AUTH_URL=”http://localhost:5000/v2.0/”4 p  u) ]1 Z/ L0 Y/ `  _# H" k8 h
OS_PASSWORD=”openstack”
6 U) C, j* t) L( k5 @! x) JOS_TENANT_NAME=”admin”
/ @6 X, w0 C1 z  ]( ^6 l% VOS_USERNAME=”admin”1 Z  {, e$ O6 B3 i5 H

# a; m& h4 W  G9 ]8 _: d/ \/ P7 l8 x, i' Z6 w) f4 J) c
然后执行source  /etc/profile即可!当然你也可以不在profile里配置环境变量,但是只能临时生效,重启服务器就很麻烦,所以建议你还是写在profile里,这样会省很多麻烦。7 j! U/ N$ j+ ~
3 D/ T3 `4 I3 a) a' h% I
4、僵尸实例的产生$ t4 {, G) }+ w8 h/ O
$ o0 V2 k+ k- G
僵尸实例一般是非法的关闭nova或者底层虚拟机,又或者在实例错误时删除不了的错误,注意用virsh list检查底层虚拟机是否还在运行,有的话停掉,然后直接进入数据库删除。: h, _, Q; Y4 o. C$ B3 P5 J. @9 b
8 y3 c# d; j# D9 M
Nova instance not found0 l9 h" A# k& E% @  P$ E8 I0 B

3 d, L3 w& W. C$ P# O, VLocal file storage of the image files.
) ]7 W# j7 l8 }8 ?3 D4 L; J 2 n9 w+ ^: D. K( `& F
Error:# X7 t7 g( H3 m% f5 Y
2013-03-09 17:58:08 TRACE nova raise exception.InstanceNotFound(instance_id=instance_name)
  t. L" {+ l) p* s+ m2013-03-09 17:58:08 TRACE nova InstanceNotFound: Instance instance-00000002 could not be found.
% {. o  G. h: d2 C2013-03-09 17:58:08 TRACE nova/ D$ `% |" |  ]9 I4 p, P# B

4 B. n# U+ n' ~* q8 e
' K- I% H6 q8 t# l+ X+ C1 j7 y/ f - K( [, u/ Y- r
$ j0 q* \  `% ]
解决方案:2 R; B; F! Z# c2 T+ }

6 W5 Y  X. r% L. x# o+ w删除数据库中的僵尸实例或将数据库删除重新创建:$ }0 t% Q1 Z( R! U

" @. Y* r0 @+ fa、删除数据库:! \, Q9 V6 p: K
  L9 I1 T$ P3 p2 T  H
$mysql –u root –p2 B; |8 _- H: h' J6 a9 z
DROP DATABASE nova;$ M5 G& E+ g( X# ?
) P. m- Q  a: D
Recreate the DB:
) r5 r  d" `7 j. e' I- JCREATE DATABASE nova; (strip formatting if you copy and paste any of this)8 ]; X; L2 F! k& ~8 u, Q
GRANT ALL PRIVILEGES ON nova.* TO ‘novadbadmin’@'%’ IDENTIFIED BY ‘<password>’;. V7 ]! E  W# i$ G
Quit4 v4 u/ q# \, N& ^) R
# R& F# _  X) X$ V7 x
Resync DB
# F8 c  y7 `9 q$ n9 U* j 7 W( M: E/ T) t

; B: a: x4 v" @5 mb、删除数据库中的实例:
* ]! Z# b( ^- X* f9 p4 B
8 O9 T- [! z# K3 F* k: q#!/bin/bash% ?) Q2 e# z& u% |- L# `

( `) Z" P4 q7 c% Tmysql -uroot -pmysql << _ESXU_
  M5 o6 y2 K! m/ h$ x. i7 U% ^$ w # D- s0 c! Y2 @7 |$ _
use nova;3 |3 L4 N; W: a. G* k6 u

) N& q( f% X  L4 `: wDELETE a FROM nova.security_group_instance_association 1 E. ?, f2 ^4 k9 h: j0 S( G
+ Q' X/ V  h; U
AS a INNER JOIN nova.instances AS b/ J/ w: P0 V# Q/ k, b$ _# Z

! v6 ~: X$ R0 P' @& e* Y6 _0 w6 TON a.instance_uuid=b.id where b.uuid='$1';4 F1 @7 |' E: h; Z+ A& E  z

& I! Q) o  a' Z% `DELETE FROM nova.instance_info_caches WHERE instance_uuid='$1';
$ {4 r2 j, F! w! @' V; N 5 |$ p" m" e2 g2 s; X' Q* F# z1 i' B) E
DELETE FROM nova.instances WHERE uuid='$1';
' X% }" E; w( h8 O   ^) h4 B) d# A: W
_ESXU_
  ?  X0 V$ z% W
! Z1 C; _% s2 U- j$ h% h( l
1 f/ W+ l; K9 \4 _- V% f9 [* P) {  G将以上文件写入delete_insrance.sh中,然后执行sh delete_instrance.sh insrance_id;& z, H/ T) {0 j# @. N* N9 w

6 i* T9 f& Z0 v# o3 p其中instrance_id可以通过nova list 查看。
0 _4 S% _# c) p$ `5 a# b$ G9 h$ h6 z& v
5、Keystone NoHandlers
9 ^, N7 K2 D8 }8 a  ?1 @% @& D; ~2 j8 ~
6 H# z  y( }7 B* `( M3 s$ ?/ dError3 I0 N2 W9 x8 w* V* f+ f/ O  F# j
root@openstack-dev-r910:/home/brent/openstack# ./keystone_data.sh
' Q: T* L0 a" H+ WNo handlers could be found for logger “keystoneclient.client”
, a/ ~2 j1 m" K5 K0 `& {5 g8 rUnable to authorize user( p. Z6 ^4 a! T5 H
No handlers could be found for logger “keystoneclient.client”3 F  f# @1 I/ |
Unable to authorize user' b9 T, b( `% b" Z0 K
No handlers could be found for logger “keystoneclient.client”
5 M- L( h' s1 mUnable to authorize user9 V  G) o1 O* c3 n! K. D6 l

6 H4 y3 O/ q# v4 a$ k
9 e- _) s6 i1 {' h' z解决方案:0 `$ x8 |2 T, y4 u9 Z

1 X8 V4 o) X6 V: Y. K# z出现这种错误是大多数是由于keystone_data.sh有误,其中; u2 V) Q8 \* d' `
. C( y4 x& P+ r
admin_token必须与/etc/keystone/keystone.conf中相同。然后确认keystone.conf中有如下配置:
: s+ G' M. g8 @9 \+ v" r" }. x% ^0 r* n4 s% S) m" ?- H7 d0 ?$ G
driver = keystone.catalog.backends.templated.TemplatedCatalog template_file = /etc/keystone/default_catalog.templates  g, q3 W7 R# B: d

3 l4 J7 T  ]0 s; i6、清空系统组件,重新安装:
; q  q; z( @) w8 g$ J, ]# a' M  @- h' @7 V+ v& O& }9 [) B3 o/ C
#!/bin/bash
; I7 |* q2 C) ]9 g, mmysql -uroot -popenstack -e “drop database nova;”; {1 ?7 P7 w& `- m% \% U
mysql -uroot -popenstack -e “drop database glance;”
6 i8 @+ g3 N( q! O8 R+ Cmysql -uroot -popenstack -e “drop database keystone;”
( F0 Z" m$ t: u; ^! xapt-get purge nova-api nova-cert nova-common nova-compute
4 H' Q8 m4 u! A3 p- |nova-compute-kvm nova-doc nova-network nova-objectstore
, \$ C- d% j1 Znova-scheduler nova-vncproxy nova-volume python-nova python-novaclient
2 s0 B- w1 Q) z4 iapt-get autoremove. c5 }' O% o/ q* j# J* j& Y- J% g$ ~) V
rm -rf /var/lib/glance& ]5 q6 }4 t2 n" @0 L+ j
rm -rf /var/lib/keystone// u: ~4 L% r0 N- r' O
rm -rf /var/lib/nova/
( G4 M# U) R' L6 Zrm -rf /var/lib/mysql
+ ]" i; B; D/ _% R# e' A; Q 8 ~9 l+ N0 s% c' d4 V% B/ S

. z0 V% j6 t+ c: [& `; y! N" j可通过执行上面的脚本,卸载已安装的组件并清空数据库。这样可以省去重装系统的麻烦!3 E! |1 {( @0 n3 A6 I

- E- G2 ]0 C6 o7、Access denied for user ‘keystone@localhost(using password:YES’)
$ B$ h/ }& ]  s. q
" k$ o' J+ ?0 c4 D! q# keystone-manage db_sync
. O' s2 q! p( X. F $ J, q) C6 a# g9 h
File “/usr/lib/python2.7/dist-packages/MySQLdb/connections.py”, line 187, in __init__4 y7 S" E; x6 Y4 T

" J. _- l' t. |6 @  C! Hsuper(Connection, self).__init__(*args, **kwargs2)
1 |' t/ F* G6 q1 P+ Y  Nsqlalchemy.exc.OperationalError: (OperationalError) (1045, “Access denied for user ‘keystone’@'openstack1′ (using password: YES)”) None None
! W" }+ r( x- j7 M + ]$ r( b1 o$ ^
* E$ H; t! I% h! p5 a; q: c
解决方案:  j0 R/ |/ y: _, t+ [( m

* a) W" I1 }5 |% ^0 i- Z6 L查看keystone.conf配置文件链接数据库是否有误,正确如下:8 o" p. G% A9 s2 j6 ~9 Q! ]

" o, X4 _" h* S3 \[sql]
1 o# j5 ]  [! B$ b7 q5 e- X# X& ?* ~ 5 C; `, W' N( }/ J8 H3 A' {0 v, u
connection = mysql://keystone:openstack@localhost:3306/keystone/ O) v" W* @9 u0 Z) @+ n

3 u! s9 j1 G2 {' a9 c& R7 Y* D" h+ X1 R- F) g, E$ f
8、nova-compute挂掉与时间同步的关系' z: }( L9 J/ J# P$ f. }

% ~- W- G. @2 m7 n" w  i4 h1 E/ D很多时候发现nova-compute挂掉,或者不正常了,通过nova-manage查看状态是XXX了。
7 Z/ \' r1 \- n( @5 B: M6 K' |) |; a8 `6 z6 i* P) d% ], {
往往是nova-compute的主机时间和controller的主机时间不一致。 nova-compute是定时地往数据库中services这个表update时间的,这个时间是nova-compute的主机时间。
6 E7 Q5 @1 Y4 P0 i* ~8 C/ i- @" g4 `$ n2 F) X; O3 X" R
controller校验nova-compute的存活性是以controller的时间减去nova-compute的update时间,如果大于多少秒(具体数值代码里面有,好像是15秒)就判断nova-compute异常。1 i& R. I. ~' S: |
% `$ ?7 Y6 H  E5 E. R' K' I3 o; A1 J
这个时候你用nova-manage查看nova-compute状态是XXX,如果创建虚拟机,查看nova-scheduler.log 就是提示找不到有效的host 其他服务节点类同,这是nova心跳机制问题。所以讲nova环境中各节点时间同步很重要。一定要确保时间同步!!$ I& L0 [: i: [# }0 F$ _. @) w
7 S' M/ N8 g. F0 e) i
如果在dashboard上看nova-compute状态,可能一会儿变红,一会儿变绿。那就严格同步时间,或者找到代码,把上面的那个15秒改大一点。- Y, M/ J! j4 G) l0 G
+ U1 J& ~) U( ]* {* b5 c
9、noVNC不能连接到实例8 B& d. R- D. l; c* Y
* }3 h. B# U7 G: q, }$ M& s) P: T
novnc的问题比较多,网上也有关于这方面的很多配置介绍,其实配置不复杂,只有四个参数,配置正确基本上没什么大问题,但是装的过程中还是遇到了不少的问题。
# l; T3 R2 Q# ?2 }) q/ f. v8 \+ n# `1 G, ^8 L. U8 g# q
a、提示“Connection Refuesd”7 D6 ~; k! l! }7 O! b
+ z4 @) H" {7 l2 ^8 ~7 B& j
可能是控制节点在收到vnc请求的时候,无法解析计算节点的主机名,从而无法和计算节点上的实例建立连接。
: P9 h  [0 }( V+ s+ z9 o& L2 W  T+ G: J6 X
另外可能是,当前浏览器不支持或者不能访问,将计算节点的ip和主机名的对应关系加入到控制节点的/etc/hosts文件中。; X! T1 u  k8 e4 ^
0 x6 a/ G8 I. E7 ]6 f9 n
b、提示“failed connect to server”/ Q' p, R" Z$ t( x! u6 b

6 v' S# c# P9 x" q9 A出现这种错误的情况比较多,有可能是配置文件的错误,我们的环境中遇到这个错误是因为网络源有更新,导致安装版本不一致,使组件无法正常使用,解决方法就是使用本地源。另外需要特别说明的是使用novnc的功能需要浏览器支持Web Socket和HTML5.推荐使用谷歌。9 B4 w! B7 Q3 Q
4 f) N+ l* i4 f. B$ Z5 h4 w" b
10、cinder错误,无法登录dashboard.3 _, @+ Y$ Y4 ^# W* Q# F
$ g$ N' ]0 O9 l( |' H
出现如下错误:$ d( z: q: q8 Z

! r! G3 r0 @* ^# A( w) s   
, Y$ U0 M8 x6 {+ e9 ~1 U1 ?! A$ vTypeError at /admin/ - T- Z$ H9 _5 Z* g
hasattr(): attribute name must be string7 R- @. p3 }4 c0 Y7 n/ a2 ?
9 @( R7 C( g7 n* |
Request Method:   GET! X+ `# l7 p' d6 R6 K! Y: b5 d
1 X) s' p6 G% m6 Z5 }6 J" u
Request URL: http://192.168.80.21/horizon/admin/
2 A4 v0 a2 q4 O# [3 s* U( N% c( B6 J " S8 y% c  N  j) O+ ]
Django Version:   1.4.5) a/ j8 e$ d, U
7 P8 W% N% V+ j# W9 N; ^
Exception Type:   TypeError
! L4 X; }1 H; E' X  K
5 x; G& m9 |. h5 v% EException Value:
  d  b6 N. i0 k& O2 e) l/ X. [2 o
4 ]7 X- D6 e( M$ Khasattr(): attribute name must be string
7 t% {( t6 n8 k: q# M& P1 I - X8 `# |! U+ V
Exception Location: /usr/lib/python2.7/dist-packages/cinderclient/client.py in __init__, line 78/ ^7 r+ z, x+ [( B2 F" u7 P

3 }6 y. s0 L" P/ F  sPython Executable:   /usr/bin/python
! ]6 b! u8 B* W, I( u , W) [" q; _( f( T( }3 k
Python Version:   2.7.3
! p& {$ w# `7 j# O: K* y . [+ q! p& ]; L7 U" _) I
Python Path: ( B& Z0 P& v0 T2 v0 w

/ a+ s; W5 n( i2 e$ w$ L, @5 M['/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../..',
: h8 _* u0 u- Y7 s; x# u! a/ a& ?
/ n0 j% n/ d) }: d& ] '/usr/lib/python2.7',
; k4 b4 z+ I# V: ~
2 @+ \  c) `5 n5 }6 k '/usr/lib/python2.7/plat-linux2',
% ]/ B; Y3 u0 z8 G! B9 z9 i
- e7 j' p: S$ w! o) \ '/usr/lib/python2.7/lib-tk',
* X* a. p  ^; F9 n / ?( ~& s8 D; P7 X* t3 w6 w1 M: a
'/usr/lib/python2.7/lib-old',
. [% P( X5 f3 I, o 5 Z3 d1 p2 R6 I4 ?+ h- r
'/usr/lib/python2.7/lib-dynload',
& x$ @; K5 r3 H+ ]' }  S : b& h( T# \( y1 }, \' ^3 s1 u
'/usr/local/lib/python2.7/dist-packages',0 q$ R4 C8 ?8 F) a

# @% J8 @% ~2 z; i, x '/usr/lib/python2.7/dist-packages',% D* K& S5 t5 O7 i

% _# u, p7 F  z! ^0 ~9 ~ '/usr/share/openstack-dashboard/',) i" q5 ^4 ]! j1 ]& |( s

) N# J5 Y9 j4 S '/usr/share/openstack-dashboard/openstack_dashboard']
: \4 e% x- ^5 l+ N! B- q; b 2 S! Z' @9 L, s( n4 H( f$ d2 D! Z. F

2 e2 X3 `% C0 [
, ?7 W3 |- @9 v3 `  Z% O; WServer time: Fri, 29 Mar 2013 12:51:09 +00007 i2 L" x# _9 G$ a+ D

' ~0 |+ `2 D$ X* d4 M! G" d
, x2 |% ~1 A! N5 g解决方案
% {" p. G) Z$ _* J% ~. E8 g0 F& ^1 a* Y5 _' P( H4 N8 d
查看 apache2 的 error 日志,报如下错误:
, U! }0 H6 ]0 Z+ I% j( x0 L: o5 I: ]" M

* n: k5 c3 K$ H# c$ d$ SERROR:django.request:Internal Server Error: /horizon/admin/
0 y. o$ X) y9 `+ s
  v- [6 }# B) a; }, ]2 uTraceback (most recent call last):
/ v/ P) e! m7 O5 X' T3 _
/ {+ g% Y) F) e6 _9 U, G# k7 B4 ~  File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py", line 111, in get_response+ G8 @  _" E8 j# H/ ~* M
1 Y/ T: m6 \, b. ^
    response = callback(request, *callback_args, **callback_kwargs)2 W  K( M1 X# a6 D
+ m7 ?3 Z$ r( @' |6 A
  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 38, in dec
- e; A- V0 _) I* v& g, h$ P ; N9 B  I7 z) z- }, ^+ j+ O5 H
    return view_func(request, *args, **kwargs)' D0 C6 n7 b- n* Q+ d$ r8 A
2 r$ r' f+ U7 g# k. Y
  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 86, in dec
+ l, }; t" n3 C, A( p
7 Q) \- `1 e7 s2 z* G7 W    return view_func(request, *args, **kwargs)& x6 B4 F8 [5 A1 ^9 Y; o, J; u( U3 r

7 a- q8 s- A/ ]% ^/ z  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 54, in dec4 K, X% @6 \9 t# m& v: F, R
2 v9 J+ e! {( z9 b
    return view_func(request, *args, **kwargs)
, |! v. G5 T) P' n6 E5 a
3 k9 y5 a# `& E+ k  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 38, in dec
2 i0 O* ~: f* V4 J$ z( h $ ^$ n6 _8 H- e$ D( u
    return view_func(request, *args, **kwargs)
" U# U8 l: P8 [9 t1 }+ q% ~
+ R1 h0 g9 r( e) u  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 86, in dec
, A# H1 e3 k' v! o$ p
# p8 p: `: K! r- Z4 D    return view_func(request, *args, **kwargs)
) B7 m& ]( {- J+ |; v
) Q7 ^1 V7 K5 G4 {  File "/usr/lib/python2.7/dist-packages/django/views/generic/base.py", line 48, in view
7 i' ^) S$ H8 n7 \. [* A 4 n5 l5 v, D: T* B5 O
    return self.dispatch(request, *args, **kwargs)
( M) Z/ e* S7 j8 A( L. }$ N/ y6 t* { + \3 B7 S; J) d5 ^
  File "/usr/lib/python2.7/dist-packages/django/views/generic/base.py", line 69, in dispatch
& G8 g9 O5 X" {+ F4 c$ Y$ K
; ~& G4 t7 c1 K& `1 R1 ]* i3 k    return handler(request, *args, **kwargs)
3 U; H  k7 Q& C$ a2 y
/ @$ D8 r0 J8 e- V0 F; k6 S: Q* m- q  File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 155, in get
& M9 C9 A' \; s; X" Y% i
( H# ?: [$ _& N7 i3 x5 [    handled = self.construct_tables()
' z2 Z/ C) ~1 m) G& X 0 l3 S, C8 ^" ?# f& h! ?) l6 A
  File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 146, in construct_tables
: G6 G; u" h0 ?& j  e; E/ E% n
" T3 Z/ C# ~8 r9 m  c6 y# k    handled = self.handle_table(table)
# h- _% b8 ^4 R" F  p
) k& ]' p6 h! A# p' ?  File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 118, in handle_table
0 J5 Z; _- T% o4 Y# r* f) V7 M 0 l* K' M* g3 b# I# T' q2 ]
    data = self._get_data_dict()
, j$ n2 ^1 X3 Q2 O  b- e - p$ E! d7 `  k% j8 ^) D  [
  File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 182, in _get_data_dict
) E- c0 j2 L# E  T3 p' ~# r
4 ~$ u3 [3 c9 R% [' i    self._data = {self.table_class._meta.name: self.get_data()}
9 T. g+ v( \, \5 F4 Q' _' n
0 H: M8 ?# K$ n0 T- l, p: s9 I  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/dashboards/admin/overview/views.py", line 41, in get_data2 I$ g, Z$ K- Z" c' |
6 R6 A" W  l& D; B2 B0 Z+ P
    data = super(GlobalOverview, self).get_data()# U/ h5 j! j% x5 [+ ]

% O* e2 e: ?. m& D0 W9 A: g# _' H  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/views.py", line 34, in get_data
% d5 b+ _7 t& W$ Z 5 n2 U2 U# }% z# w; W
    self.usage.get_quotas()
. g: V5 }! J% W8 J
# ?( V% X  b$ E7 ?  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/base.py", line 115, in get_quotas/ K: i4 Y3 W; Y! l7 D: a

  I: z- K- `: B! W% `; k& K    _("Unable to retrieve quota information."))
! L! C/ |& x& r8 B) L . W9 u4 w) A* h+ t1 \! Z# Q
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/base.py", line 112, in get_quotas, F1 m4 f9 C4 z$ R9 \
3 n# z  ?- o1 y2 g' o) @
    self.quotas = quotas.tenant_quota_usages(self.request)
1 W. l4 r) }* F; D% k' `( \
6 |" [' d2 g# }3 {& q6 x9 z' C  File "/usr/lib/python2.7/dist-packages/horizon/utils/memoized.py", line 33, in __call__1 r, b: I% e( S, C! j* S' M5 m# O
8 \1 o$ A# }7 n# P  }2 Q
    value = self.func(*args)
: v; q. E3 L5 }% a5 i% T' W% ? 0 U$ f0 N! r" [: d
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/quotas.py", line 115, in tenant_quota_usages9 j! ~- X! y  V  }0 A

' T! {  T7 K5 w" q$ V    disabled_quotas=disabled_quotas):* p( l7 a, K) Y2 v
+ t1 Q/ z0 c+ A3 l1 f
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/quotas.py", line 98, in get_tenant_quota_data
9 ~$ C6 ]# O" B" k: s* E' E- \- k % u+ q" Z. @: E% I
    tenant_id=tenant_id)
8 G2 k9 A4 k* M5 n- ^# Y- x$ R' ? 1 {* {5 F" A- n
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/quotas.py", line 80, in _get_quota_data
) v$ ?5 b  x3 a  n# F8 E : |* b# r+ h. `, I+ k. S% K
    quotasets.append(getattr(cinder, method_name)(request, tenant_id))2 [6 h- w5 S0 N# {- E

  [2 @, ]3 Y! T1 H0 q3 v6 E  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/api/cinder.py", line 123, in tenant_quota_get: o7 A; Z( R7 u' Z

  Z& {1 l( D7 D3 L& f7 d    c_client = cinderclient(request)
  n, V5 l0 e! T3 w1 n9 j& C
* F  e3 v  t( I$ i6 c& {  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/api/cinder.py", line 59, in cinderclient
6 s; k* J* a! P, ^* g* E 5 x. R: O; P6 h% V  z9 K  D" S8 D
    http_log_debug=settings.DEBUG)+ O+ [4 m0 a: V. Z- ]

( _% B" T5 E9 V3 s$ _2 h; ~  File "/usr/lib/python2.7/dist-packages/cinderclient/v1/client.py", line 69, in __init__6 v& s  W- \  V1 X* u3 A. @+ w) B
7 e8 {5 B" O; v  }
    cacert=cacert)& }; R! G8 X; ?2 o3 Q
) {  X: e" o3 H  Z- V) v
  File "/usr/lib/python2.7/dist-packages/cinderclient/client.py", line 78, in __init__3 f$ z3 {( i8 v3 A
) [1 W* v+ b2 c. A4 _
    if hasattr(requests, logging):
9 X: d* J- d9 E5 n4 E9 O
8 y6 \0 r+ n; a. d8 d4 qTypeError: hasattr(): attribute name must be string
0 l7 R6 C' W- y% C% q  |* S & |9 R! c% n7 o

6 D0 I5 O* z( P' u错误信息中指出了 Cinderclient 的 client.py 中 78 行 hasattr() 方法的属性必须是一个字符串。
, ~( c5 b2 b. ]修改代码:" A0 u" r. x9 a6 Y; J7 _
7 z9 A6 A# m9 {' a

' m! i5 v' W1 L. g- `( \# X9 I" |6 G5 o, G; p+ \
# vim /usr/lib/python2.7/dist-packages/cinderclient/client.py
" O2 c' k; Q+ ~; O
. u6 D5 I% n7 S9 ]" x4 L( R* x 78 if hasattr(requests, logging): # 改为 : if hasattr(requests, 'logging'):
2 H, u3 X+ _- K' }6 m5 b( x
! l  S" f+ E, ]. E 79 requests.logging.getLogger(requests.__name__).addHandler(ch), X' i# l. C, m0 E& |" _3 w
% l4 Y( v1 x( c, \

# B4 _# E" I5 i+ t+ D+ u" T6 n重新启动 apache2 :
' b8 q4 |# t6 O5 }
( N6 N. C: D" _( w- Y /etc/init.d/apache2 restart
* K0 W7 S+ J# s$ S: Z0 `" N9 A4 u* ?1 c, X( O3 z1 y
这次访问 dashboard 没有报错,尝试创建 volume 也没有问题了。# E& f) Z; `! Z* W3 [" m0 A- Q# e
, ~2 p4 k$ O2 O& p$ p
11、Unable to attach cinder volume to VM; f4 q- Q6 K/ t9 F

. K2 E4 M1 I3 u) t) s     在测试openstack中的volume服务时把lvm挂载到虚拟机实例时失败,这其实不是cinder的错误,是iscsi挂载的问题。" f& i) c- h: L3 K$ s
% }) f" C4 n3 F, Q# r$ [6 `
以下是计算节点nova-compute.log 的错误日志:
' e4 W! y- l- r3 n8 j8 b/ |! P8 w8 q7 u+ S
2012-07-24 14:33:08 TRACE nova.rpc.amqp ProcessExecutionError: Unexpected error while running command.
. [4 E/ {8 R! n- x9 ]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 –rescan4 g3 b3 L4 m2 \! a
2012-07-24 14:33:08 TRACE nova.rpc.amqp Exit code: 2559 }. D2 X, y8 M% k8 ^1 f; ~
2012-07-24 14:33:08 TRACE nova.rpc.amqp Stdout: ”9 E# Y. s) k! F/ ~3 V9 y
2012-07-24 14:33:08 TRACE nova.rpc.amqp Stderr: ‘iscsiadm: No portal found.\n’
. x7 O! u- ]6 M9 D
- }' r& }6 W9 W6 x
+ v- v: S5 _3 T6 E' C
+ A  P: _" z$ t* H7 M& T/ W以上错误是没有找到iscsi服务端共享出的存储,查找了很多openstack 资料说要添加以下两个参数:* V+ {6 x9 Y1 t# v

! R8 o7 L6 D2 W7 `, p9 J1 Niscsi_ip_prefix=192.168.80 #openstack环境内网段  \* E! B1 g) X" W2 E; H
" D* B) p0 j7 d( @
iscsi_ip_address=192.168.80.22 # volume机器内网IP
5 v# ?& O! {" l+ n/ x* @1 @/ f/ t3 _" y
可是问题依然无法解决,后来发现只要在nova.conf配置文件中添加参数iscsi_helper=tgtadm 就挂载失败。$ [. z9 Q' V' Y3 }; E" g4 M/ @

' E7 i1 T- R* h9 E% [! [6 D根据这个情况进行了测试查看日志才发现:如果使用参数 :iscsi_helper=tgtadm 时就必须使用 tgt 服务,反之使用iscsitarget服务再添加参数iscsi_helper=ietadm。: u6 v# i! U9 @$ t
1 W. V: t) i# L
我测试环境的问题是tgt和iscsitarget服务都已安装并运行着(在安装nova-common时会把tgt服务也安装上,这个不小心还真不会发现),在nova.conf配置中添加参数iscsi_helper=tgtadm ,查看端口3260 发现是iscsitarget服务占用,所以导致挂载失败,我们可以根据情况来使用哪个共享存储服务!!将tgt 和iscsi_helper=tgtadm、iscsitarget和iscsi_helper=ietadm保留一个即可。
! d: f- n" _& I8 e$ Y5 F1 {9 p
- b0 J' K. I5 a. N12、glance index报错:
; t6 c) a* U% g4 L" s8 o, U- F1 |- K! 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)! v9 M9 K3 d2 C- t, H' u
6 j9 c: g4 o5 Z& ~
$ `3 J1 p. o3 G
在 Grizzly 版,我测试 glance index 时候报错:6 U4 o$ c0 i2 H7 L
$ ~' S3 X; I9 o. r" Y
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)
1 m2 w+ Y; G5 }8 M错误信息指出:glance 没有通过keystone验证,查看了 keystone 日志,报错如下:3 p, X9 @0 W4 T1 I' O! O

; H! C# z: A, _  ~2 S2677 2013-03-04 12:40:58    ERROR [keystone.common.cms] Signing error: Error opening signer certificate /etc/keystone/ssl/certs/signing_cert.pem
$ p0 I# F1 u9 A+ T4 Q2678 139803495638688:error:02001002:system library:fopen:No such file or directory:bss_file.c:398:fopen('/etc/keystone/ssl/certs/signing_cert.pem','r')
9 \3 l4 {4 P' @5 z1 n2679 139803495638688:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:400:- R6 V& J( S( ^1 s5 N! S' F
2680 unable to load certificate
9 b( I- K; _2 F6 M5 t3 S2682 2013-03-04 12:40:58    ERROR [root] Command 'openssl' returned non-zero exit status 3
3 }* N8 ^3 }4 }) U, T5 @2683 Traceback (most recent call last):
1 O- r* A% n( G+ d1 t- t! T2684   File "/usr/lib/python2.7/dist-packages/keystone/common/wsgi.py", line 231, in __call__! P% O5 m/ l, {
2685     result = method(context, **params)' D0 Y# r6 U7 _* M6 R" ?* }( k
2686   File "/usr/lib/python2.7/dist-packages/keystone/token/controllers.py", line 118, in authenticate
: t* i  `# J- t2687     CONF.signing.keyfile)
5 f7 O5 ?- y/ J; W2688   File "/usr/lib/python2.7/dist-packages/keystone/common/cms.py", line 140, in cms_sign_token" j+ y9 d4 h7 W( m, p  H
2689     output = cms_sign_text(text, signing_cert_file_name, signing_key_file_name)
' U; J# i1 r& o8 Z0 }& F2 j2690   File "/usr/lib/python2.7/dist-packages/keystone/common/cms.py", line 135, in cms_sign_text. m! W7 X; I7 M' N9 `! J8 ^8 W/ T7 m
2691     raise subprocess.CalledProcessError(retcode, "openssl")
. W6 J, x: g" V2 y1 G+ c2692 CalledProcessError: Command 'openssl' returned non-zero exit status 3
) e4 o! _5 T! x4 K% q: y2 W在Grizzly 版中,keystone 默认验证方式是 PKI , 需要签名证书,之前的版本都是用的 UUID,改 keystone.conf:
! c& I3 T. }& l7 f" x! S6 f! q
" G  w( }) ^4 Q" P& c8 ]token_format = UUID
; o+ r6 f8 q" {0 ?. F. Y7 t# Z6 u在试一次就没有错误了。0 h* C% S" p0 \* ?% ^

$ V, T/ G* J2 p( `1 T0 p; V13、镜像制作
. }$ x2 ~3 K- D, v5 ~, D
1 Q( z; l+ l2 O% W这里主要强调下windows的镜像制作,因为windows的涉及到加载驱动的问题,就比较麻烦。
) ~8 Q: f' q1 s' d9 S5 d0 C3 q  x2 M. G' u: t1 u
下载virtio驱动,因为win默认不支持virtio驱动,而通过openstack管理虚拟机是需要virtio驱动的。需要两个virtio驱动,一个是硬盘的,一个是网卡的,即:virtio-win-0.1-30.iso和virtio-win-1.1.16.vfd。这里主要强调两个地方: # j& |, e4 ?* Q* ~/ ~( V
$ P  @: G4 P4 c& q
1、创建镜像: 0 H) R; D8 s. q# ~+ G

$ X1 C/ c) i; U( x9 I kvm -m 512 -boot d –drive
- F8 v8 c. R( B* s' o* E8 d   X; V$ H( [$ x
file=win2003server.img,cache=writeback,if=virtio,boot=on -fda virtio-win-1.1.16.vfd -cdrom windows2003_x64.iso -vnc:10                  
# ~7 O/ A% N% ^" h* ?% u 7 @$ x( v7 t5 Z, v1 f& P% b

( n" |* q: Q2 @4 {2、引导系统 :
& Q( t0 n3 G$ |! h% A6 h/ f/ S9 Z
* K" M" p( a( n( M% ~. pkvm -m 1024 –drive file=win2003server.img,if=virtio,
% Q! I6 x  R. E3 y$ g5 t8 k0 d& N
- j$ Q9 C# [/ d7 U( Oboot=on -cdrom virtio-win-0.1-30.iso -net nic,model=virtio -net user -boot c -nographic -vnc 82 \! q( G) N: U6 A6 R

" b. C: N/ {% V
% E( x' u" f5 x. h1 B% Q这里需要注意的地方是if=virtio,boot=on –fda virtio-win-1.1.16.vfd和引导系统时使用的virtio-win-0.1-30.iso 这两个驱动分别是硬盘和网卡驱动。如果不加载这两个驱动安装时会发现找不到硬盘,并且用制作好的镜像生成实例也会发现网卡找不到驱动,所以在这里安装镜像生成后需要重新引导镜像安装更新网卡驱动为virtio。: _3 ?# v& |" W" J& E
5 G6 e2 L  I# L9 d
14、删除僵尸volume7 v" r! w. a; l  V7 L

  y6 f$ A3 P3 P! X( K2 R如果cinder服务不正常,我们在创建volume时会产生一些僵尸volume,如果在horizon中无法删除的话,我们需要到服务器上去手动删除,
( o& ]* s) n! j4 Q7 R
5 V7 m7 E* k, T0 F  I0 `0 R! M" \命令:lvremove /dev/nova-volumes/volume-000002
- D$ _% f* `, {3 E
- `* W& c. e' j* U注意这里一定要写完整的路径,不然无法删除,如果删除提示:! Y; Z  e9 d. |: c, R# ^: p6 U2 f
7 s3 Q, X# ]& x
“Can't remove open logical volume“ 可尝试将相关服务stop掉,再尝试删除。删除完还需到数据库cinder的volumes表里清除相关记录。

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2018-9-2 22:29:09 | 显示全部楼层
以下主要为安装部署过程中遇到的一些问题,因为openstack版本问题,带来的组件差异导致不同的版本安装的方法也完全不一样。经过测试,目前已可成 功部署Essex和Grizzly两个版本,其中间还有个版本是Folsom,这个版本没有部署成功,也没有花太多时间去研究,因为Folsom版本中使 用的quantum组件还不成熟,对于网络连通性还有很多问题,网上也很少有成功的案例,大多数人使用的还是folsom+nova-network模 式。/ E; W9 e# T. V0 f$ ]

! p  c( B' A+ r( W" p6 j8 p* ~% i到了Grizzly版本,quantum组件才比较稳定,可以正常使用,自己也花了很多时间研究,现在已可以成功部署多节点环境。以下是部署过程中遇到的 一些问题,包括Essex和Grizzly两个版本。国内网上关于这方面的资料很少,很多资料也都是国外网站上看到的。而且很多情况下日志错误信息相同, 但导致错误的原因却不尽相同,这时候就需要仔细分析其中的原理,才能准确定位。遇到错误并不可怕,我们可以通过对错误的排查加深对系统的理解,这样也是好 事。
1 H9 e3 v4 j+ m9 q# Z% L1 ]; v6 `6 s2 b
关于安装部署,网上有一些自动化的部署工具,如devstack和onestack,一键式部署。如果你是初学者,并不建议你使用这些工具,很明显,这样 你学不到任何东西,不会有任何收获。如果没有问题可以暂时恭喜你一下,一旦中间环节出现错误信息,你可能一头雾水,根本不知道是哪里错了,加之后期的维护 也是相当困难的。你可能需要花更多的时间去排查故障。因为你根本不了解中间经过了哪些环节,需要做哪些配置!这些工具大多数是为了快速部署开发环境所用, 正真生产环境还需要我们一步一步来操作。这样有问题也可快速定位排查错误。
2 a/ P( b6 b! |1 w7 l" v2 j6 x; }  s  o. f: Y  m
本文仅是针对部署过程中的一些错误信息进行总结梳理,并给予解决办法,这些情况是在我的环境里遇到的,并成功解决的,可能会因为环境的不同而有所差异,仅供参考。
: X3 ]7 r, n5 _1 ^* z+ N' B0 w( j/ }  a& q/ P: n
1、检查服务是否正常
5 O' q4 ?4 h) H6 w' x. S- H# R6 W2 g+ j
root@control:~# nova-manage service list
+ ]. R+ ~$ Q$ K. Z) o! b5 M2 y2 ?" f# ~; |; Y4 B" a
Binary           Host                                 Zone             Status     State Updated_At* e$ l' r: Z8 [0 j1 C) ^* E8 P
2 {0 v0 {/ U- [1 j8 Q
nova-cert        control                              internal         enabled    :-)   2013-04-26 02:29:44% J3 s* }4 b% u7 d9 r
2 x( N: a$ b3 B/ H0 }- i  s2 m) ~
nova-conductor   control                              internal         enabled    :-)   2013-04-26 02:29:42
" K0 h7 F% N5 M9 B5 K
8 y5 {( r# R- f( M2 Gnova-consoleauth control                              internal         enabled    :-)   2013-04-26 02:29:440 ^$ T+ w" x5 K$ [2 _  ]! F

" x3 {9 j; N4 [nova-scheduler   control                              internal         enabled    :-)   2013-04-26 02:29:47# e  c3 D' Q- K) s

0 y' m- d. S: I/ t- `: ?  {nova-compute     node-01                              nova             enabled    :-)   2013-04-26 02:29:46
2 d# O/ z' D4 X8 O7 S: Y: \1 o( ?; z1 }5 c. @6 M2 Q# {
nova-compute     node-02                              nova             enabled    :-)   2013-04-26 02:29:46
* K/ o* [  S! o  f4 H7 O% h, ~5 V/ Y) N- w* ~) ?
nova-compute     node-03                              nova             enabled    :-)   2013-04-26 02:29:42
. I5 k" b& H3 y" r复制代码! x6 ~8 i4 [$ ]1 U4 H
如果看到都是笑脸状态,说明nova的服务属于正常状态,如果出现XXX,请查看该服务的相关日志信息,在/var/log/nova/下查看,通过日志一般可以分析出错误的原因。( k- E  n; q) D* u7 J5 x0 x

+ f* j0 ?$ @* G4 Q8 |! h5 i* B$ B2 v( F! ~2 j
2、libvirt错误
% P9 n1 P- Q- s6 B( Dpython2.7/dist-packages/nova/virt/libvirt/connection.py”, line 338, in _connect; t5 `* L9 J  B1 j2 f2 G; |$ u+ h5 H
2013-03-0917:05:42 TRACE nova return libvirt.openAuth(uri, auth, 0)
- q* d4 }- p2 Y4 u6 ~2013-03-09 17:05:42 TRACE nova File “/usr/lib/python2.7/dist-packages/libvirt.py”, line 102, in openAuth) i( J* z. y, Y3 K
2013-03-09 17:05:42 TRACE nova if ret is None:raise libvirtError(‘virConnectOpenAuth() failed’): K; d$ N2 m" I( {, G
2013-03-09 17:05:42 TRACE nova libvirtError: Failed to connect socket to ‘/var/run/libvirt/libvirt-sock’: No such file or directory
2 d) B' \2 c- D& Q: x/ m5 e3 Q% O2013-03-09 22:05:41.909+0000: 12466: info : libvirt version: 0.9.8  W8 q9 G! c, Y$ ~( v
2013-03-09 22:05:41.909+0000: 12466: error : virNetServerMDNSStart:460 : internal error Failed to create mDNS client: Daemon not running# P& e, G; g4 H, W9 w" S
复制代码; z/ `1 i9 S( C3 @8 K- I
解决方案:
$ ~6 }: ~- B8 I" i6 K% {出现这种错误首先要查看/var/log/libvirt/libvirtd.log日志信息,日志里会显示:libvirt-bin service will not start without dbus installed.
  X2 e- S$ K( J* y我们再查看ps –ea|grep dbus,确认dbus is running,然后执行apt-get install lxc9 N. f1 ~" z& L

: q  o; w4 u( |! D1 K7 q5 `! }# k! a& w
3、Failed to add image6 ^; L! Q3 W) T& p, W
Error:
6 M, [, x4 f, y5 sFailed to add image. Got error:
The request returned 500 Internal Server Error
+ Y9 O2 ^* _9 N$ Q  k3 z  c复制代码. X, |5 ?" I8 p
' m* j2 Y- i3 u( W$ A

1 c" k6 K) R/ e  w7 P& g解决方案:
! P4 K2 ~' K! v# D! q) j环境变量问题,配置环境变量,在/etc/profile文件中新增:) T  n3 |  W# Y! F3 [
) w8 e! E5 E' Q; r
9 ~3 v  U3 y$ t3 \7 Z4 e7 {# D
OS_AUTH_KEY=”openstack” ) _, Z# P% a7 I  x, F3 S' c5 P( ?
OS_AUTH_URL=”http://localhost:5000/v2.0/”5 ^' \$ E, n6 @
OS_PASSWORD=”openstack”
( {1 p; Y9 o, a- ^+ Y+ GOS_TENANT_NAME=”admin”
; d5 V- `* Q6 i6 A3 R6 zOS_USERNAME=”admin”& V* }4 ?* ~+ x" J+ ]
复制代码! Y! r& @6 |* n; U
然后执行source  /etc/profile即可!当然你也可以不在profile里配置环境变量,但是只能临时生效,重启服务器就很麻烦,所以建议你还是写在profile里,这样会省很多麻烦。5 }) L+ x7 N/ p. x2 d. q
( L7 H; s' p8 _9 U/ P. R1 I8 p

6 [& y" z" C% i# T0 W4 w" _+ j4、僵尸实例的产生
; ?; ?1 ~, @3 @  T僵尸实例一般是非法的关闭nova或者底层虚拟机,又或者在实例错误时删除不了的错误,注意用virsh list检查底层虚拟机是否还在运行,有的话停掉,然后直接进入数据库删除。9 n$ G0 @! ^% t+ c
Nova instance not found% |- @4 l/ J( ?. F/ {9 @
! O  F' _; M/ |1 D  s: D
Local file storage of the image files.6 S8 t9 L- c7 t% z
+ Y2 T# {  o# }7 k; r3 \) \* x
Error:
9 a+ [6 T! m- N* ?7 P2013-03-09 17:58:08 TRACE nova raise exception.InstanceNotFound(instance_id=instance_name)
0 x, \; O" G1 L2013-03-09 17:58:08 TRACE nova InstanceNotFound: Instance instance-00000002 could not be found.
0 R) p) D: _! M; e- K2013-03-09 17:58:08 TRACE nova
- _1 T4 H4 e2 R- k, Y! k复制代码
' ]* ]0 R. G1 d+ L! X' H解决方案:
% @) l8 s. ~. U删除数据库中的僵尸实例或将数据库删除重新创建:% z3 Z4 t0 B: g
a、删除数据库:
; @  a9 }- y4 H, _5 x3 V* f$mysql –u root –p
( T: x: G- K3 \* P# U) JDROP DATABASE nova;9 }. |5 x$ `5 i* ]8 E& O

9 T. w' F6 D* f/ S- |5 L4 T% b3 t/ {Recreate the DB:. ?/ J& e% }- C
CREATE DATABASE nova; (strip formatting if you copy and paste any of this)
/ Z( ~# C$ }5 W" SGRANT ALL PRIVILEGES ON nova.* TO ‘novadbadmin’@'%’ IDENTIFIED BY ‘<password>’;# Y: U0 w3 A" Z, w- v8 `9 U
Quit9 c1 J! E# F% F
. l0 y  m# o6 P: g% I" d9 X7 B4 o9 ~
Resync DB
8 C4 ^2 h) \! J$ s/ \复制代码6 M8 m- j: ]# v- d0 F, z6 }
b、删除数据库中的实例:
6 `3 G# A5 @: {" V- _#!/bin/bash, b0 c% v- l6 L8 Y3 i, {6 y

4 \( a+ \/ n; j& ], I9 y. U+ omysql -uroot -pmysql << _ESXU_. q6 K; Y* g2 G( O$ M

/ R$ u$ M$ G* P! k5 [0 o; \8 U# xuse nova;
( D2 ^/ u' e' b8 g' ]# c8 W+ v9 g& P
DELETE a FROM nova.security_group_instance_association ) T5 ]1 p2 v% W, z. k3 \  F

3 E- M: I- o2 b( Q/ `" AAS a INNER JOIN nova.instances AS b
  Y7 A: D) e8 j' U  f" J
5 T" ]& j; F% f' I* f, aON a.instance_uuid=b.id where b.uuid='$1';
$ ~% p0 d1 {. a% u
/ H& d# X& w7 h7 {$ R1 Q1 H  fDELETE FROM nova.instance_info_caches WHERE instance_uuid='$1';1 N# ^& \$ p6 w9 W. k$ T( O7 q

5 I, h0 S( A* o5 m# S& WDELETE FROM nova.instances WHERE uuid='$1';
4 k1 L5 f' F9 i, _0 E1 D/ V9 Q* V% s# H8 W. j- E) ]2 a* D  [
_ESXU_
4 _! d- e3 W2 j1 [6 O复制代码
+ ]6 j% D: ~! _+ G( e! M0 T将以上文件写入delete_insrance.sh中,然后执行sh delete_instrance.sh insrance_id;
, c! l& F: c7 U1 m; q6 E' q1 ?" a其中instrance_id可以通过nova list 查看。3 G( h, a# _) K5 ]

/ K8 l1 v. g1 v) K6 A5 D  c" S: t) r6 b) w. @* z# I1 d- Z. P
5、Keystone NoHandlers
' ]% G  E& O$ }) M7 K
- \8 h5 h5 S" _Error  
0 F- T/ v1 |5 @. h$ troot@openstack-dev-r910:/home/brent/openstack# ./keystone_data.sh  
; i! e! {2 H) ~! `4 oNo handlers could be found for logger “keystoneclient.client”  8 S  ?5 e9 l$ x$ j" m
Unable to authorize user  : Z; Y3 I0 n3 Q/ e. |' s; J6 {
No handlers could be found for logger “keystoneclient.client”  
1 ]/ E" i9 L+ i+ \! c9 EUnable to authorize user  ! D" B0 \# j. k" b
No handlers could be found for logger “keystoneclient.client”  
  w4 Y; ?* g( D$ l  Y. h* m4 V% hUnable to authorize user  ! O4 J8 c: y1 m
复制代码
' l" q# e2 D) J1 a9 G / \7 Q9 U1 @1 V/ s  I( C' L, ~2 h

6 o% k* W. E) X: Y% }解决方案:
, ~; v/ z+ d8 z8 m3 M$ f& C# V& U: g6 |出现这种错误是大多数是由于keystone_data.sh有误,其中- @& O% d% k: r& M. W
admin_token必须与/etc/keystone/keystone.conf中相同。然后确认keystone.conf中有如下配置:
  w) W, V) F0 a5 Ydriver = keystone.catalog.backends.templated.TemplatedCatalog template_file = /etc/keystone/default_catalog.templates
0 [- j( C: T; P$ q: U; i
4 e. Q1 a8 U- H& o! C% Y9 I( h) ~' e2 z- n- y1 ?, {; M
6、nova-compute挂掉与时间同步的关系* _& J1 P0 {3 n0 o, p
很多时候发现nova-compute挂掉,或者不正常了,通过nova-manage查看状态是XXX了。
! {1 v' _2 o6 q) h往往是nova-compute的主机时间和controller的主机时间不一致。 nova-compute是定时地往数据库中services这个表update时间的,这个时间是nova-compute的主机时间。; z3 n9 ?- F7 H9 j7 A0 j
controller校验nova-compute的存活性是以controller的时间减去nova-compute的update时间,如果大于多少秒(具体数值代码里面有,好像是15秒)就判断nova-compute异常。
( I, D$ @" A( S4 _7 o这 个时候你用nova-manage查看nova-compute状态是XXX,如果创建虚拟机,查看nova-scheduler.log 就是提示找不到有效的host 其他服务节点类同,这是nova心跳机制问题。所以讲nova环境中各节点时间同步很重要。一定要确保时间同步!!
9 z( s, `9 |' ^& ]如果在dashboard上看nova-compute状态,可能一会儿变红,一会儿变绿。那就严格同步时间,或者找到代码,把上面的那个15秒改大一点。
. Z# J3 l, ]: M# J! E& ~8 Z
! S0 g- `& r+ x
" R% H3 v! D) u& D7、noVNC不能连接到实例
3 k) x! J3 W, C9 qnovnc的问题比较多,网上也有关于这方面的很多配置介绍,其实配置不复杂,只有四个参数,配置正确基本上没什么大问题,但是装的过程中还是遇到了不少的问题。
# x8 w% t8 k$ G- T, Ca、提示“Connection Refuesd”
2 v; a/ i. Q( Q可能是控制节点在收到vnc请求的时候,无法解析计算节点的主机名,从而无法和计算节点上的实例建立连接。6 A, m4 m1 F' T$ u8 L4 g0 M$ [
另外可能是,当前浏览器不支持或者不能访问,将计算节点的ip和主机名的对应关系加入到控制节点的/etc/hosts文件中。
* \- k% z. \* K( u, p$ xb、提示“failed connect to server”0 A) h7 ]1 n* h) l  E5 _
出 现这种错误的情况比较多,有可能是配置文件的错误,我们的环境中遇到这个错误是因为网络源有更新,导致安装版本不一致,使组件无法正常使用,解决方法就是 使用本地源。另外需要特别说明的是使用novnc的功能需要浏览器支持Web Socket和HTML5.推荐使用谷歌。
# L* A8 ?8 w% X0 E' d, X( \# I
; L* ^7 M6 Y- R" I9 X: W5 O
) Z* J# p/ t: W1 }6 P/ _& {8、Unable to attach cinder volume to VM  ]+ d9 Z" R6 k( G
     在测试openstack中的volume服务时把lvm挂载到虚拟机实例时失败,这其实不是cinder的错误,是iscsi挂载的问题。
* w8 z0 n( G6 o4 m. l! p以下是计算节点nova-compute.log 的错误日志:
4 I' {9 k$ @8 {: j2012-07-24 14:33:08 TRACE nova.rpc.amqp ProcessExecutionError: Unexpected error while running command.6 r. B6 K; j* ]' _- |
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/ j5 w. c, j8 J, e" |' o3 p0 e
2012-07-24 14:33:08 TRACE nova.rpc.amqp Exit code: 255
0 @; k' h7 l- q& q6 m1 \2 H2012-07-24 14:33:08 TRACE nova.rpc.amqp Stdout: ”7 N! F* P' p1 N' b; m
2012-07-24 14:33:08 TRACE nova.rpc.amqp Stderr: ‘iscsiadm: No portal found.\n’; a( y2 y( t. q8 W* E
复制代码. g* m5 J. I9 G* U1 E
以上错误是没有找到iscsi服务端共享出的存储,查找了很多openstack 资料说要添加以下两个参数:% @/ W: j  G+ K1 X3 @
iscsi_ip_prefix=192.168.80 #openstack环境内网段
1 w  w1 ]' }& I# q4 Ziscsi_ip_address=192.168.80.22 # volume机器内网IP' z/ \# h! k2 A$ C
可是问题依然无法解决,后来发现只要在nova.conf配置文件中添加参数iscsi_helper=tgtadm 就挂载失败。
) M# z) o/ j# O7 L$ I. [7 Q5 K2 K根据这个情况进行了测试查看日志才发现:如果使用参数 :iscsi_helper=tgtadm 时就必须使用 tgt 服务,反之使用iscsitarget服务再添加参数iscsi_helper=ietadm。
) {( y3 W& U% G1 y! ]; I我 测试环境的问题是tgt和iscsitarget服务都已安装并运行着(在安装nova-common时会把tgt服务也安装上,这个不小心还真不会发 现),在nova.conf配置中添加参数iscsi_helper=tgtadm ,查看端口3260 发现是iscsitarget服务占用,所以导致挂载失败,我们可以根据情况来使用哪个共享存储服务!!将tgt 和iscsi_helper=tgtadm、iscsitarget和iscsi_helper=ietadm保留一个即可。( i$ r, N: N: z: S3 l6 A

2 T' e4 K9 o2 M7 r: ~; n5 B7 j' Y4 A: k8 m6 x
9、glance index报错:
& z" F8 F' r. g( Q% ?. [2 Y) i% HAuthorization 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)
; u: f* g# S' _1 a4 r; W, T. t+ k复制代码
# p9 O  ^  R8 f% I在 Grizzly 版,我测试 glance index 时候报错:  J0 c: \# T8 c. a' O/ s
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)
4 u( y* o, j+ e# U/ m# i2 e! W
; M! [5 Z; ]# u3 `& V错误信息指出:glance 没有通过keystone验证,查看了 keystone 日志,报错如下:# I' O; N2 |5 ^9 i" ^! G
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 39 N9 H/ Z' K) ?% s7 R

1 _4 Y3 o3 ~5 A2 H/ p/ Y在Grizzly 版中,keystone 默认验证方式是 PKI , 需要签名证书,之前的版本都是用的 UUID,改 keystone.conf:7 W( N/ I6 D# S* T/ E
token_format = UUID
8 y* {1 J/ v8 `0 W0 K2 f
6 o2 C# [" d) L9 `在试一次就没有错误了。# |! q8 m' l+ H$ p  h5 ~( L1 j
0 q- m' ^) |- M- q  z3 j& M0 B
1 }8 t; X0 u6 N  x. y' q
10、镜像制作8 K) v$ D% y, f) ]7 |  R7 }( i. D
这里主要强调下windows的镜像制作,因为windows的涉及到加载驱动的问题,就比较麻烦。0 Z' k; y7 e8 S5 T( ], }' a0 }; K, e
下载virtio 驱动,因为win默认不支持virtio驱动,而通过openstack管理虚拟机是需要virtio驱动的。需要两个virtio驱动,一个是硬盘的, 一个是网卡的,即:virtio-win-0.1-30.iso和virtio-win-1.1.16.vfd。这里主要强调两个地方:; ]5 b9 Y( x8 d% ~" y5 ?9 v
1、创建镜像:/ N9 E: P# _+ R+ u: ?! ?; c
kvm -m 512 -boot d –drive  
. ~8 q/ ^, Z  n5 i3 h  
) `$ l1 y% M# V4 G) t" iile=win2003server.img,cache=writeback,if=virtio,boot=on -fda virtio-win-1.1.16.vfd -cdrom w
5 X8 Z$ R7 r' D, v8 X, ^+ y复制代码
: ?  s! k" h' u4 C8 N2 I0 K, |" L( ~: e
$ ?  H7 i/ Y7 z. }0 d, z9 b

; M- ^# n2 X$ V5 g% J$ D5 K4 D3 E; p
6 M5 a+ [( C$ X4 M. v2、引导系统 :
0 M3 n& B4 B' p1 ?9 V, Okvm -m 1024 –drive file=win2003server.img,if=virtio,
6 A! U9 a) d) @1 `* y7 R6 {3 N' R  m
boot=on -cdrom virtio-win-0.1-30.iso -net nic,model=virtio -net user -boot c -nographic -vnc 85 \/ K& K, v' D# T
复制代码
  b. k# c# Y$ D- ^$ M4 c4 `0 F6 b这 里需要注意的地方是if=virtio,boot=on –fda virtio-win-1.1.16.vfd和引导系统时使用的virtio-win-0.1-30.iso 这两个驱动分别是硬盘和网卡驱动。如果不加载这两个驱动安装时会发现找不到硬盘,并且用制作好的镜像生成实例也会发现网卡找不到驱动,所以在这里安装镜像 生成后需要重新引导镜像安装更新网卡驱动为virtio。
  {" i% s8 t. b6 b
3 w4 H6 w/ ~8 l$ q& U11、删除僵尸volume
0 N" M/ B7 m) I) S( v
/ b5 z4 d  v/ ~. i4 V4 S! A
; ]8 H2 W' V4 m& B: q! h如果cinder服务不正常,我们在创建volume时会产生一些僵尸 volume,如果在horizon中无法删除的话,我们需要到服务器上去手动删除,命令:lvremove /dev/nova-volumes/volume-000002注意这里一定要写完整的路径,不然无法删除,如果删除提示:“Can't remove open logical volume“ 可尝试将相关服务stop掉,再尝试删除。删除完还需到数据库cinder的volumes表里清除相关记录。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 02:44 , Processed in 0.020282 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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