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

openstack常见错误

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2018-9-2 15:02:15 | 显示全部楼层 |阅读模式
以下主要为安装部署过程中遇到的一些问题,因为openstack版本问题,带来的组件差异导致不同的版本安装的方法也完全不一样。经过测试,目前已可成功部署Essex和Grizzly两个版本,其中间还有个版本是Folsom,这个版本没有部署成功,也没有花太多时间去研究,因为Folsom版本中使用的quantum组件还不成熟,对于网络连通性还有很多问题,网上也很少有成功的案例,大多数人使用的还是folsom+nova-network模式。
6 E8 A; V/ D: X6 f& j  ~
' H6 d" ]. ~# L! H( F8 p! @到了Grizzly版本,quantum组件才比较稳定,可以正常使用,自己也花了很多时间研究,现在已可以成功部署多节点环境。以下是部署过程中遇到的一些问题,包括Essex和Grizzly两个版本。国内网上关于这方面的资料很少,很多资料也都是国外网站上看到的。而且很多情况下日志错误信息相同,但导致错误的原因却不尽相同,这时候就需要仔细分析其中的原理,才能准确定位。遇到错误并不可怕,我们可以通过对错误的排查加深对系统的理解,这样也是好事。
2 e" l8 Z3 t1 B+ ]" G9 e
% K& W2 O1 O6 ]5 f" _! \关于安装部署,网上有一些自动化的部署工具,如devstack和onestack,一键式部署。如果你是初学者,并不建议你使用这些工具,很明显,这样你学不到任何东西,不会有任何收获。如果没有问题可以暂时恭喜你一下,一旦中间环节出现错误信息,你可能一头雾水,根本不知道是哪里错了,加之后期的维护也是相当困难的。你可能需要花更多的时间去排查故障。因为你根本不了解中间经过了哪些环节,需要做哪些配置!这些工具大多数是为了快速部署开发环境所用,正真生产环境还需要我们一步一步来操作。这样有问题也可快速定位排查错误。
  z$ _, y& H! J3 Y0 g
; y* c! c7 u6 ]; k本文仅是针对部署过程中的一些错误信息进行总结梳理,并给予解决办法,这些情况是在我的环境里遇到的,并成功解决的,可能会因为环境的不同而有所差异,仅供参考。7 ^' E* @' U% n8 }- O7 J4 G

& p8 l# ?4 i, ?& U1、检查服务是否正常:5 b; }, M6 H9 F: ]  k
- E' R: w- c0 \# ^3 S
root@control:~# nova-manage service list
" A; B+ U+ Q3 v7 x8 g
/ D8 v: d9 N- P) S! V' n+ lBinary           Host                                 Zone             Status     State Updated_At' [- N. u0 F6 v- d
! c, g' t1 M# E1 b
nova-cert        control                              internal         enabled    :-)   2013-04-26 02:29:44) R. E  o1 p- `
6 w$ M. u/ w! D) l- x
nova-conductor   control                              internal         enabled    :-)   2013-04-26 02:29:426 H/ h- R1 i. n1 V

) c+ n1 @6 h* j* Q* w/ l9 bnova-consoleauth control                              internal         enabled    :-)   2013-04-26 02:29:445 S6 _9 ?: e% [) j

! `; f3 i; d: ~) ?) Unova-scheduler   control                              internal         enabled    :-)   2013-04-26 02:29:47
7 I" |+ M9 a3 r2 y" C. Y, H
3 B. d' e4 }9 d( [nova-compute     node-01                              nova             enabled    :-)   2013-04-26 02:29:465 f  l4 c" y: P9 L9 c6 V

7 i) w9 u# L1 J6 h6 o7 B7 o7 znova-compute     node-02                              nova             enabled    :-)   2013-04-26 02:29:46
8 D# W- l( U7 I( o( V9 n, N ) @+ `- o# a! E- `1 t
nova-compute     node-03                              nova             enabled    :-)   2013-04-26 02:29:42  R. T5 }$ W1 r6 ^9 o4 r
* r5 u1 i* Y; d5 ]' M) a

0 k9 h) m+ E4 A* ]  w如果看到都是笑脸状态,说明nova的服务属于正常状态,如果出现XXX,请查看该服务的相关日志信息,在/var/log/nova/下查看,通过日志一般可以分析出错误的原因。
% U+ x/ N  n) z$ m: I- K2 q. M0 [- E" X0 E" \
2、libvirt错误4 J# W7 x8 M2 l' i
; S+ t6 F$ r. @% p, ?! k6 v

4 A/ d" {* n: Z/ l) b' ^. x: n, W. G" L  g1 E8 V$ W7 h
python2.7/dist-packages/nova/virt/libvirt/connection.py”, line 338, in _connect
' H, b% M& s6 e, {. F7 X" s2013-03-0917:05:42 TRACE nova return libvirt.openAuth(uri, auth, 0)4 B( p, k. J5 ], ~" t! V$ Q- a
2013-03-09 17:05:42 TRACE nova File “/usr/lib/python2.7/dist-packages/libvirt.py”, line 102, in openAuth
3 G& }0 ?- S, \* t9 O0 o* ~, e3 S7 P- f/ G2013-03-09 17:05:42 TRACE nova if ret is None:raise libvirtError(‘virConnectOpenAuth() failed’)
4 S1 e! p; G( W( C  j2013-03-09 17:05:42 TRACE nova libvirtError: Failed to connect socket to ‘/var/run/libvirt/libvirt-sock’: No such file or directory
" h* ]2 Z/ \* n1 n2013-03-09 22:05:41.909+0000: 12466: info : libvirt version: 0.9.8* q7 o3 Y% S/ Q9 b$ K7 `  F
2013-03-09 22:05:41.909+0000: 12466: error : virNetServerMDNSStart:460 : internal error Failed to create mDNS client: Daemon not running* \  d$ X7 t2 B

* |3 _# x2 h* m5 W! |
' k5 W0 }2 c4 `8 n+ Q解决方案:, h+ |6 h) g7 k8 Z. V  W# D+ P( }
6 [3 X" F, _/ U% |2 [# _2 c. w
出现这种错误首先要查看/var/log/libvirt/libvirtd.log日志信息,日志里会显示:libvirt-bin service will not start without dbus installed.
- g6 z+ J$ Q  r  U1 C) H, H2 F) B, `4 B0 n3 M
我们再查看ps –ea|grep dbus,确认dbus is running,然后执行apt-get install lxc
& w4 v  l7 I" n4 Y: B. A/ T3 i, d( n7 d5 }7 B1 p7 f2 O
3、Failed to add image: m. i6 u+ M( E5 P  g& ^

9 C% L1 {! r) H1 d7 l  Z" DError:. p  A7 z3 B) M* a/ A; Z2 a
Failed to add image. Got error:
The request returned 500 Internal Server Error1 M/ V4 A8 H$ M* p4 |9 f

& G+ ~! x4 N% N! e
: e1 V; x% }3 A& W$ W解决方案:
1 u/ X, F$ q4 s: Z# E6 C" R( A! A9 o6 Q# n
环境变量问题,配置环境变量,在/etc/profile文件中新增:* F! |' S0 w9 E: v* e* B9 ]

1 V" \4 k) }- m0 m. l3 \OS_AUTH_KEY=”openstack” $ _6 H+ ]$ \0 h2 N$ e; X' x& {" v
OS_AUTH_URL=”http://localhost:5000/v2.0/”% ~$ r7 e( b1 [; M( z
OS_PASSWORD=”openstack”
+ A% d  N+ a9 e8 F3 ?OS_TENANT_NAME=”admin” 5 y& \+ \5 r2 O
OS_USERNAME=”admin”
! d) Y# j$ z* w6 `7 ] 4 n5 o4 V( f# T7 \5 Z5 I* I

# ?% m) v# h; O然后执行source  /etc/profile即可!当然你也可以不在profile里配置环境变量,但是只能临时生效,重启服务器就很麻烦,所以建议你还是写在profile里,这样会省很多麻烦。
8 X- o  A4 L; t. }
: @$ @+ Y8 P' ~7 W5 U4、僵尸实例的产生& W/ U3 g. {- ?. d: d

+ v2 E6 c8 _8 ~" F2 T6 b9 V% _僵尸实例一般是非法的关闭nova或者底层虚拟机,又或者在实例错误时删除不了的错误,注意用virsh list检查底层虚拟机是否还在运行,有的话停掉,然后直接进入数据库删除。
3 S, d/ a$ P) K& {0 A& h/ \* f/ P( E+ Y
Nova instance not found
- Q2 a- m* N3 ^; N  q' B
7 `1 y! E' I: ]) XLocal file storage of the image files.0 w, p, ^  Y1 c! @  I1 ]4 V

8 G' x6 z( L0 T8 X# @6 g8 qError:4 B4 A/ F; Z' j! w
2013-03-09 17:58:08 TRACE nova raise exception.InstanceNotFound(instance_id=instance_name)
0 r" e! x# k+ E  H2013-03-09 17:58:08 TRACE nova InstanceNotFound: Instance instance-00000002 could not be found.7 M3 Q2 T5 N' Y
2013-03-09 17:58:08 TRACE nova
5 x! [4 U) a$ s$ s0 j& B6 c( | 2 }( A1 R# t6 I. z. E

$ N/ y5 I3 [! `
/ l6 c' ^; v, V; n2 [# G/ O! m6 A5 X& o- y! D
解决方案:
: V! o  u  ]* I2 Z$ N
4 B' d) u; E) c3 {* C删除数据库中的僵尸实例或将数据库删除重新创建:
6 B8 g5 E7 W; w1 Q3 k8 l2 r2 |. e! N2 u
a、删除数据库:6 {( E) J/ \. Z3 }% X# g+ Y
; c: t7 r- x' \8 Y6 i2 S
$mysql –u root –p
) V6 r" u1 F5 {) k/ LDROP DATABASE nova;
, I8 G3 P, \& ~  m# K) T: ]
- I. K0 y! T+ C5 }% k. iRecreate the DB:% P7 e. A8 N8 J4 |: B# Q! P5 |
CREATE DATABASE nova; (strip formatting if you copy and paste any of this)- ]" \7 i, d% @# d: x+ U
GRANT ALL PRIVILEGES ON nova.* TO ‘novadbadmin’@'%’ IDENTIFIED BY ‘<password>’;* a$ M2 y0 T1 }' q8 B3 ^' N& @
Quit, L9 \' C5 p3 R: M
; T+ W# f( O9 [5 G( x
Resync DB0 S8 G7 Y! h% ]9 q' T
5 h& y2 i+ n* ~7 k

% ^4 d8 |2 m7 S/ ob、删除数据库中的实例:
  f7 e! b* b3 Z" c" `& r" A$ Y- R6 w( p& |3 v; @
#!/bin/bash. h* V' h6 M, {2 i4 z

, I* p3 u+ L4 h7 Y& w8 k/ mmysql -uroot -pmysql << _ESXU_
4 e9 c: t0 r$ S$ G " w6 l- H, K, _2 |8 h
use nova;
& ^0 h3 ]$ _6 N( a
# G0 [! m' a3 ~: jDELETE a FROM nova.security_group_instance_association 0 S% o* m/ u5 Y& e4 \! B# Q
# h( n: O1 W4 d- J3 Y
AS a INNER JOIN nova.instances AS b
* L% b4 }& G) o$ T
/ p0 `) X" @+ u1 {% fON a.instance_uuid=b.id where b.uuid='$1';5 r/ E; N% J: O9 O/ Q

* E0 y$ b: C1 x1 WDELETE FROM nova.instance_info_caches WHERE instance_uuid='$1';% v" r& ?# i2 Q* `! p% {

  E* b& ?0 Q& ?7 P7 \* `7 A# nDELETE FROM nova.instances WHERE uuid='$1';
5 t* U, w4 _% [: r# w. X
+ C! c0 B. Y  n) d_ESXU_2 p0 T. P+ B; ^+ ~0 I1 g( l- r1 `
+ T2 B$ c2 c+ u( l- ^' x$ N. t

( R3 I4 b' d- A$ {0 m将以上文件写入delete_insrance.sh中,然后执行sh delete_instrance.sh insrance_id;. V6 ~. W. J% E' D, c6 _5 E' w

; d8 T( y2 _1 T  `5 B其中instrance_id可以通过nova list 查看。; {/ `3 d1 m0 d" T% D  k
8 v' Z3 b5 r* z
5、Keystone NoHandlers
4 I/ Y: d/ u$ }# b/ w  k
% A( ?# v2 g! }3 q3 OError- j7 P/ a% u8 T! O; d/ f- `$ Q; b8 I
root@openstack-dev-r910:/home/brent/openstack# ./keystone_data.sh' O1 y$ |! x3 Z- ^4 ~3 m( h5 c
No handlers could be found for logger “keystoneclient.client”  r' g7 w+ ?8 j- f  x
Unable to authorize user  n8 o1 W/ c9 K% r' r
No handlers could be found for logger “keystoneclient.client”3 m# I! [0 Z5 m
Unable to authorize user: r$ \$ t* h8 b8 X+ L: Q! J. A
No handlers could be found for logger “keystoneclient.client”
' T9 U$ _0 D1 ?# n+ d' l3 Y1 hUnable to authorize user
/ D. s2 v: t& m3 p, w' c& ~ ; k6 b* s' s2 E5 Q. {2 d) C

4 P' y. z9 n8 Y( G& x解决方案:
4 w9 ?6 @% u6 v8 |$ e4 z: f' C, x/ k" _/ B! @
出现这种错误是大多数是由于keystone_data.sh有误,其中8 c& a; D; Y* }, X, t

0 g2 k4 E3 E: w; W3 tadmin_token必须与/etc/keystone/keystone.conf中相同。然后确认keystone.conf中有如下配置:' V( Y; a1 W3 Z* l% Q4 ]  r

* `( j! C0 z, [. {+ [driver = keystone.catalog.backends.templated.TemplatedCatalog template_file = /etc/keystone/default_catalog.templates8 K8 j) l8 v8 N  ?% k, p. p
+ A1 n2 |( Z& B2 G% k5 z
6、清空系统组件,重新安装:
! I! ?; V. H) l3 E0 u7 k' v: h4 p6 Q6 e! x- R6 `8 Z  U0 x) u
#!/bin/bash
  A9 K7 r, p5 }: `mysql -uroot -popenstack -e “drop database nova;”
. Y% X! c( [+ U" `0 n& hmysql -uroot -popenstack -e “drop database glance;”7 e. C% ^6 x+ N5 B
mysql -uroot -popenstack -e “drop database keystone;”
8 q# Q% B: D. b1 S1 \apt-get purge nova-api nova-cert nova-common nova-compute6 D) `. L# u( R
nova-compute-kvm nova-doc nova-network nova-objectstore
. r6 _: w: o( O1 v$ \1 x8 z; e0 \# E6 {nova-scheduler nova-vncproxy nova-volume python-nova python-novaclient
$ b7 V3 x4 }& F( }* A. Kapt-get autoremove' p9 b3 b, W1 I9 ?
rm -rf /var/lib/glance) N& D9 _  g7 M& }) k# t
rm -rf /var/lib/keystone/' i  H; L. B- k2 n2 N# Q+ [( H+ u
rm -rf /var/lib/nova/5 E  F/ T, K/ W7 u, l( w: y
rm -rf /var/lib/mysql
' S) [) v1 |) e) x , A7 v/ o1 x2 v4 u9 f" U& r

8 G* K5 |1 X6 F- l% r# A. p1 ?1 {$ i可通过执行上面的脚本,卸载已安装的组件并清空数据库。这样可以省去重装系统的麻烦!5 n& G$ Z' a' U' _8 u6 b

& E' [* a" B3 H7 s7、Access denied for user ‘keystone@localhost(using password:YES’)! }+ B7 z7 F! K' E, F: n9 o5 F

! V5 e. Y' q1 F& }. G5 m: e; M4 L# keystone-manage db_sync" s/ h. R1 a$ R: \6 z
: K' U9 l/ i' H2 j6 w1 w
File “/usr/lib/python2.7/dist-packages/MySQLdb/connections.py”, line 187, in __init__
* n3 H6 V. D; O
1 }  |0 i2 E  `* @% Ssuper(Connection, self).__init__(*args, **kwargs2)
2 Z, p2 J, k* _! F$ ]6 |; zsqlalchemy.exc.OperationalError: (OperationalError) (1045, “Access denied for user ‘keystone’@'openstack1′ (using password: YES)”) None None( Q& T$ r$ p& t, s, V! Z$ w/ M: D

7 [% r( u; ?+ }* }4 h' {) W+ {8 C
; E' {/ g# o4 N- M  x1 I解决方案:) D8 w9 m. G* _6 V' z. A- D
7 r" O% {0 T. R4 o
查看keystone.conf配置文件链接数据库是否有误,正确如下:4 V! f8 m8 Z) W+ ]7 l( u
/ v' Q4 _1 z4 e) P0 B2 P$ r! K
[sql]: l' X, ?8 k- E- O! O; I
% C: c$ ?( `. [: C& Y& ~* d0 ~) P
connection = mysql://keystone:openstack@localhost:3306/keystone# H3 @8 Q; `; v; K3 \

, O5 u0 e6 c% x+ }  l; r, N
: A4 u0 y1 E1 C  J/ e, B% q8、nova-compute挂掉与时间同步的关系
9 _4 Q& d# m' E2 y
: s4 W( A' d6 o" R# R很多时候发现nova-compute挂掉,或者不正常了,通过nova-manage查看状态是XXX了。/ s, y% Z0 O& u# `4 {9 f

3 O$ j7 ?5 ^) t8 G往往是nova-compute的主机时间和controller的主机时间不一致。 nova-compute是定时地往数据库中services这个表update时间的,这个时间是nova-compute的主机时间。
, r0 R; a" \* K1 }* _& q. _% F* {
controller校验nova-compute的存活性是以controller的时间减去nova-compute的update时间,如果大于多少秒(具体数值代码里面有,好像是15秒)就判断nova-compute异常。/ ~/ c  j+ U9 k% h  G; Z/ n
5 k- K  k% K- a: \* g
这个时候你用nova-manage查看nova-compute状态是XXX,如果创建虚拟机,查看nova-scheduler.log 就是提示找不到有效的host 其他服务节点类同,这是nova心跳机制问题。所以讲nova环境中各节点时间同步很重要。一定要确保时间同步!!
8 l# E7 h6 p. `+ L5 m' ~: d* E; _" O
如果在dashboard上看nova-compute状态,可能一会儿变红,一会儿变绿。那就严格同步时间,或者找到代码,把上面的那个15秒改大一点。: ?8 {/ p; c% U" \
7 W6 B6 x- M% ?6 e" b1 L
9、noVNC不能连接到实例& V1 \8 n6 H! x( V
. ~# P5 c. [. ~5 t8 C  {/ h& o
novnc的问题比较多,网上也有关于这方面的很多配置介绍,其实配置不复杂,只有四个参数,配置正确基本上没什么大问题,但是装的过程中还是遇到了不少的问题。
( T; F5 K) u9 n. N$ l0 f9 H1 q* L, R* s
a、提示“Connection Refuesd”4 o- Z6 S+ Z2 v1 n$ e9 Q' g- x

! c1 a: W9 K" {3 ~, g6 r( B4 R可能是控制节点在收到vnc请求的时候,无法解析计算节点的主机名,从而无法和计算节点上的实例建立连接。" p# ?/ c0 x2 w/ E' _
/ o; A, j  R  a, g" a/ C
另外可能是,当前浏览器不支持或者不能访问,将计算节点的ip和主机名的对应关系加入到控制节点的/etc/hosts文件中。
7 D2 \8 `) G/ N7 f
: k. j/ x, j2 `/ n: w. o) v" Bb、提示“failed connect to server”
2 I4 d8 h+ F+ N! O9 M+ B! |1 a  h6 V3 g3 |$ X" R# |5 {# `
出现这种错误的情况比较多,有可能是配置文件的错误,我们的环境中遇到这个错误是因为网络源有更新,导致安装版本不一致,使组件无法正常使用,解决方法就是使用本地源。另外需要特别说明的是使用novnc的功能需要浏览器支持Web Socket和HTML5.推荐使用谷歌。  o  B# |2 u7 P9 q  F
" j, j2 ?" V# t% p  H# K
10、cinder错误,无法登录dashboard.; a) k  c5 q: M6 R
) D1 f! b( t* T8 O( H3 e  Y
出现如下错误:+ q& i. d4 ~( ?( h

$ q1 u$ e, v3 x2 t5 q   
6 W+ F6 |6 i: E; r3 y, J& j- JTypeError at /admin/ 5 ~* ?1 k- R, B" m4 y1 b: R$ ?: `
hasattr(): attribute name must be string$ u* _- r! f; Q' T6 F; x
0 _1 e* t$ a7 q) j, k; B
Request Method:   GET: s. v4 H2 k+ w! e$ q9 z- Q+ S1 w
$ m3 ?* \3 d9 K% e$ n( n
Request URL: http://192.168.80.21/horizon/admin/* H: E( F+ I- K

' j3 I/ d- o  O* V" l* M2 d6 }Django Version:   1.4.5, `* \% T) B  i" Y# c8 x# S7 g

' I" z0 l4 S: V% E0 }" xException Type:   TypeError
! U. p' @$ W; k$ G 1 i# t9 r+ k6 m5 L
Exception Value: ; L. s+ \+ N( X4 w# C% c: [1 a
; E' p5 M" a" p8 R5 g
hasattr(): attribute name must be string# M& n9 ^& M/ h2 e8 C: t; K. P

- U% V% c5 |5 u+ DException Location: /usr/lib/python2.7/dist-packages/cinderclient/client.py in __init__, line 78
, I2 t% i6 i8 C6 S8 |
' i' P7 {, U* i) R  I6 aPython Executable:   /usr/bin/python
/ J6 F* ]) ^* F4 ^9 ?: z
3 c, E( q7 l) P( D7 o2 WPython Version:   2.7.34 b  n. }0 A+ E1 A1 r0 [& j
$ S. h; z6 r+ s. n) k& ?
Python Path: 2 P* ]; y' Y4 \" M- p- F9 M
$ T% H* c1 v& f( r- f
['/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../..',8 b# u! ~/ l) G" k9 J

  C5 J7 J4 G; m+ Q9 K '/usr/lib/python2.7',! q, f) J1 Q$ @8 U0 v

; K  Y) W( x" G5 Z! H; Y/ P, { '/usr/lib/python2.7/plat-linux2',+ h2 S& {# ]4 j( X# v2 |+ r2 Q, h
# I5 z: f! s4 P* n
'/usr/lib/python2.7/lib-tk',$ `8 N$ p0 R2 v3 h
$ }! q) a, L  i2 j' W7 Q  k" s9 |
'/usr/lib/python2.7/lib-old',
/ M* q; v. L! N0 R! x
& [9 Y- t& B8 D7 G$ L1 |' Q '/usr/lib/python2.7/lib-dynload',
- [- e, ^4 {- B( X1 u% c5 o  c 3 Q% }3 h! y0 j" p& y! O
'/usr/local/lib/python2.7/dist-packages',/ P4 i) E) F5 S  Q3 `3 @" M4 d
3 Y+ Y5 _( p/ x1 Y  J
'/usr/lib/python2.7/dist-packages',
' D' t! ]2 _# X- \, c# H3 U' K ) I1 X  r9 ?. ?7 ?% D# r1 T0 l% Q
'/usr/share/openstack-dashboard/',+ o6 B3 n; W3 }7 w

; I+ F1 p; M. v' G '/usr/share/openstack-dashboard/openstack_dashboard'], f1 n  X% a8 V& y& X

% x: }. S# P. D1 L( n% Y) J 6 A' J# W9 A9 S  Y) V( Y! y) \: e4 p
$ I/ ]8 o# k2 T
Server time: Fri, 29 Mar 2013 12:51:09 +0000
7 `6 o2 f* D5 H' S- g+ V) ]" A* R ' K- j. P7 p7 d) Z( N+ X

4 e  R; A6 U$ M) ~6 g2 m! d解决方案
/ z2 p+ R' m& F7 V! F3 Z
! X: @3 E! j9 S% r1 J查看 apache2 的 error 日志,报如下错误:
1 F$ \5 L, p8 O9 O# L2 _/ v3 n% E% L+ K" D, f. W+ X
+ |* N0 S9 N2 _! L
ERROR:django.request:Internal Server Error: /horizon/admin/
9 H5 y: s  `  f  z( f, ^ 6 ^6 w. e9 z. A6 Q* w$ C7 R
Traceback (most recent call last):
! G9 N  P# i9 O& g; y  R& M/ u
- H* T5 Z7 _, w3 J% p0 b  File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py", line 111, in get_response  f  B. O" Q6 C
" Q9 i' X" |, e$ X
    response = callback(request, *callback_args, **callback_kwargs)3 h- S  V$ q2 |

; ]/ C; q, F& ^4 }9 M" P  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 38, in dec1 }' v# u/ Q+ w) c

: a2 z. z+ D0 y0 i1 W7 n" c3 O    return view_func(request, *args, **kwargs)' x/ U; p/ |$ N; X

' {+ G+ ~) P! i  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 86, in dec
" [& T1 Y! u; k/ C( I  ` - t# S8 R: j! A' S! \, D
    return view_func(request, *args, **kwargs)
2 E: l+ h& D/ [
) e1 S5 z9 q6 K  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 54, in dec
1 K- g" f+ b& k& S0 w# f+ \
- r9 \. r1 L- T3 _' Z    return view_func(request, *args, **kwargs)- `/ j0 K( |+ V! d" t4 ^/ [* z5 ^# u1 l
/ J' U6 M* K8 \
  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 38, in dec* P! v' m2 r; O

3 Z& h9 w0 s$ ], ]2 C$ [8 N; b    return view_func(request, *args, **kwargs)
  ~/ J5 F  K' X) b% T
( Y( j+ p/ w$ y, M3 x8 z  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 86, in dec
/ }* A, z; \" v2 L! o5 B1 g
# x2 o+ ?$ R: c9 `: [% e# U    return view_func(request, *args, **kwargs)
8 s9 F# L' b6 {  K8 o4 t   m+ p2 ]# O/ U, D. z7 N. w
  File "/usr/lib/python2.7/dist-packages/django/views/generic/base.py", line 48, in view
* R/ p0 ], }- |" O: E. M
4 f% A# ^. D( [: K0 Z+ O+ O    return self.dispatch(request, *args, **kwargs)) r7 \' E$ i0 i/ d( X( D% D* s" _

  ^% a& G2 y4 `; D* C  File "/usr/lib/python2.7/dist-packages/django/views/generic/base.py", line 69, in dispatch9 |# e, S# x; U% z2 ]9 o
! H# J" d/ [, l1 E/ e6 ^
    return handler(request, *args, **kwargs)
/ T+ A: b0 d- [9 g; [( f  V
+ L; E6 k4 @) D3 F4 }  File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 155, in get
8 A2 O( o, l: f2 [) e - ?8 O: t% _1 E; s2 \* Z. A
    handled = self.construct_tables(): K: m9 K0 [( w/ i

# i- Q! i4 Z2 z( e2 R  File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 146, in construct_tables
" V( N6 f# f: b' Z6 i
2 Q9 B  _( ^$ R% j    handled = self.handle_table(table)# e: T' n& x' ^( W
0 o' _  c$ W7 g+ Q  L( T; S* I
  File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 118, in handle_table
2 K1 q+ t' m+ B3 d" m " s: F' \9 z, o1 O( K
    data = self._get_data_dict()
7 s  ~5 c0 S" j1 N8 U
3 _3 c( T8 d  \( B9 ]  File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 182, in _get_data_dict# g+ @' U: }5 H9 T* j) I* r% a

$ u$ M( r/ O- l    self._data = {self.table_class._meta.name: self.get_data()}
+ R6 z3 f$ V; d; j$ d" ~3 G
( b9 R% P) W* a1 }0 g/ |  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/dashboards/admin/overview/views.py", line 41, in get_data' i2 M( L3 w! X. a' a

( E& k+ A6 s1 W/ ^    data = super(GlobalOverview, self).get_data()
/ k5 ~' Z; @# O
, z. V5 b; G0 f8 ^5 d  e  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/views.py", line 34, in get_data0 V  B% \+ _; L7 {( I' ?

* B8 I1 d7 I9 ^  a    self.usage.get_quotas()( @. e+ s0 Y! r6 T1 ?0 l4 O2 @
/ V" b, F1 z& p$ j" f( b8 ?
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/base.py", line 115, in get_quotas
4 s- q  R. `1 Q) x. r! v% a9 Z9 @
$ o6 c' [1 [6 T9 H    _("Unable to retrieve quota information."))
9 V& d8 @6 J) A- j! B$ D
6 j* Q3 W; O7 N$ l. O# I. S  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/base.py", line 112, in get_quotas7 K4 k# a. d5 J5 e

" k7 y! v. A( A6 _- b4 m$ E    self.quotas = quotas.tenant_quota_usages(self.request)
5 g' v5 Q- H- \% g + `& j  v- H. b& D
  File "/usr/lib/python2.7/dist-packages/horizon/utils/memoized.py", line 33, in __call__
2 P; Z  {, @4 j' Y
3 R1 V2 r9 t9 M    value = self.func(*args)
. Q! W0 k  R% t( M7 d$ C$ a3 `
# |6 M9 F& J+ b2 T' C3 B% b, x  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/quotas.py", line 115, in tenant_quota_usages+ T* P# ~7 w* L7 W6 t9 p
( c# ~0 W9 W% W0 u/ H
    disabled_quotas=disabled_quotas):
4 Q7 L4 g5 s5 s1 M' e . E4 z9 r% [' R0 [5 q% c: a5 D+ G( n
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/quotas.py", line 98, in get_tenant_quota_data
+ X! D, |1 x9 h9 H+ a / ~+ F- n& h8 u3 `  Q3 S7 q- Q  [
    tenant_id=tenant_id)
4 C# U# R5 l8 t# X4 [2 d9 P( s 5 e+ R, y( z) A2 B
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/quotas.py", line 80, in _get_quota_data3 v1 t; k! P' Q! E) \: Q; h
1 c2 j  G( b' e
    quotasets.append(getattr(cinder, method_name)(request, tenant_id))* f$ n9 [1 o, e  l3 r. X
/ e: `* x6 n* ~. F0 ?. m# E! Y
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/api/cinder.py", line 123, in tenant_quota_get
8 M! h; W4 i5 Y% D; Y - I: ^) l7 u2 W; f
    c_client = cinderclient(request)
8 C+ l" }# l0 N' u# R! M
9 ^( c' i2 a0 t- m7 S) I  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/api/cinder.py", line 59, in cinderclient0 f* F5 _, V4 l0 ^8 N+ k
) y4 C, k+ }: D4 q5 O/ M) K8 E+ F
    http_log_debug=settings.DEBUG)
" b  b8 d: T7 ?7 S  s2 J8 G 7 }; g1 \$ L* V- V/ O6 _( R0 A
  File "/usr/lib/python2.7/dist-packages/cinderclient/v1/client.py", line 69, in __init__
3 s# h7 A) i  y( [9 [ ) k( K  Y# k- M. ]% k' @4 ]
    cacert=cacert)* X) J8 `1 u0 [
& b; h8 v0 T6 u# }6 f
  File "/usr/lib/python2.7/dist-packages/cinderclient/client.py", line 78, in __init__$ Q! ]& A5 M. U' j! W$ q

  }0 Z2 s, e( m1 E    if hasattr(requests, logging):& ~) w6 {; D0 m9 W, J

7 L- k# N7 m) q: \% P7 i3 `TypeError: hasattr(): attribute name must be string# e: Z  O& V% r" c7 A/ y
9 S. m) N4 P+ h3 |, B

5 ~4 h5 w& H1 ~8 Q错误信息中指出了 Cinderclient 的 client.py 中 78 行 hasattr() 方法的属性必须是一个字符串。
- t5 ~: t* n) ^. B$ q1 g修改代码:. \. O7 T, k# ^! B% `, N* [
. Z& U/ b5 \  r9 X

, G4 l5 t9 t, r( U4 k9 P
% T# l, [9 q# [6 O3 A! {; e; @: U# vim /usr/lib/python2.7/dist-packages/cinderclient/client.py
! q# ~3 d( f. w% P0 G6 v# F % C8 ^, u7 L- [) P7 _! G( t/ U
78 if hasattr(requests, logging): # 改为 : if hasattr(requests, 'logging'):
$ v3 ]" l% o1 C0 { & E$ E* R7 t! s% H  M# \* F" M- w7 \
79 requests.logging.getLogger(requests.__name__).addHandler(ch)
5 ?; f$ M$ U! M& C1 s" b) ~ - D5 H" x2 R. x' Z" J- a, K( ^2 y
& e: }+ H! C4 z" f/ [! w% k& F
重新启动 apache2 :8 b1 b2 t3 d  V5 C) n9 c1 Q0 t

/ g' }( z2 L! F: {- F0 b /etc/init.d/apache2 restart) v. b: P. q* K9 V, N$ H
6 \( h) H9 j7 T! g
这次访问 dashboard 没有报错,尝试创建 volume 也没有问题了。) {0 ^; Z7 P' a  K" [

/ N! r7 u' [1 h, t; H# u# f" i5 h11、Unable to attach cinder volume to VM- v2 u1 N2 q1 o0 }. I3 j
( e4 n1 p, B+ Y% ^, _
     在测试openstack中的volume服务时把lvm挂载到虚拟机实例时失败,这其实不是cinder的错误,是iscsi挂载的问题。
9 e5 q8 \" g1 ~) }' e: G$ E
* Y& ~# v3 W# U. j- e+ p% J以下是计算节点nova-compute.log 的错误日志:  v5 s; p* R& Q0 D
7 j4 A4 f! A& ]4 C2 d! p
2012-07-24 14:33:08 TRACE nova.rpc.amqp ProcessExecutionError: Unexpected error while running command.4 J" u) ^9 E% o. X8 o7 B
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
$ R3 {8 v& X( ~% `$ u: F2012-07-24 14:33:08 TRACE nova.rpc.amqp Exit code: 255& V4 c2 @! J/ _3 c8 |$ t% [
2012-07-24 14:33:08 TRACE nova.rpc.amqp Stdout: ”3 G+ q- C5 i! L" s0 Q
2012-07-24 14:33:08 TRACE nova.rpc.amqp Stderr: ‘iscsiadm: No portal found.\n’( t7 s, s! P9 ]9 v' J
9 g3 R0 i8 z! Z, j( ?7 L( j
$ s! E, e+ I4 C& \4 \
6 M  k$ C4 X3 h4 r' L3 v
以上错误是没有找到iscsi服务端共享出的存储,查找了很多openstack 资料说要添加以下两个参数:" R# a5 j  B* z: K" h: T

: z( y% T2 z! P( Qiscsi_ip_prefix=192.168.80 #openstack环境内网段
6 I5 b7 ^, K6 s2 r1 s" Q7 u: G( H% S4 B  h, t
iscsi_ip_address=192.168.80.22 # volume机器内网IP
1 H; \4 u3 \! p8 I. k% e, c- D7 E7 y. Q$ f1 H6 c4 h  k4 X
可是问题依然无法解决,后来发现只要在nova.conf配置文件中添加参数iscsi_helper=tgtadm 就挂载失败。! T+ Q: h7 ]- T9 G. W4 E
! X) Z9 t/ y/ {
根据这个情况进行了测试查看日志才发现:如果使用参数 :iscsi_helper=tgtadm 时就必须使用 tgt 服务,反之使用iscsitarget服务再添加参数iscsi_helper=ietadm。
4 p  P9 r( G' I8 ^
; U4 R0 \2 ]+ {4 K' s1 i我测试环境的问题是tgt和iscsitarget服务都已安装并运行着(在安装nova-common时会把tgt服务也安装上,这个不小心还真不会发现),在nova.conf配置中添加参数iscsi_helper=tgtadm ,查看端口3260 发现是iscsitarget服务占用,所以导致挂载失败,我们可以根据情况来使用哪个共享存储服务!!将tgt 和iscsi_helper=tgtadm、iscsitarget和iscsi_helper=ietadm保留一个即可。
: I4 {4 B" a5 H7 ?+ K/ l! o4 y. X. c7 R# r3 |: Y* |! H
12、glance index报错:7 Y# F" l3 j  _2 C" e) k3 N8 d
( G/ K: T4 f# \3 |3 {8 T
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)
. x# q3 ~: {% c6 s  U4 q   r( H  ]% r$ z9 m2 }  B& l
: }( F! T' v  i, ~/ M; f% I
在 Grizzly 版,我测试 glance index 时候报错:, ?! [: K" F' Q# d/ I& |8 z) b
* u: F( W! C; h; X8 T
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). B' t: R5 A3 J! p- X  I, A7 `9 f
错误信息指出:glance 没有通过keystone验证,查看了 keystone 日志,报错如下:
4 E" S3 _& Y5 T4 @8 l0 U5 ^0 V5 L7 @/ ~1 T+ `
2677 2013-03-04 12:40:58    ERROR [keystone.common.cms] Signing error: Error opening signer certificate /etc/keystone/ssl/certs/signing_cert.pem
% L+ p; L) {3 Q0 n4 ?2678 139803495638688:error:02001002:system library:fopen:No such file or directory:bss_file.c:398:fopen('/etc/keystone/ssl/certs/signing_cert.pem','r')- t3 `4 ]' i) J6 @+ I% O; O
2679 139803495638688:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:400:
# {2 {% s" f; L! c; \/ M2680 unable to load certificate
& ]5 E9 l" b+ K& m( C2 l7 u" `2682 2013-03-04 12:40:58    ERROR [root] Command 'openssl' returned non-zero exit status 3
: K3 g8 X0 a! Q0 O4 n2683 Traceback (most recent call last):
9 g/ p6 V4 t' q$ O" R2684   File "/usr/lib/python2.7/dist-packages/keystone/common/wsgi.py", line 231, in __call__
, A5 O# x; H& v- a, w0 f7 c2685     result = method(context, **params)
& r3 |% N2 Z5 J9 W2686   File "/usr/lib/python2.7/dist-packages/keystone/token/controllers.py", line 118, in authenticate
0 k3 Q+ M8 l# o' d. e2687     CONF.signing.keyfile)
7 S: F& v& z( L! W2688   File "/usr/lib/python2.7/dist-packages/keystone/common/cms.py", line 140, in cms_sign_token9 R7 \, i4 f' ~$ w9 }/ @
2689     output = cms_sign_text(text, signing_cert_file_name, signing_key_file_name)
. o2 w4 A0 ^/ G1 m3 F- l2690   File "/usr/lib/python2.7/dist-packages/keystone/common/cms.py", line 135, in cms_sign_text. X- ?7 g$ x5 r5 k4 l7 q6 _& b
2691     raise subprocess.CalledProcessError(retcode, "openssl"). ]1 I1 C$ t) b/ [
2692 CalledProcessError: Command 'openssl' returned non-zero exit status 3
( e5 ~" q: V: c6 l/ j在Grizzly 版中,keystone 默认验证方式是 PKI , 需要签名证书,之前的版本都是用的 UUID,改 keystone.conf:. U, F4 z, |& d5 Z# m/ r

. u/ _/ K$ u% P! b! F1 D. w2 T) Btoken_format = UUID9 Z" P$ ~; s6 }5 j7 N( e8 E
在试一次就没有错误了。! f9 L1 y6 F% v

. u% B6 K0 s# ~; b& q' q13、镜像制作9 F. c  a+ v8 r- o; Z; \5 R- X
* U' j; C; d  E! Q! b
这里主要强调下windows的镜像制作,因为windows的涉及到加载驱动的问题,就比较麻烦。, _: W# }- V6 j7 F

( w/ x, m  z+ n$ \( _$ v( [下载virtio驱动,因为win默认不支持virtio驱动,而通过openstack管理虚拟机是需要virtio驱动的。需要两个virtio驱动,一个是硬盘的,一个是网卡的,即:virtio-win-0.1-30.iso和virtio-win-1.1.16.vfd。这里主要强调两个地方:
4 s' M  Y6 L: u/ }
% ^: H4 o& [) z$ E7 x3 y1 A1、创建镜像:
. j; r, }( Q6 W3 o1 R8 W
% l- |" b( o. S8 t- X kvm -m 512 -boot d –drive) ^4 _# ~+ g+ [; A

) y' I/ ]1 j1 c) h1 hfile=win2003server.img,cache=writeback,if=virtio,boot=on -fda virtio-win-1.1.16.vfd -cdrom windows2003_x64.iso -vnc:10                  
# R) R0 X7 ~* W9 w) S ' K# T3 F3 R0 `1 x7 m1 x5 U% h
1 ]& d6 z( N: o" ?! O
2、引导系统 :* m" c# C+ p+ q$ G4 E+ c
$ Y4 d3 K; l- E8 M# E1 E' m
kvm -m 1024 –drive file=win2003server.img,if=virtio,
! L) U7 |. w; L; u6 I
. b2 g& X1 N* W3 [9 w8 g7 H. V( T/ Uboot=on -cdrom virtio-win-0.1-30.iso -net nic,model=virtio -net user -boot c -nographic -vnc 8* V% U  ~2 W/ p, j3 \/ ?( B' ^8 b
0 D; W/ u5 j+ R0 R+ J
1 t. m: a+ n: q' ~. v
这里需要注意的地方是if=virtio,boot=on –fda virtio-win-1.1.16.vfd和引导系统时使用的virtio-win-0.1-30.iso 这两个驱动分别是硬盘和网卡驱动。如果不加载这两个驱动安装时会发现找不到硬盘,并且用制作好的镜像生成实例也会发现网卡找不到驱动,所以在这里安装镜像生成后需要重新引导镜像安装更新网卡驱动为virtio。( ^1 ]1 c8 N, |
* ]2 H/ P* ~/ n6 v) e9 m* E, J
14、删除僵尸volume
- y+ W" f6 k) M3 @6 O; f. i; }4 w/ i" x  {. u- Z9 N1 p
如果cinder服务不正常,我们在创建volume时会产生一些僵尸volume,如果在horizon中无法删除的话,我们需要到服务器上去手动删除,7 V7 V' K3 A. u' |  d
& P% x( k; k: S3 Q9 D/ |
命令:lvremove /dev/nova-volumes/volume-000002
: C4 G% L/ d. d6 h4 W& v+ z+ b6 a( Q, @. {7 p) S: t
注意这里一定要写完整的路径,不然无法删除,如果删除提示:" _: h7 R. }; a/ E- Y- H8 h
$ y! S$ G  K2 @' U9 R( [
“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模 式。) y- h: }: x# Q4 G, R, q
  R4 Z1 T) {: Y4 e- X, F4 s
到了Grizzly版本,quantum组件才比较稳定,可以正常使用,自己也花了很多时间研究,现在已可以成功部署多节点环境。以下是部署过程中遇到的 一些问题,包括Essex和Grizzly两个版本。国内网上关于这方面的资料很少,很多资料也都是国外网站上看到的。而且很多情况下日志错误信息相同, 但导致错误的原因却不尽相同,这时候就需要仔细分析其中的原理,才能准确定位。遇到错误并不可怕,我们可以通过对错误的排查加深对系统的理解,这样也是好 事。' t- P2 Z$ u* |8 s* t# d% h  E0 t

/ w7 L2 l3 ?/ b9 ^: ^/ u3 J关于安装部署,网上有一些自动化的部署工具,如devstack和onestack,一键式部署。如果你是初学者,并不建议你使用这些工具,很明显,这样 你学不到任何东西,不会有任何收获。如果没有问题可以暂时恭喜你一下,一旦中间环节出现错误信息,你可能一头雾水,根本不知道是哪里错了,加之后期的维护 也是相当困难的。你可能需要花更多的时间去排查故障。因为你根本不了解中间经过了哪些环节,需要做哪些配置!这些工具大多数是为了快速部署开发环境所用, 正真生产环境还需要我们一步一步来操作。这样有问题也可快速定位排查错误。" I& V' w& e4 L- _1 I

0 y$ t2 p1 O& f本文仅是针对部署过程中的一些错误信息进行总结梳理,并给予解决办法,这些情况是在我的环境里遇到的,并成功解决的,可能会因为环境的不同而有所差异,仅供参考。5 V! \- F% `% v+ x
+ |" ?8 R9 n4 l# e: @
1、检查服务是否正常
/ |* K# w( r7 s( C/ c. A. k# X' `1 g& D6 P, s$ C9 }. V+ [
root@control:~# nova-manage service list
& X8 S9 z9 N2 b1 U1 I' I
1 D! g* o1 \. r, M7 mBinary           Host                                 Zone             Status     State Updated_At7 {$ x' ?8 K8 a  y6 Y

2 c0 d3 w! @8 t" S! A# b- Q- fnova-cert        control                              internal         enabled    :-)   2013-04-26 02:29:443 q' v2 ^( W$ ]
; e) J4 S0 e' a+ M0 Z5 C
nova-conductor   control                              internal         enabled    :-)   2013-04-26 02:29:42/ p" _# w9 f  @
! U( W4 Z  e3 X7 i: F
nova-consoleauth control                              internal         enabled    :-)   2013-04-26 02:29:44& ]- `# v2 Y- G" C  g

6 P1 K1 I) l1 c. K6 S, k  B4 Znova-scheduler   control                              internal         enabled    :-)   2013-04-26 02:29:47
$ x" A# D3 f: i  B# b* l
; i( s- X$ \( N8 F. R% N3 _; Bnova-compute     node-01                              nova             enabled    :-)   2013-04-26 02:29:46
% }# Y! ^. j) s% K/ z. B! T) [  s) a3 A$ R
nova-compute     node-02                              nova             enabled    :-)   2013-04-26 02:29:46, d; r: W" {6 K6 K9 _8 \, c
0 ~' K* w8 {( t+ M) B/ ]0 T5 h# v! ^
nova-compute     node-03                              nova             enabled    :-)   2013-04-26 02:29:42% M$ T$ Z7 \! m0 s/ C) I
复制代码* a9 {* x: V$ v3 Z
如果看到都是笑脸状态,说明nova的服务属于正常状态,如果出现XXX,请查看该服务的相关日志信息,在/var/log/nova/下查看,通过日志一般可以分析出错误的原因。
& J( T, m; g5 g ( B: P' T- O0 G9 z, z

  L5 j1 \4 x, u4 [$ d2、libvirt错误, F! \1 v& |. U3 f/ p) c
python2.7/dist-packages/nova/virt/libvirt/connection.py”, line 338, in _connect/ V! [& y$ C6 d0 I' g
2013-03-0917:05:42 TRACE nova return libvirt.openAuth(uri, auth, 0)
: K6 V$ c& y, s3 n9 J* v4 a2013-03-09 17:05:42 TRACE nova File “/usr/lib/python2.7/dist-packages/libvirt.py”, line 102, in openAuth
0 u* R6 f4 L3 ^# M2 ?: ]2013-03-09 17:05:42 TRACE nova if ret is None:raise libvirtError(‘virConnectOpenAuth() failed’)
* w1 d, i1 u5 }0 s( s% D' z. G3 W2013-03-09 17:05:42 TRACE nova libvirtError: Failed to connect socket to ‘/var/run/libvirt/libvirt-sock’: No such file or directory7 b, B- [9 i$ ^% H: M
2013-03-09 22:05:41.909+0000: 12466: info : libvirt version: 0.9.8
4 l- k1 G) B+ j# |$ d: p  N% h- [2013-03-09 22:05:41.909+0000: 12466: error : virNetServerMDNSStart:460 : internal error Failed to create mDNS client: Daemon not running5 H2 H# D$ r9 P/ k* h# \
复制代码" }6 E! u7 l* h1 B' r4 x
解决方案:
* g* `# q4 V# p6 @& y; ^出现这种错误首先要查看/var/log/libvirt/libvirtd.log日志信息,日志里会显示:libvirt-bin service will not start without dbus installed.
4 I8 z8 E2 O8 u+ B2 q) Z我们再查看ps –ea|grep dbus,确认dbus is running,然后执行apt-get install lxc
) ~- \+ Y/ C/ M1 M
) l$ [5 u' e+ k4 Y8 D) T2 B3 V
& ^# C1 s# W4 l, R1 p$ J/ o3、Failed to add image9 R6 u  D, M( J% U
Error:2 h; _+ i( I7 ?1 B
Failed to add image. Got error:
The request returned 500 Internal Server Error
" X* I$ G' ]: i& e( I" ]复制代码
$ T# _) m+ z- w% |4 u ( d% Z. c4 E2 E/ B) V

; G% [6 j' o- o7 t6 ?0 }& x" ^3 t解决方案:" ?; c0 i) z2 y
环境变量问题,配置环境变量,在/etc/profile文件中新增:
# l. F  a  m2 _5 S* g 0 ]8 T1 q6 u9 b: ?
, n) h. E5 j1 T8 ?: E/ l0 m" F: g
OS_AUTH_KEY=”openstack” & c6 S) U* o6 E1 u* D/ ^
OS_AUTH_URL=”http://localhost:5000/v2.0/”' n2 _2 x7 h$ n" ^! k
OS_PASSWORD=”openstack”
7 Z- A; P% w+ L% z3 QOS_TENANT_NAME=”admin”
+ v4 Q; i9 v! `, F; ^+ AOS_USERNAME=”admin”
, \) W0 g3 z1 Q0 z6 `" a: `" f复制代码: ?+ Z1 |6 {& x% N( O: _. R
然后执行source  /etc/profile即可!当然你也可以不在profile里配置环境变量,但是只能临时生效,重启服务器就很麻烦,所以建议你还是写在profile里,这样会省很多麻烦。
- k& @4 p% h; {0 u  ? 4 C1 K/ K9 |# y, s; S

! U. J3 M$ N# q/ r4、僵尸实例的产生
# {0 s3 f; r! y& J, C- F* x: j僵尸实例一般是非法的关闭nova或者底层虚拟机,又或者在实例错误时删除不了的错误,注意用virsh list检查底层虚拟机是否还在运行,有的话停掉,然后直接进入数据库删除。
7 f* A, U) g: o" o$ J: J- M' aNova instance not found
% l1 S! j/ Y& l" C; c9 h
( P% J4 O& m. g' r: FLocal file storage of the image files.
5 {1 w+ q+ e* ^0 A8 K: L6 }' F! T1 Q  R: }
Error:
4 H, R4 s' K/ {# T" i3 e; S4 q2013-03-09 17:58:08 TRACE nova raise exception.InstanceNotFound(instance_id=instance_name)% L6 G( o  n4 B4 n: @/ p
2013-03-09 17:58:08 TRACE nova InstanceNotFound: Instance instance-00000002 could not be found.$ `% a7 e, c: p* J
2013-03-09 17:58:08 TRACE nova  z  q# A: e: n/ c
复制代码3 ~' f9 ~1 o9 N/ N5 M
解决方案:6 N' z. d5 ^' i1 r( {
删除数据库中的僵尸实例或将数据库删除重新创建:
2 a. b2 w5 F; z" s7 a( l) s) Ya、删除数据库:
5 n' T/ M" z8 x3 h2 N3 k$mysql –u root –p
; \- Z* [0 Z  i9 o% c+ `DROP DATABASE nova;( ?8 P6 t( \( l" n  k" q2 }

, N& _$ F5 }0 ERecreate the DB:, k. y4 J1 \- |% a' t9 \: A! O1 e
CREATE DATABASE nova; (strip formatting if you copy and paste any of this)
6 g, s$ E% {5 H" G  KGRANT ALL PRIVILEGES ON nova.* TO ‘novadbadmin’@'%’ IDENTIFIED BY ‘<password>’;
# ^; f1 _6 ?3 B4 F6 q2 h# mQuit( f/ n$ s: L/ C. }
3 e& x  T$ w; b, }  G' K6 T% ~
Resync DB
3 m0 k, w# S- ~, _复制代码
+ z  l. D* d) J% |3 i2 q. Wb、删除数据库中的实例:
5 k5 b8 r8 @& `% M, y#!/bin/bash
  ~( L1 D+ a6 W) T6 l8 a( x7 r5 q: N9 L; R0 j4 A, J8 R
mysql -uroot -pmysql << _ESXU_
$ l/ {+ f: C7 Z% K9 U5 M5 ^
/ p( V: ~6 q' Z* m# o" H/ Wuse nova;) v6 E9 v" K* Y' t  M) O0 P% l+ x8 u

$ ]) N/ n/ h( _' bDELETE a FROM nova.security_group_instance_association + h7 K/ l0 V7 c3 G2 t

! ]; I/ v9 f# l! UAS a INNER JOIN nova.instances AS b8 g" u# q  q; z' \/ U
9 [, T' p. l" A
ON a.instance_uuid=b.id where b.uuid='$1';
( z7 _4 T8 Y% U8 b/ h/ W- Z% @/ i. U* d( O' V/ @
DELETE FROM nova.instance_info_caches WHERE instance_uuid='$1';# I+ r" `5 S5 k

% M# I% d- k% w$ H6 \DELETE FROM nova.instances WHERE uuid='$1';# H7 f+ z0 L4 l: z
; c7 \  \+ v, b
_ESXU_- j8 F- |0 K7 U/ T
复制代码
# {# r9 r. K- |% U5 c将以上文件写入delete_insrance.sh中,然后执行sh delete_instrance.sh insrance_id;/ G  ]7 y2 J9 V' f6 o/ K
其中instrance_id可以通过nova list 查看。
/ \  O/ w0 l2 S4 Z% w+ l9 v7 X
8 J. P2 o( c' \! D" R9 v' I( h# F0 G* k6 E' W* y: `
5、Keystone NoHandlers' i. a. V$ P1 R$ O" k8 l- m% g

. C8 O# F& j6 r+ a# q7 CError  ( G' Q4 u2 m8 _  ^( Y  T
root@openstack-dev-r910:/home/brent/openstack# ./keystone_data.sh  - v& o( i2 `: b1 [. v+ {
No handlers could be found for logger “keystoneclient.client”  8 n( S1 L% p3 g  X" B4 [+ \
Unable to authorize user  / w7 L( X3 G5 C' S7 K4 ?4 B
No handlers could be found for logger “keystoneclient.client”  # a2 T; }1 g2 L; s3 a8 b! W5 d2 {
Unable to authorize user  & C  Z. U8 ]! e2 P3 ?$ B
No handlers could be found for logger “keystoneclient.client”  8 g: l, g; F/ Q) D2 N" [1 W/ u
Unable to authorize user  
. g: u5 ~  x5 ^" h" F7 O复制代码
% _9 I8 q, @/ A3 g4 h 9 n9 z( Q! [; G6 S" x
5 \5 C6 H6 W; F
解决方案:2 w- P/ u7 `: P0 B, |
出现这种错误是大多数是由于keystone_data.sh有误,其中" U. e& J4 S1 A8 o9 ^7 @8 F8 @
admin_token必须与/etc/keystone/keystone.conf中相同。然后确认keystone.conf中有如下配置:
1 h5 t3 O% _9 \1 _7 T7 Adriver = keystone.catalog.backends.templated.TemplatedCatalog template_file = /etc/keystone/default_catalog.templates( B" \( t* S/ N$ h$ y! s

' h% [* {" S# n
' u0 w8 C) G: a" h6、nova-compute挂掉与时间同步的关系: g, u; ?- Z& i% y0 c/ `$ Y
很多时候发现nova-compute挂掉,或者不正常了,通过nova-manage查看状态是XXX了。
0 N- I9 z5 U8 c  Y, K* e往往是nova-compute的主机时间和controller的主机时间不一致。 nova-compute是定时地往数据库中services这个表update时间的,这个时间是nova-compute的主机时间。
' M# w  T& s+ i- b" E' L1 {controller校验nova-compute的存活性是以controller的时间减去nova-compute的update时间,如果大于多少秒(具体数值代码里面有,好像是15秒)就判断nova-compute异常。4 y, T2 {" K- U; R! [
这 个时候你用nova-manage查看nova-compute状态是XXX,如果创建虚拟机,查看nova-scheduler.log 就是提示找不到有效的host 其他服务节点类同,这是nova心跳机制问题。所以讲nova环境中各节点时间同步很重要。一定要确保时间同步!!
% E% u" v/ I8 s0 j. C* y; }6 i如果在dashboard上看nova-compute状态,可能一会儿变红,一会儿变绿。那就严格同步时间,或者找到代码,把上面的那个15秒改大一点。
  d/ j/ F5 ]# a6 \; E" m3 t
9 p$ p4 z! ~7 o/ z! I# f' G+ a6 r  b/ {7 n/ Y" a% r" h: i
7、noVNC不能连接到实例
2 i) l" _+ ?2 d/ `% enovnc的问题比较多,网上也有关于这方面的很多配置介绍,其实配置不复杂,只有四个参数,配置正确基本上没什么大问题,但是装的过程中还是遇到了不少的问题。
2 {6 Z! ~  G* @4 F* B: _6 Q2 j' t4 U' L) Ca、提示“Connection Refuesd”0 P. T  h7 r6 U# m; q3 ~2 }
可能是控制节点在收到vnc请求的时候,无法解析计算节点的主机名,从而无法和计算节点上的实例建立连接。0 c+ z' H+ ]# G/ \) B% L
另外可能是,当前浏览器不支持或者不能访问,将计算节点的ip和主机名的对应关系加入到控制节点的/etc/hosts文件中。' P) B; w3 l6 l8 I" w' Y8 g) s
b、提示“failed connect to server”
" b: p$ i# B1 x出 现这种错误的情况比较多,有可能是配置文件的错误,我们的环境中遇到这个错误是因为网络源有更新,导致安装版本不一致,使组件无法正常使用,解决方法就是 使用本地源。另外需要特别说明的是使用novnc的功能需要浏览器支持Web Socket和HTML5.推荐使用谷歌。7 }2 u% }5 E1 K! _7 l; {- T

) V+ ]1 g; l" w; g
. Y2 F) Q" }, Q& }( j. t8、Unable to attach cinder volume to VM
. |7 w  [1 [( l- |     在测试openstack中的volume服务时把lvm挂载到虚拟机实例时失败,这其实不是cinder的错误,是iscsi挂载的问题。
/ n: _+ E" D) |5 I' E以下是计算节点nova-compute.log 的错误日志:
9 _% x) t) r6 z* @" W2012-07-24 14:33:08 TRACE nova.rpc.amqp ProcessExecutionError: Unexpected error while running command.
; `# K. }" k% E4 T/ L* |# b! |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
5 \7 V1 f7 V: B5 ^( K1 q6 B: v2012-07-24 14:33:08 TRACE nova.rpc.amqp Exit code: 2550 C4 e! b' }( r1 f
2012-07-24 14:33:08 TRACE nova.rpc.amqp Stdout: ”
/ c' _* P1 c" w  v% q3 Z. g2012-07-24 14:33:08 TRACE nova.rpc.amqp Stderr: ‘iscsiadm: No portal found.\n’2 z& O  x0 P# n- K1 \$ u6 Z" |2 l, Z
复制代码2 Y9 H6 W$ j" D- P( z, h( p3 G+ r/ G
以上错误是没有找到iscsi服务端共享出的存储,查找了很多openstack 资料说要添加以下两个参数:
6 k) W' l1 y! p$ J& Qiscsi_ip_prefix=192.168.80 #openstack环境内网段: e$ ]7 ~4 e* O- U3 o) k7 w
iscsi_ip_address=192.168.80.22 # volume机器内网IP
- J+ J; H- V3 C. ]9 D1 U  O" o2 \5 U7 ~可是问题依然无法解决,后来发现只要在nova.conf配置文件中添加参数iscsi_helper=tgtadm 就挂载失败。
/ [! g, r5 ^+ M9 d根据这个情况进行了测试查看日志才发现:如果使用参数 :iscsi_helper=tgtadm 时就必须使用 tgt 服务,反之使用iscsitarget服务再添加参数iscsi_helper=ietadm。
2 r/ D7 Q9 ]7 V. K+ f我 测试环境的问题是tgt和iscsitarget服务都已安装并运行着(在安装nova-common时会把tgt服务也安装上,这个不小心还真不会发 现),在nova.conf配置中添加参数iscsi_helper=tgtadm ,查看端口3260 发现是iscsitarget服务占用,所以导致挂载失败,我们可以根据情况来使用哪个共享存储服务!!将tgt 和iscsi_helper=tgtadm、iscsitarget和iscsi_helper=ietadm保留一个即可。9 q; O& \  E& B) {" Y- F* k
. b6 Z: p7 x0 V' W. y
6 F: e. @% h  F& Q7 t" s7 `* c& L+ A
9、glance index报错:
& N" Y- J' f2 K1 X) ~! P1 W! N# MAuthorization 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); e( o  I  y4 z& _8 v# S
复制代码  h2 \5 ]% [4 u
在 Grizzly 版,我测试 glance index 时候报错:( d" C6 G( l! G0 x( f
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)
2 W: U2 D, b& y3 k2 K
7 m8 C/ K8 t5 Y( m5 L错误信息指出:glance 没有通过keystone验证,查看了 keystone 日志,报错如下:
0 G! m3 t! C. k& c" e2677 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! j  f; \) j1 l/ ^) H$ X5 P
+ i1 S. [/ J( _0 \4 [+ a$ u0 o
在Grizzly 版中,keystone 默认验证方式是 PKI , 需要签名证书,之前的版本都是用的 UUID,改 keystone.conf:
1 h4 ]7 W3 L5 b( r+ B/ ]token_format = UUID
; G* U5 j4 k) q: c$ A% q
1 O' ^. ?+ ^' |在试一次就没有错误了。& B0 z8 M, l! O: H

0 l. l! |  I' N9 S5 X* M& {& T' r' V. [- ]0 q
10、镜像制作3 I+ Y( n2 T9 }( ~5 Q
这里主要强调下windows的镜像制作,因为windows的涉及到加载驱动的问题,就比较麻烦。
) ]. t5 C+ c1 U1 B  s, _( T下载virtio 驱动,因为win默认不支持virtio驱动,而通过openstack管理虚拟机是需要virtio驱动的。需要两个virtio驱动,一个是硬盘的, 一个是网卡的,即:virtio-win-0.1-30.iso和virtio-win-1.1.16.vfd。这里主要强调两个地方:
2 L2 L1 M- N4 [1、创建镜像:# j, `( w: j) b1 b% {2 m. N) d
kvm -m 512 -boot d –drive  6 I2 v9 |' y: Z/ `
  6 Y) Q6 _  m2 Q* a& g& M5 Z' Z" {2 z
ile=win2003server.img,cache=writeback,if=virtio,boot=on -fda virtio-win-1.1.16.vfd -cdrom w
9 i1 ]" @/ V  z0 ]+ e" r  O复制代码
: T) O9 ?$ f6 k8 v: g
0 {( Z& b: W  T5 h0 |
5 G  M/ ~/ e% l" O) d" s9 m
! H6 B/ \, R  y$ d9 _
) A1 w" C6 b" A9 O5 _6 V. K2、引导系统 :* F" H) i5 U  Q) A0 R
kvm -m 1024 –drive file=win2003server.img,if=virtio,& Q" j* O; {4 e3 k8 ?
" m# e/ y5 ^8 ]! D1 Z/ U
boot=on -cdrom virtio-win-0.1-30.iso -net nic,model=virtio -net user -boot c -nographic -vnc 86 [& m2 ^: P& h8 X+ S7 U  `
复制代码4 [0 W8 m! Q1 y- T/ Z
这 里需要注意的地方是if=virtio,boot=on –fda virtio-win-1.1.16.vfd和引导系统时使用的virtio-win-0.1-30.iso 这两个驱动分别是硬盘和网卡驱动。如果不加载这两个驱动安装时会发现找不到硬盘,并且用制作好的镜像生成实例也会发现网卡找不到驱动,所以在这里安装镜像 生成后需要重新引导镜像安装更新网卡驱动为virtio。
7 |: Q) R, K4 d7 S! I. j
: u5 N, \( p0 t4 n, a: a11、删除僵尸volume
. F" e. g4 Y& y( n$ Z& l; q
4 p& k7 r/ {% w0 H+ B. d
, u$ |" |7 [6 f3 [# g如果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 01:25 , Processed in 0.031803 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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