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

openstack常见错误

[复制链接]

1

主题

0

回帖

12

积分

管理员

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

, @' y* X3 c# ?* v0 J! _% h# I到了Grizzly版本,quantum组件才比较稳定,可以正常使用,自己也花了很多时间研究,现在已可以成功部署多节点环境。以下是部署过程中遇到的一些问题,包括Essex和Grizzly两个版本。国内网上关于这方面的资料很少,很多资料也都是国外网站上看到的。而且很多情况下日志错误信息相同,但导致错误的原因却不尽相同,这时候就需要仔细分析其中的原理,才能准确定位。遇到错误并不可怕,我们可以通过对错误的排查加深对系统的理解,这样也是好事。5 E& L0 v! r% B
9 j- S3 ~$ X  h+ O$ n: B5 C
关于安装部署,网上有一些自动化的部署工具,如devstack和onestack,一键式部署。如果你是初学者,并不建议你使用这些工具,很明显,这样你学不到任何东西,不会有任何收获。如果没有问题可以暂时恭喜你一下,一旦中间环节出现错误信息,你可能一头雾水,根本不知道是哪里错了,加之后期的维护也是相当困难的。你可能需要花更多的时间去排查故障。因为你根本不了解中间经过了哪些环节,需要做哪些配置!这些工具大多数是为了快速部署开发环境所用,正真生产环境还需要我们一步一步来操作。这样有问题也可快速定位排查错误。
7 y3 T" W) {) u2 A% f5 s* C& i
3 w' M; f( M% Y( z5 h5 D本文仅是针对部署过程中的一些错误信息进行总结梳理,并给予解决办法,这些情况是在我的环境里遇到的,并成功解决的,可能会因为环境的不同而有所差异,仅供参考。
# O4 [  y1 X$ \" F: m- K2 I3 n# ?2 ~, {. k5 s- C$ [
1、检查服务是否正常:4 }4 s6 ?$ [5 L# Y

* e+ P2 ]+ _$ Proot@control:~# nova-manage service list
) ^3 u: r9 T+ z6 J 2 k4 U, I) j+ h$ Z! v1 b
Binary           Host                                 Zone             Status     State Updated_At
* l1 A- X8 R7 g, z' _& Q
' g' I& s9 |+ fnova-cert        control                              internal         enabled    :-)   2013-04-26 02:29:44
. b! X" v3 y; D1 m- g+ B' w , S8 e- R* C9 `) G0 l# }) ~) J
nova-conductor   control                              internal         enabled    :-)   2013-04-26 02:29:42
# c/ e8 a( O; V% {% F# i7 `6 ]
1 H7 a: x9 @3 T. D' \5 K: Inova-consoleauth control                              internal         enabled    :-)   2013-04-26 02:29:44
; ~- f# @0 b8 g/ s8 Y  S( i ; M3 c% l- z9 c* A7 }
nova-scheduler   control                              internal         enabled    :-)   2013-04-26 02:29:475 W% J% T$ `! S4 {

, ]0 h# }1 W/ z  gnova-compute     node-01                              nova             enabled    :-)   2013-04-26 02:29:46" N  }, y) @2 H# F
! [4 w1 o' z' G! n
nova-compute     node-02                              nova             enabled    :-)   2013-04-26 02:29:46' v4 C3 |6 ?3 P: D# V- v; Y

& U4 I, I/ k% n0 M% g: y  p2 V0 Q9 ^nova-compute     node-03                              nova             enabled    :-)   2013-04-26 02:29:42  L( H, B8 F' X. L

. T% t2 P# q1 W3 x  |! F. K) V4 g8 h; M$ J8 z: L6 ~( N1 d  M: b
如果看到都是笑脸状态,说明nova的服务属于正常状态,如果出现XXX,请查看该服务的相关日志信息,在/var/log/nova/下查看,通过日志一般可以分析出错误的原因。2 Y4 y) U7 G; v
8 o3 H0 J/ d9 [
2、libvirt错误
" F7 r! Y' B; L6 f& k9 R& a- c+ v. G$ {/ v7 Q' R

& U- F7 s0 k: H! x+ l+ p+ h5 x: H1 M# B
python2.7/dist-packages/nova/virt/libvirt/connection.py”, line 338, in _connect
/ x9 ^* k; E; L2013-03-0917:05:42 TRACE nova return libvirt.openAuth(uri, auth, 0)
+ z* `9 K# w" ~2 X; {2013-03-09 17:05:42 TRACE nova File “/usr/lib/python2.7/dist-packages/libvirt.py”, line 102, in openAuth. \3 x& k5 c' ~* ?* r
2013-03-09 17:05:42 TRACE nova if ret is None:raise libvirtError(‘virConnectOpenAuth() failed’)
0 I/ K5 @- u: _  R# b% j$ [$ z2013-03-09 17:05:42 TRACE nova libvirtError: Failed to connect socket to ‘/var/run/libvirt/libvirt-sock’: No such file or directory
( }$ G  Q8 s6 D7 d8 n8 M7 \2013-03-09 22:05:41.909+0000: 12466: info : libvirt version: 0.9.82 O! {' P6 [. A. j& ?1 M: l: k% S) a
2013-03-09 22:05:41.909+0000: 12466: error : virNetServerMDNSStart:460 : internal error Failed to create mDNS client: Daemon not running
9 }$ h% x8 W% i! B
! c' j+ {* `/ l( T$ H5 L6 K
0 w' g) [' B9 q) _解决方案:5 o6 }$ N: V2 T% ]2 M

4 ]# p# n! w; [; P* Y4 Q6 ^出现这种错误首先要查看/var/log/libvirt/libvirtd.log日志信息,日志里会显示:libvirt-bin service will not start without dbus installed.
6 _0 T3 G8 C* x6 t5 X" B$ ?8 B$ t; V5 K
- o7 P, D% ^6 x我们再查看ps –ea|grep dbus,确认dbus is running,然后执行apt-get install lxc8 B0 S3 K) {$ \

- c# I* O/ \0 u% `% e3 H/ y3、Failed to add image& \5 H% v3 q. c" ]( J
7 j1 r; a& e$ A: d% {+ S8 L
Error:; i$ c. m+ S6 [5 c" c, }3 R
Failed to add image. Got error:
The request returned 500 Internal Server Error
( j) y- H/ T* H* c6 C7 T6 S 2 l2 }9 x' a6 ?$ X8 T4 _: l9 Q* ^+ r/ [- h

* B% S- s: l4 b% ~; ~解决方案:0 j4 `1 i/ o& ]2 U) G4 }

2 a1 ~3 q7 z* q0 r' P$ J+ m# L) q环境变量问题,配置环境变量,在/etc/profile文件中新增:
! O( T# w* P+ S$ ]' ~! |3 Y' T5 w1 t! l/ X, Z/ o
OS_AUTH_KEY=”openstack” 7 h& |2 t, D+ n
OS_AUTH_URL=”http://localhost:5000/v2.0/”
" u8 y" B6 }$ j2 j* K3 N, v% g6 YOS_PASSWORD=”openstack”  g6 h: {5 A$ `  H/ r
OS_TENANT_NAME=”admin”
! ^$ B1 R% X2 n: x& oOS_USERNAME=”admin”
  l* ^$ H% K3 Y  y& _* K  u " m4 k. S* r3 F5 ~' b# ]  q

# ]/ z  s3 S; r0 @然后执行source  /etc/profile即可!当然你也可以不在profile里配置环境变量,但是只能临时生效,重启服务器就很麻烦,所以建议你还是写在profile里,这样会省很多麻烦。
1 Y0 J2 _, @3 F* R7 x& L  L/ ^1 e; G" Q: |5 r: L9 `5 d
4、僵尸实例的产生  g* q& _2 a8 M

6 V1 D3 M# e  w+ r7 d, T6 s# \僵尸实例一般是非法的关闭nova或者底层虚拟机,又或者在实例错误时删除不了的错误,注意用virsh list检查底层虚拟机是否还在运行,有的话停掉,然后直接进入数据库删除。: {7 a/ E' L  r2 _2 d- x/ [
+ f1 X4 U* w3 k, N* s- L
Nova instance not found# M, c' T" m9 Q0 J8 A
& Y* ^. R: V1 l9 U1 X
Local file storage of the image files.4 Y4 u# i' g( ^

  [% G+ g) t# k4 u8 b# \% TError:3 W4 o1 L* y0 }: j
2013-03-09 17:58:08 TRACE nova raise exception.InstanceNotFound(instance_id=instance_name)7 T' G1 L* h# C2 O# o; j6 N
2013-03-09 17:58:08 TRACE nova InstanceNotFound: Instance instance-00000002 could not be found.
& f& M7 K! A( x  _2013-03-09 17:58:08 TRACE nova$ v' x. u4 H* P1 O
5 A4 _3 I) Y' L9 j1 k

+ n7 N! @/ X! B, O 7 m3 P# i2 t/ f* M" N; A: K# B. q  S7 V

3 j. B% H3 }& K7 L9 r! D解决方案:
. ]2 I/ |+ k  q6 r% T# q% t* V( M9 w5 w4 _* z# q- [* ]% }
删除数据库中的僵尸实例或将数据库删除重新创建:
8 f$ h1 |5 U1 Y% j
3 E' i5 ~) ^6 g" _/ J( m7 F4 ~) aa、删除数据库:; ^0 V' G  B5 E# y

8 e7 J- J7 S7 `* L) j$mysql –u root –p5 G0 N& d2 q( D8 B5 U9 N( u
DROP DATABASE nova;6 Z% K- Y: z! S# n

+ ]1 K- @/ x1 i4 o* o7 ORecreate the DB:- [8 S5 F. Y1 t: k! \
CREATE DATABASE nova; (strip formatting if you copy and paste any of this)
4 \/ x; v  ^/ `/ T6 J/ z! I/ P2 vGRANT ALL PRIVILEGES ON nova.* TO ‘novadbadmin’@'%’ IDENTIFIED BY ‘<password>’;
# Q& w  r/ S0 p: V1 j6 dQuit& Z% C+ Z) x9 X7 K  T6 {
' ]; }; S' N8 D" k! V0 j
Resync DB
' M' E2 z3 b3 Q3 {; z6 a9 B1 w
" z% M+ c3 x, f* w0 U. N5 i; H, N0 a7 I
b、删除数据库中的实例:
7 {3 g) W) Q$ F/ T0 v. x/ [; [6 }  G4 p& T. t, E! `7 j7 j7 _
#!/bin/bash! f8 [  C9 a& a+ W5 i& V4 F

& ^: @+ Z/ x% H. ~; L, |% P+ ymysql -uroot -pmysql << _ESXU_" v, O7 w! r. ?" {$ d6 R" @

  h, _* ~) e* m5 M- n# H. Q& [use nova;! Z& @* r2 U' r3 k7 p$ E" r# ?

4 I' p3 q3 w0 A! vDELETE a FROM nova.security_group_instance_association
1 s- ]& Z2 K" Z' {$ G
( s0 e. ^2 e& xAS a INNER JOIN nova.instances AS b
+ P+ @" d& t( E- v, R5 k/ D
6 J9 n1 u  U% V3 sON a.instance_uuid=b.id where b.uuid='$1';
- s* Q1 }8 y( G# g; L
, b/ t' X* ^# |- d5 KDELETE FROM nova.instance_info_caches WHERE instance_uuid='$1';
9 C# o- ~1 {# M2 Z6 Y3 x6 q, r
) L" N" U! M7 P& YDELETE FROM nova.instances WHERE uuid='$1';
" U& G' C; }+ W& d3 v+ O+ F. X
8 O+ z+ s9 i6 p_ESXU_" B7 A: K% d+ k' _9 s# l  ^7 e
; S8 e* h$ R- L; Z  z3 s: ]; R) u
) f: H, V; I, J* ]0 D
将以上文件写入delete_insrance.sh中,然后执行sh delete_instrance.sh insrance_id;
3 a5 K! n; ]+ T. `3 |8 i! K; a
  b5 G% L6 X9 J其中instrance_id可以通过nova list 查看。  B1 a7 j' W6 y

/ \0 l0 d8 |1 Q* V" {% o  a5、Keystone NoHandlers+ B8 x8 Z, l2 h" C0 B

3 \) b$ q+ I/ N7 U1 D$ m0 c1 vError
3 _4 A! H$ h+ C; S/ y* J5 U# n7 s4 Rroot@openstack-dev-r910:/home/brent/openstack# ./keystone_data.sh5 p+ N) r9 `) e  n3 a
No handlers could be found for logger “keystoneclient.client”
# b$ J9 y  P; e- Y; z3 eUnable to authorize user  [0 ^$ m/ w( r, b/ ]5 L( n
No handlers could be found for logger “keystoneclient.client”
5 [5 W. b& c3 D, r# a+ rUnable to authorize user
7 n$ p. P/ x5 j% \! U$ yNo handlers could be found for logger “keystoneclient.client”0 h" b2 j1 z. t
Unable to authorize user5 Z' A0 L3 F7 g9 H; {3 p

; ?* u0 u; ^6 }  R& E7 o; K; S3 Z' X: w! j* V4 P" W' |3 ^
解决方案:
* {/ q5 ^) ~7 |# r- l8 I4 |9 ~# Q! t5 `' M3 z& q1 U
出现这种错误是大多数是由于keystone_data.sh有误,其中9 V) L0 {. E+ n5 N
. g2 B' A$ T* q3 ?5 [+ p, B& A
admin_token必须与/etc/keystone/keystone.conf中相同。然后确认keystone.conf中有如下配置:9 {+ i5 s( b1 d! k+ w

- o: b* d* \: s- g7 bdriver = keystone.catalog.backends.templated.TemplatedCatalog template_file = /etc/keystone/default_catalog.templates
. J# s: J; t/ h+ B8 e! [0 k+ Q, Z8 p; J' C: A5 S
6、清空系统组件,重新安装:
6 O" g  ]6 v" v8 A) g9 {
& V  I6 V8 `5 a. y: E8 R#!/bin/bash+ p: V* p. k3 c7 s  J% F" ^
mysql -uroot -popenstack -e “drop database nova;”: l& E0 R5 K1 Y; f; J: ~+ W5 N
mysql -uroot -popenstack -e “drop database glance;”
1 B2 y- v$ Z% p! Y1 @. Lmysql -uroot -popenstack -e “drop database keystone;”7 [# R8 \# l; p3 u, j8 m$ r1 \* x% h
apt-get purge nova-api nova-cert nova-common nova-compute
2 a' e% z2 B2 q2 r6 h1 unova-compute-kvm nova-doc nova-network nova-objectstore
# D- ^, r+ [8 G3 xnova-scheduler nova-vncproxy nova-volume python-nova python-novaclient  S; [: x, c# g9 v% [8 A- q
apt-get autoremove1 ^2 b" m# Y' X
rm -rf /var/lib/glance
" T9 s+ X- U* L% ~5 t. Q  ~0 ]rm -rf /var/lib/keystone/
& K+ W0 N' X7 g! Z1 Crm -rf /var/lib/nova/
# S2 |4 X% `4 @$ ]" Srm -rf /var/lib/mysql
3 E5 r3 F! f- d0 q7 I4 Y
5 u, e- U) }% x) Q
" b1 C3 R( ~/ I3 n% R可通过执行上面的脚本,卸载已安装的组件并清空数据库。这样可以省去重装系统的麻烦!! z  [- F" L: _8 q- ~2 i7 L

% b  V, J, v7 f% m1 v5 m) n7、Access denied for user ‘keystone@localhost(using password:YES’)
, ^8 M' `; j* _" `* g$ H. S0 ?- ]8 W$ u9 z0 \9 @8 X( A% W* G5 {$ ^+ ^: h- _- g/ y
# keystone-manage db_sync
. }. c+ b" M' q' u- @7 [& L. s6 y
' Q; K& r. m9 a6 [! oFile “/usr/lib/python2.7/dist-packages/MySQLdb/connections.py”, line 187, in __init__
  V. O' U  [3 p/ s+ f8 t) e: j , p7 w! f- W4 ?9 ]  x* @5 Z8 D
super(Connection, self).__init__(*args, **kwargs2)4 r4 D7 l( m7 A) a1 ~: F
sqlalchemy.exc.OperationalError: (OperationalError) (1045, “Access denied for user ‘keystone’@'openstack1′ (using password: YES)”) None None
+ J, [$ J- G$ N  K5 O1 ?4 ~! k. o $ I7 S. t( h: n' }. U* E

( ~0 l2 D7 ^, h" ^0 G# A7 c; f- f解决方案:$ u5 W; k# E: ]/ k% w( g: F

0 ~# t9 I5 V7 H# U; M8 Q) [6 l9 \, m9 n查看keystone.conf配置文件链接数据库是否有误,正确如下:* I# w$ Z: s3 r1 |4 u3 C$ V/ M8 S+ K. y
. N; `6 B# p1 }# \
[sql]
, \( q% Z# v& `) g
( u% g7 W# L$ a2 @7 ~% d" V7 y( N connection = mysql://keystone:openstack@localhost:3306/keystone
5 O3 g' I# x1 K( x: {
# ^7 g- R! a9 n! P# p5 G8 ~1 J: q5 P3 F* _( S0 B8 f
8、nova-compute挂掉与时间同步的关系7 `7 Z7 Y: s: v1 v8 m, F5 o% Y
7 ^6 c  A9 ?/ Q
很多时候发现nova-compute挂掉,或者不正常了,通过nova-manage查看状态是XXX了。% e1 n, F1 ^/ ]% r! C) V7 {
6 ]8 g" \7 t) d" h1 o
往往是nova-compute的主机时间和controller的主机时间不一致。 nova-compute是定时地往数据库中services这个表update时间的,这个时间是nova-compute的主机时间。
- e* D- a6 U8 }0 n  G* h' H! H: V" y+ ~3 H/ f2 g  [
controller校验nova-compute的存活性是以controller的时间减去nova-compute的update时间,如果大于多少秒(具体数值代码里面有,好像是15秒)就判断nova-compute异常。
: P. s- J! Z8 Q  \& P0 i8 }6 r/ t4 K
这个时候你用nova-manage查看nova-compute状态是XXX,如果创建虚拟机,查看nova-scheduler.log 就是提示找不到有效的host 其他服务节点类同,这是nova心跳机制问题。所以讲nova环境中各节点时间同步很重要。一定要确保时间同步!!. R+ f. P" ?: k5 C! A; c4 c" x' L

! _/ ^( K% v) {如果在dashboard上看nova-compute状态,可能一会儿变红,一会儿变绿。那就严格同步时间,或者找到代码,把上面的那个15秒改大一点。3 m6 _6 a! [; l; s
1 j  s* x# x* V& {; G* a
9、noVNC不能连接到实例
/ ?# z0 g, J6 Y3 y
- p9 s4 q  J! g& A3 x+ Q- pnovnc的问题比较多,网上也有关于这方面的很多配置介绍,其实配置不复杂,只有四个参数,配置正确基本上没什么大问题,但是装的过程中还是遇到了不少的问题。
2 {# m3 O3 Y- ]) [' W8 j5 }
) N6 N: f( K% u9 k' ca、提示“Connection Refuesd”
& E. [: U$ U# g! k* d/ l7 ~4 O- s, F! G* g1 A
可能是控制节点在收到vnc请求的时候,无法解析计算节点的主机名,从而无法和计算节点上的实例建立连接。
' R0 B/ G7 e; m/ G; Z; U$ J* c; Y
9 W' J4 k* H2 E7 v6 X另外可能是,当前浏览器不支持或者不能访问,将计算节点的ip和主机名的对应关系加入到控制节点的/etc/hosts文件中。
& p* o( o3 f" o+ [
, Y9 t7 X3 C9 S  X  c3 ^3 Kb、提示“failed connect to server”
# d3 T6 F% o( H) y; J  _- `/ G, R& }$ x$ {5 t: g7 Q
出现这种错误的情况比较多,有可能是配置文件的错误,我们的环境中遇到这个错误是因为网络源有更新,导致安装版本不一致,使组件无法正常使用,解决方法就是使用本地源。另外需要特别说明的是使用novnc的功能需要浏览器支持Web Socket和HTML5.推荐使用谷歌。" @8 {8 j2 O! _
% v( @8 z5 I) X0 \) \- p. h
10、cinder错误,无法登录dashboard.! U5 {4 q  |6 n! ?
2 M; l0 l+ w. d' Q
出现如下错误:2 J0 q0 L3 U; c' H

+ B/ W5 C! }" |4 q7 m5 k   
8 B1 m( j( T# u  v6 t8 mTypeError at /admin/   F6 ~) c7 q! c; K+ w
hasattr(): attribute name must be string
" W# q5 m& m* E' f  \; i% | ' h( o% X' m1 K6 {' m; \% t
Request Method:   GET
+ z0 \. n5 h( ^  v0 P( L3 a
/ b3 c! Z# c; s% B* y3 URequest URL: http://192.168.80.21/horizon/admin/9 A  D* H. v/ M

; d9 v7 {- [8 eDjango Version:   1.4.5
  _/ w, s( x7 M 8 N/ R% v: v5 i) O, _! e
Exception Type:   TypeError: O; R  r7 E% b4 J2 ?

8 s( J+ ]3 B6 j0 x1 c: \! \0 IException Value: 0 Q3 ~6 ]7 d& F4 x! i3 Q
3 Z& n! P$ I8 c, T) X( H8 @' X
hasattr(): attribute name must be string4 i' M6 [0 n) I# T' O1 h5 ^

+ F( U1 F" ?; h& Y+ X& r' SException Location: /usr/lib/python2.7/dist-packages/cinderclient/client.py in __init__, line 78
) s  X; m. H) L4 y+ E   d& |& q5 H4 C8 L' U4 Y: F1 G
Python Executable:   /usr/bin/python* w& |8 @$ m+ C; ~  g

$ @3 N% {% [5 B4 J* `( PPython Version:   2.7.35 _# ]& p, n8 s  \4 h9 I

9 u3 L" R3 `! c" QPython Path:
6 l* q: P2 y7 Q' o  \! q 4 {( Q# [8 A9 Y& p
['/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../..',
$ ~- [, x  e- ?* b3 w7 P # E: }! {2 e0 n7 o( ^/ Y7 R! p
'/usr/lib/python2.7',
4 R8 ~6 J/ j# J+ J- P/ i9 D: D5 e : d" w$ A3 i; k
'/usr/lib/python2.7/plat-linux2',
& t& Q& ?6 f$ D  k1 T  F
4 \/ }5 P6 F. B# D. X0 F& p, U '/usr/lib/python2.7/lib-tk',& [& b3 _' e+ W- w8 ^& S1 O

# m& J' T6 [4 Q3 C# ]  V1 {5 B# v '/usr/lib/python2.7/lib-old',/ C$ f/ g6 K$ \$ D8 I6 T6 A

7 y) A% X  p% c  I* q '/usr/lib/python2.7/lib-dynload',4 k8 v4 }% c, l* z
" _/ L4 O8 P+ |  K" W' m
'/usr/local/lib/python2.7/dist-packages',5 m) L: S8 A+ K- Y: f$ y

7 j8 }# J4 p1 x$ `( o5 E '/usr/lib/python2.7/dist-packages',4 J" U( x1 a$ O6 T8 W8 R

- T- C3 {( d/ e9 l) g- e' b- d '/usr/share/openstack-dashboard/',
7 \  o$ _( j% z! N ' I' H- ?. L3 {9 E
'/usr/share/openstack-dashboard/openstack_dashboard']/ X7 s* n7 {' d, y+ S

0 t; E% A$ O' J; t" Y5 ~ 1 P$ Q9 `$ b* x5 P3 S* I+ k* T
8 C: J% ^3 \9 `9 a' H1 ?$ O
Server time: Fri, 29 Mar 2013 12:51:09 +0000
0 I7 D" E0 O3 G; v5 N+ } - [4 N1 ~, i! C& l4 S1 T
/ V& e2 [. K8 s7 |8 U" l! W
解决方案3 P* ^% N6 h8 ?+ e. R0 z

) Y+ ]2 p" n+ w" g) k查看 apache2 的 error 日志,报如下错误:$ t9 a7 Z6 B6 k

( w4 B& z2 k$ V% m5 u
/ }- Q7 O, E8 ^0 w* s: HERROR:django.request:Internal Server Error: /horizon/admin/, ]9 v1 q: i! Q! R/ S3 `

# z* a1 Q8 G) b2 E3 pTraceback (most recent call last):, m( e4 I% x/ o# q/ H  f
, R) X, p' M9 `' Z+ e% U  m+ c
  File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py", line 111, in get_response8 I0 O) _) N* @4 N+ [2 j/ R6 W

7 R- s$ d+ b* x1 O1 N3 w4 P    response = callback(request, *callback_args, **callback_kwargs)& C" o' _( ]6 G+ b: m9 E

- d- S( q* V* R1 G" a# j' h  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 38, in dec
! F) {( k: U; f3 \ ! P: C+ t" W; e+ T
    return view_func(request, *args, **kwargs)
, l- u2 Y1 J- I* l, N' E& O ) ?2 c6 M9 B- @% \
  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 86, in dec
; ]% ~5 T) `( L2 p! t, X
1 z2 e+ I1 _2 [8 b0 B6 o* L4 y    return view_func(request, *args, **kwargs)
( n4 y$ M4 Y* }0 u! x4 ^ & t; F* O: [. [- `- A! Z
  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 54, in dec2 `3 o7 v9 u! {' \) A3 E
9 B5 b, h" w" Y' I3 g
    return view_func(request, *args, **kwargs): E' V& X; z  o

$ _% O, S% v3 s0 O4 g- U" W& l  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 38, in dec* h* s3 a; q) v

2 v% N6 j3 q% D) n% e    return view_func(request, *args, **kwargs)- m- \+ |7 @7 L
4 M: \5 z% m; \6 ?- x
  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 86, in dec0 N& m  B' }8 W6 B

! W0 j( D& c! l+ |    return view_func(request, *args, **kwargs)
5 `* Y+ S! B: `! d' i
9 Z9 x- V' u# Q) c  File "/usr/lib/python2.7/dist-packages/django/views/generic/base.py", line 48, in view
, u2 r% P: X2 @5 [) b- H1 p
: f# D; s' i4 i% ?3 @    return self.dispatch(request, *args, **kwargs)
# `- M! o& i# n7 [ 4 c4 ~* ]; o' C9 ]
  File "/usr/lib/python2.7/dist-packages/django/views/generic/base.py", line 69, in dispatch( E* O: e4 g+ z8 \- n- m' ~
/ B9 q: T, v$ N/ A
    return handler(request, *args, **kwargs)
8 c% T; v  l- p ( }4 w) [& u. Z' X$ Y
  File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 155, in get! ?* |0 y! ?3 A5 r9 Q% [5 `
% j" B1 ]2 v( i7 Q2 \9 Z1 T! x  t
    handled = self.construct_tables()9 {  s* T8 x8 ^1 n6 c" W* {) j
% A3 G/ x5 F" h' W0 b" ^' M! J8 Q- n& W
  File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 146, in construct_tables
6 ]2 u* L: l' D! y . n* p' O# C3 R* \8 G1 U* s. J
    handled = self.handle_table(table)' x' s9 e+ n% X
' Q6 o5 f( J" L  L" q9 p2 |
  File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 118, in handle_table& X! A0 m" b. g3 q+ t; L6 S7 k

9 s! `& ?( s& }7 k: X8 G    data = self._get_data_dict()8 I  i* q& P# Q5 U, |: I
& w' N; d: c( C3 [6 h+ y: Y7 W
  File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 182, in _get_data_dict0 }5 ^+ n; m' ]

# |% s! \/ R# l- V. B    self._data = {self.table_class._meta.name: self.get_data()}; R4 B4 N4 B3 h9 g8 P

0 _4 ]7 O8 \+ V/ }3 P  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/dashboards/admin/overview/views.py", line 41, in get_data" C$ H: c  M, a4 t

- a% r$ a( l5 m% u  [1 n! Z    data = super(GlobalOverview, self).get_data()+ \9 s( E+ R1 _8 v! \

9 L) p4 Z; T' @4 c) B# }$ {4 _+ r  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/views.py", line 34, in get_data. W0 ?7 W$ W7 c1 p

! i  W" U" m7 s6 m& U    self.usage.get_quotas()- B, h8 |' I7 I! \# T
7 `; s- R4 b# X% Q2 ]
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/base.py", line 115, in get_quotas
/ Z" U% r5 k! e
' j$ C# B: z: G" }9 N    _("Unable to retrieve quota information."))
0 u5 s- m. c' P2 R! o 8 Y9 m# [" O; Y
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/base.py", line 112, in get_quotas6 b8 v. o. u& s' K
/ B# f. ?" O- Q
    self.quotas = quotas.tenant_quota_usages(self.request)  f. S# s* g- w  W' l
$ J* }9 ~. `3 D  |
  File "/usr/lib/python2.7/dist-packages/horizon/utils/memoized.py", line 33, in __call__
3 [) `9 |. q: z6 e8 n/ `
: F5 I& z+ s: u* k; x    value = self.func(*args)! S+ s( h! \! {2 V% D
4 O$ G% |+ n$ q# k; n
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/quotas.py", line 115, in tenant_quota_usages% Y5 P  E" k7 z
; Y# \8 N. g  q- G+ y3 |
    disabled_quotas=disabled_quotas):
" N  `! R! P3 H! }% R
! v0 {( e0 x0 U1 m0 S  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/quotas.py", line 98, in get_tenant_quota_data# S; d6 A# H3 C. }5 j& T

0 U2 e7 U6 J0 n% O    tenant_id=tenant_id)
2 I( D1 P$ P: N4 X, p0 k
. q- ]# [2 B7 \3 r" t+ p( E( ?  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/quotas.py", line 80, in _get_quota_data8 I& V  o/ x& [! K2 [

2 k) b/ R) @- ]9 ]8 G+ w    quotasets.append(getattr(cinder, method_name)(request, tenant_id))+ I! M7 n; B/ q6 G/ ?0 O

  Q$ J( }' X( z  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/api/cinder.py", line 123, in tenant_quota_get9 K9 ?. Q! q4 x& \
3 q7 Y6 X7 c! `, F5 d. M
    c_client = cinderclient(request)  m: v8 ?( ^( C3 j# ~6 R6 E

/ {# A& q6 {0 J) j  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/api/cinder.py", line 59, in cinderclient. e# t( d2 J7 I: I3 z$ w7 T

, n  t6 K: a1 M1 E    http_log_debug=settings.DEBUG)* `3 d- j9 a# e8 c6 p
8 `, b7 r+ I7 R9 l4 P4 K
  File "/usr/lib/python2.7/dist-packages/cinderclient/v1/client.py", line 69, in __init__
6 E3 R- W! i% o/ W  N- A
& s0 U6 g4 \9 y2 K  A    cacert=cacert)
2 b& M1 r+ g" |" B* }* c
2 m# s+ S" n, z2 v0 D  File "/usr/lib/python2.7/dist-packages/cinderclient/client.py", line 78, in __init__
- X3 ~# D* E" Z9 H0 H; N 9 [% h. L+ Q7 Y4 C+ g9 x% Z
    if hasattr(requests, logging):( m: P1 d' k6 v
- G! E8 J1 I4 g, n
TypeError: hasattr(): attribute name must be string
( d+ N) r  O+ ~: Z+ X; w9 h- f
/ I3 }1 z/ {: e+ T! |! O: F$ M; H: o* n+ \4 a- ?+ E9 E
错误信息中指出了 Cinderclient 的 client.py 中 78 行 hasattr() 方法的属性必须是一个字符串。8 g/ n8 ~+ `8 V1 |! Y0 T
修改代码:: R, ~, C" T) ~, A6 i

5 G4 p  X; z9 q7 r# }, f 4 j% Q( S1 x/ u: `' n4 i" K- W

" W9 R" C' B: v7 J0 L# vim /usr/lib/python2.7/dist-packages/cinderclient/client.py& t4 ]- v/ Z5 a/ R2 S$ h" ^

# G" J  S" D5 _' |: X9 i 78 if hasattr(requests, logging): # 改为 : if hasattr(requests, 'logging'):
3 I1 z3 u! q% z9 U' w" ^
3 L) e4 C- y6 ^" `. w# p) x/ S8 v' ~ 79 requests.logging.getLogger(requests.__name__).addHandler(ch)
+ e" d+ z$ o* k
" L8 ?% w( ]3 \; l9 _  E0 t) M. r& T  `+ F
重新启动 apache2 :! v  I9 p6 b  O2 i' [7 Q$ x. n
/ e. J% X6 c4 s! }3 L- Y
/etc/init.d/apache2 restart. D( C& p6 V8 m: D! \$ \
4 f( w# A1 `. f  N( y
这次访问 dashboard 没有报错,尝试创建 volume 也没有问题了。2 a  q* Y. L  V+ F, O4 N" X

$ B- x# o4 K. k11、Unable to attach cinder volume to VM
) {, }% X7 \* n
+ ^. i/ i: F4 |3 U9 V3 J! O     在测试openstack中的volume服务时把lvm挂载到虚拟机实例时失败,这其实不是cinder的错误,是iscsi挂载的问题。
7 [$ U. t# d6 M6 c# x' K  ~, g2 v" G# d
以下是计算节点nova-compute.log 的错误日志:; q1 m8 _  H4 k# C( z, s
4 {  x6 X% g, P- b& q* u" w
2012-07-24 14:33:08 TRACE nova.rpc.amqp ProcessExecutionError: Unexpected error while running command.
: B$ J4 `0 \$ u# h6 U2012-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' w8 H" Z" ~7 v* H" T3 G
2012-07-24 14:33:08 TRACE nova.rpc.amqp Exit code: 255; |( S0 ?5 G) q5 |; \0 j) ?; H
2012-07-24 14:33:08 TRACE nova.rpc.amqp Stdout: ”
& P% w# }3 _& r  `+ Z% k2012-07-24 14:33:08 TRACE nova.rpc.amqp Stderr: ‘iscsiadm: No portal found.\n’1 v, U/ g+ b* K( P+ I3 w5 T# j( J
* ~6 U6 \1 t# `5 N* P9 ]$ @, q
  o  Q( U6 H6 ^- Q- j
. t4 f- D8 F$ @# C
以上错误是没有找到iscsi服务端共享出的存储,查找了很多openstack 资料说要添加以下两个参数:  s( K4 E* q! x

/ o5 ^3 n: X' P3 w1 c, }% C. kiscsi_ip_prefix=192.168.80 #openstack环境内网段- h0 `+ Q) N7 h. }7 B4 P- Q: S3 B9 ^
! T0 ?# c, z8 n6 y
iscsi_ip_address=192.168.80.22 # volume机器内网IP
5 }7 u6 u6 N; d0 t& w, F% v; Q  c) B4 O& E" F3 T1 P
可是问题依然无法解决,后来发现只要在nova.conf配置文件中添加参数iscsi_helper=tgtadm 就挂载失败。
6 \; l( z3 j9 n; C; K  N' C% m  ?( d0 o& U# z4 D9 K+ K+ W& n' X
根据这个情况进行了测试查看日志才发现:如果使用参数 :iscsi_helper=tgtadm 时就必须使用 tgt 服务,反之使用iscsitarget服务再添加参数iscsi_helper=ietadm。
3 k- c& I- @; y# L# f5 c. z2 c' P$ I5 K  H: w
我测试环境的问题是tgt和iscsitarget服务都已安装并运行着(在安装nova-common时会把tgt服务也安装上,这个不小心还真不会发现),在nova.conf配置中添加参数iscsi_helper=tgtadm ,查看端口3260 发现是iscsitarget服务占用,所以导致挂载失败,我们可以根据情况来使用哪个共享存储服务!!将tgt 和iscsi_helper=tgtadm、iscsitarget和iscsi_helper=ietadm保留一个即可。+ `3 {4 G9 u% V9 \: z

/ o  D) X; M7 ~7 G7 l  S( }/ B12、glance index报错:
; R5 Y4 E1 D6 ]# _9 p4 U% a
( s! y5 M9 d4 F+ p5 XAuthorization 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( M! w# d) H% D+ b
& s7 S% ]& d, z# O% j/ c: @& |2 {7 X8 }! n
在 Grizzly 版,我测试 glance index 时候报错:
0 c" o/ C6 S" A- }! U+ D
/ F5 }" r7 A+ P9 r( VAuthorization 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): x3 c* i6 y* ?: B1 w( z
错误信息指出:glance 没有通过keystone验证,查看了 keystone 日志,报错如下:% u8 z- X" x$ I! g

9 c) k; n# t* _7 m: W" I" u5 ]  n2677 2013-03-04 12:40:58    ERROR [keystone.common.cms] Signing error: Error opening signer certificate /etc/keystone/ssl/certs/signing_cert.pem
9 i( C8 I) `- f% V$ p& F) i2678 139803495638688:error:02001002:system library:fopen:No such file or directory:bss_file.c:398:fopen('/etc/keystone/ssl/certs/signing_cert.pem','r')/ W$ h4 n' |) n( C# _- D1 }6 B
2679 139803495638688:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:400:
! p2 M6 G: n! w. `3 n: c3 n2680 unable to load certificate! S8 E! Q' K4 n* I3 k
2682 2013-03-04 12:40:58    ERROR [root] Command 'openssl' returned non-zero exit status 3
8 `9 X1 k+ R6 G/ ?0 k* U2683 Traceback (most recent call last):
- N8 M! K  k" d0 J; ~- J( H2684   File "/usr/lib/python2.7/dist-packages/keystone/common/wsgi.py", line 231, in __call__
" e% T* g# m, I7 Y9 T2685     result = method(context, **params)
( O7 v6 K8 Y- m7 v7 P2686   File "/usr/lib/python2.7/dist-packages/keystone/token/controllers.py", line 118, in authenticate
0 w# J* x4 t5 u# f. d% j: B& Q* x% h3 L* o2687     CONF.signing.keyfile)
) Q. X/ o5 \9 K3 D$ W# b+ G( @; l2688   File "/usr/lib/python2.7/dist-packages/keystone/common/cms.py", line 140, in cms_sign_token0 \4 Y. j9 o4 O% U) i, |$ ^
2689     output = cms_sign_text(text, signing_cert_file_name, signing_key_file_name)8 L2 T  C- c2 j4 }% A
2690   File "/usr/lib/python2.7/dist-packages/keystone/common/cms.py", line 135, in cms_sign_text
( E# m, V( m: c1 A) \2691     raise subprocess.CalledProcessError(retcode, "openssl")
6 K0 C( r" c& V  p2692 CalledProcessError: Command 'openssl' returned non-zero exit status 34 w1 A. l# V9 U& ~, o- u
在Grizzly 版中,keystone 默认验证方式是 PKI , 需要签名证书,之前的版本都是用的 UUID,改 keystone.conf:1 E/ d. f( K2 U- C( s0 A1 h& g

8 r) e; O0 A8 I# _6 ~" Dtoken_format = UUID
% Y* U1 C1 e2 t2 s- W7 [在试一次就没有错误了。/ z9 r  |) `; e' Q- f, e
  g9 I& R( Q3 c6 Z- g
13、镜像制作
$ ?* G' c) j1 J& p
) `5 E. U6 w/ M' }$ ]! G8 v这里主要强调下windows的镜像制作,因为windows的涉及到加载驱动的问题,就比较麻烦。4 w8 o# e* r0 N+ s0 k
7 v, g0 G% b- M" A1 v! k
下载virtio驱动,因为win默认不支持virtio驱动,而通过openstack管理虚拟机是需要virtio驱动的。需要两个virtio驱动,一个是硬盘的,一个是网卡的,即:virtio-win-0.1-30.iso和virtio-win-1.1.16.vfd。这里主要强调两个地方:
9 ?1 f" C) _# X0 {+ D0 |7 t& m. l/ s
1、创建镜像: ( e& a# {; T6 e& z
. ^5 X! _  l0 @" @$ _
kvm -m 512 -boot d –drive; s4 E3 g" U- \

( V+ N; f* y/ o% yfile=win2003server.img,cache=writeback,if=virtio,boot=on -fda virtio-win-1.1.16.vfd -cdrom windows2003_x64.iso -vnc:10                   " Y5 V- u7 K9 E7 Q: C, z* N( C

5 }% Q3 t: Q# a) n- {4 @9 z8 e/ j  J
2、引导系统 :4 m3 F4 u$ v: ]. h% Y
" N7 e8 w9 V  A' K9 }4 ~
kvm -m 1024 –drive file=win2003server.img,if=virtio,
/ M; R/ v+ s/ ~) k( ]1 z9 l. W 7 u% ?' N' t8 V
boot=on -cdrom virtio-win-0.1-30.iso -net nic,model=virtio -net user -boot c -nographic -vnc 80 x0 d& {% p# }! W4 F

5 J$ S% B8 A# @3 @2 }$ ]& A' L* V$ i7 }8 A, h
这里需要注意的地方是if=virtio,boot=on –fda virtio-win-1.1.16.vfd和引导系统时使用的virtio-win-0.1-30.iso 这两个驱动分别是硬盘和网卡驱动。如果不加载这两个驱动安装时会发现找不到硬盘,并且用制作好的镜像生成实例也会发现网卡找不到驱动,所以在这里安装镜像生成后需要重新引导镜像安装更新网卡驱动为virtio。' j' y; {: a3 ?1 Y4 }

2 D7 r6 o- m! i4 U9 f14、删除僵尸volume( c- p9 R. W7 i, R
* [" n" H; }! o) S* L6 o9 l9 v
如果cinder服务不正常,我们在创建volume时会产生一些僵尸volume,如果在horizon中无法删除的话,我们需要到服务器上去手动删除,5 h9 p% [5 P' ]: w1 w& N
5 x6 }! Y! }" e, b1 x
命令:lvremove /dev/nova-volumes/volume-000002* A# y+ c# @; A' J8 x
; e1 G% B; t) J9 I
注意这里一定要写完整的路径,不然无法删除,如果删除提示:# A4 b. @; z/ ?) B4 @4 k

/ K+ g9 Q. `* T1 Z9 ~0 d0 d“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模 式。8 l$ O6 |: n0 j
3 v. m4 X' ^6 A+ f
到了Grizzly版本,quantum组件才比较稳定,可以正常使用,自己也花了很多时间研究,现在已可以成功部署多节点环境。以下是部署过程中遇到的 一些问题,包括Essex和Grizzly两个版本。国内网上关于这方面的资料很少,很多资料也都是国外网站上看到的。而且很多情况下日志错误信息相同, 但导致错误的原因却不尽相同,这时候就需要仔细分析其中的原理,才能准确定位。遇到错误并不可怕,我们可以通过对错误的排查加深对系统的理解,这样也是好 事。- ?9 Q# k# ^0 g8 }3 [. \, m) b" n

! E* G  ^8 _, F9 ~' k5 u关于安装部署,网上有一些自动化的部署工具,如devstack和onestack,一键式部署。如果你是初学者,并不建议你使用这些工具,很明显,这样 你学不到任何东西,不会有任何收获。如果没有问题可以暂时恭喜你一下,一旦中间环节出现错误信息,你可能一头雾水,根本不知道是哪里错了,加之后期的维护 也是相当困难的。你可能需要花更多的时间去排查故障。因为你根本不了解中间经过了哪些环节,需要做哪些配置!这些工具大多数是为了快速部署开发环境所用, 正真生产环境还需要我们一步一步来操作。这样有问题也可快速定位排查错误。
( H$ Y- E4 }! i0 k+ V! d4 b2 Y8 T
本文仅是针对部署过程中的一些错误信息进行总结梳理,并给予解决办法,这些情况是在我的环境里遇到的,并成功解决的,可能会因为环境的不同而有所差异,仅供参考。
+ Q: V/ R, s" D. ~
1 o4 k, j0 N* m) Y5 B" _: P1、检查服务是否正常/ C% p( ^% i- {8 n% c
" n8 e8 T# ]+ A; T  j1 k9 ~
root@control:~# nova-manage service list3 @, X& b# ^% H4 c6 i( A7 m. k
; l, s" x, E7 X" `1 k
Binary           Host                                 Zone             Status     State Updated_At. \* J" k$ r6 _0 w& ?

) s9 d" s* K( d4 ]3 snova-cert        control                              internal         enabled    :-)   2013-04-26 02:29:44
9 Y, T9 s: m. }! Z6 I' V
9 h7 {3 S4 z5 [' ?' q* ynova-conductor   control                              internal         enabled    :-)   2013-04-26 02:29:42
4 ^* ?! `; o# T( F6 i4 `3 `/ `5 R& W# W; F" n
nova-consoleauth control                              internal         enabled    :-)   2013-04-26 02:29:44
, l& F2 T! ^9 @+ f$ D0 F: a. n0 o8 t' F$ [0 E4 O, Q. l; O. X6 C1 @
nova-scheduler   control                              internal         enabled    :-)   2013-04-26 02:29:47- E  ?" e: f; \3 n6 B8 u

, D! w9 j* V- c% C. m5 W8 I& L3 p( Fnova-compute     node-01                              nova             enabled    :-)   2013-04-26 02:29:46
( T$ v) C  {- o! d1 A& }% c* U
7 t: V# R; w5 n% mnova-compute     node-02                              nova             enabled    :-)   2013-04-26 02:29:46* W+ |1 s- K* X  i! y
& i! a1 p( C! ~4 y' b3 o3 D4 g2 j+ [
nova-compute     node-03                              nova             enabled    :-)   2013-04-26 02:29:42  y2 W: L+ b/ t* O( i$ u
复制代码% ]3 W% N! Z6 G: j* q
如果看到都是笑脸状态,说明nova的服务属于正常状态,如果出现XXX,请查看该服务的相关日志信息,在/var/log/nova/下查看,通过日志一般可以分析出错误的原因。3 N6 E+ f* v$ d5 c) d* |+ A+ z2 |

7 P1 B7 c+ ?: H0 D$ s+ n$ }1 z3 j, a. s* H
2、libvirt错误
$ Q" z/ C: Q  ^9 p# n. Bpython2.7/dist-packages/nova/virt/libvirt/connection.py”, line 338, in _connect* Z# i8 ?5 r2 M3 Y* W( n* {
2013-03-0917:05:42 TRACE nova return libvirt.openAuth(uri, auth, 0)
$ G+ \* C: e  S; Q2013-03-09 17:05:42 TRACE nova File “/usr/lib/python2.7/dist-packages/libvirt.py”, line 102, in openAuth) g+ G( Q9 ^7 E/ M* [1 p
2013-03-09 17:05:42 TRACE nova if ret is None:raise libvirtError(‘virConnectOpenAuth() failed’)' @) [$ M; x1 T9 W+ I6 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
+ s3 `" Y  A: H) |2013-03-09 22:05:41.909+0000: 12466: info : libvirt version: 0.9.8
; t5 F* t# o3 G* z3 f2013-03-09 22:05:41.909+0000: 12466: error : virNetServerMDNSStart:460 : internal error Failed to create mDNS client: Daemon not running. o/ ?! k5 o% _7 q6 b* F9 }. z( b, E
复制代码
4 [) K  [  u4 C  H2 j  u0 K解决方案:5 Q! Q: X, W/ H3 u7 n, h
出现这种错误首先要查看/var/log/libvirt/libvirtd.log日志信息,日志里会显示:libvirt-bin service will not start without dbus installed.
9 q1 |$ b" [+ _8 ^/ i我们再查看ps –ea|grep dbus,确认dbus is running,然后执行apt-get install lxc$ T/ D; ~( v! m8 K& ^
$ u' P2 L2 i) |/ i7 T# y
5 ~7 Z+ ]1 u# B2 r0 P+ R/ t
3、Failed to add image
! g3 h% j' Z3 y6 q( f& WError:+ q* \" q$ z- o5 R$ R5 O- f# }
Failed to add image. Got error:
The request returned 500 Internal Server Error
' j6 q, ~  P' Z% a3 E7 F复制代码
# n6 H# f' Q' `8 Q
! ?% b, P' k- k2 q. ]1 K1 i; O( x) t7 [! @/ x9 J6 i) Q* B
解决方案:
  y) `5 j  [. G1 ^2 s" j8 A环境变量问题,配置环境变量,在/etc/profile文件中新增:7 p; ]" {9 \5 A7 t+ c
+ t6 _+ T' k$ f; a5 U3 d

! y2 ]' G: d$ n1 bOS_AUTH_KEY=”openstack” , H3 m3 N3 l, S$ B! `
OS_AUTH_URL=”http://localhost:5000/v2.0/”
# {7 S# I' o1 l& w3 D. MOS_PASSWORD=”openstack”
+ ]  y7 \( N# q; _) K) oOS_TENANT_NAME=”admin”
6 Z" n; V* ]% y/ E  h+ P0 d2 uOS_USERNAME=”admin”
6 l, |. r. V8 ]' L3 L) p复制代码
: r% ^9 r! c7 [4 S4 P% ]$ p; A: O* \然后执行source  /etc/profile即可!当然你也可以不在profile里配置环境变量,但是只能临时生效,重启服务器就很麻烦,所以建议你还是写在profile里,这样会省很多麻烦。
9 I2 E, L, [) D1 W4 k( a 7 v# k1 ^* s! Q; N5 C6 H

/ F. _5 o" f% M8 R4、僵尸实例的产生9 F7 u& b: ~/ ]) A  b8 O
僵尸实例一般是非法的关闭nova或者底层虚拟机,又或者在实例错误时删除不了的错误,注意用virsh list检查底层虚拟机是否还在运行,有的话停掉,然后直接进入数据库删除。
' e# m, h5 K% }0 }Nova instance not found3 B3 ]! \! c; }, n: \
* ~( l$ Y0 s1 k- L7 x% }6 P2 H
Local file storage of the image files.
, n8 I& U5 N1 o1 q( _. m% u  p9 P/ T& r' }; \: D; Q3 _/ O
Error:
0 F4 x% `0 z* O2013-03-09 17:58:08 TRACE nova raise exception.InstanceNotFound(instance_id=instance_name)
& J* E8 @  O: Q6 L+ l: X2013-03-09 17:58:08 TRACE nova InstanceNotFound: Instance instance-00000002 could not be found.
2 w+ D% L* u* O+ E0 [# Q2013-03-09 17:58:08 TRACE nova( t; b5 W! Z& w/ ~4 C( T
复制代码, l* M3 a8 ]& d; A
解决方案:& B4 J( C: V; a. m- g5 ^
删除数据库中的僵尸实例或将数据库删除重新创建:+ c8 _0 W8 w' O, g3 m5 h( Y
a、删除数据库:
* V6 T" u, c+ y- P8 D+ ~  B' v$mysql –u root –p3 g8 o: I2 l0 ^% U
DROP DATABASE nova;0 [2 t* Z- }9 t/ J. h7 v  U6 ~

7 N, b! p9 T& j6 K' D7 a8 XRecreate the DB:
  k5 J. f8 J3 e* k1 A- A% e9 WCREATE DATABASE nova; (strip formatting if you copy and paste any of this)
7 j7 b4 I1 \/ E3 H3 hGRANT ALL PRIVILEGES ON nova.* TO ‘novadbadmin’@'%’ IDENTIFIED BY ‘<password>’;
2 u0 S+ x% _8 \7 t( I4 t, {Quit9 F+ F$ x' h/ r
5 p) g4 T5 e4 ~% i' q2 J- Q
Resync DB
/ L: }7 V# K( p# B复制代码
. X4 t8 [/ @! k" h' M. @& zb、删除数据库中的实例:5 p' C0 R7 g- z, A+ @4 ?
#!/bin/bash
! C1 K5 W. Q! o- x0 [9 e( }. X3 v) x8 ?7 n, A2 w+ o; H
mysql -uroot -pmysql << _ESXU_
4 d9 Q  ~$ N0 S0 |/ c  s) B0 A2 R& U; T( y' K
use nova;! u9 |# {' \4 J$ w/ s
9 u. R7 X3 N! S' I. n! s7 p
DELETE a FROM nova.security_group_instance_association
, b; n. G7 \; r- a) o% e! u1 \4 G# ?. U, b/ S+ \
AS a INNER JOIN nova.instances AS b' C; j& {+ J- j. I9 d

3 w# i3 X" R9 \9 a; v$ CON a.instance_uuid=b.id where b.uuid='$1';
  |, b- ]" D% j( R/ u5 S7 L; _1 Q: R
DELETE FROM nova.instance_info_caches WHERE instance_uuid='$1';5 o' g- o2 K" [$ W0 h- b

( q7 ?; ]7 e% BDELETE FROM nova.instances WHERE uuid='$1';4 J% y8 d& I3 `* m* S: f9 o  g

9 k: `/ }  F: X9 f1 H  p* a_ESXU_1 P* X2 V# l/ a2 b' }7 m
复制代码" N* o  y& W) z+ @! K$ m
将以上文件写入delete_insrance.sh中,然后执行sh delete_instrance.sh insrance_id;7 X/ q, H* }+ `
其中instrance_id可以通过nova list 查看。8 t: I) q2 L5 w' K5 K; l& V

! Y5 w: x: B2 F& B2 U7 D7 w0 E: |/ V5 o( [. S$ q
5、Keystone NoHandlers
( Q$ Q! x5 P/ K& N6 g4 z" t
# d  a! m! o1 |) p; fError  
7 s4 T& _% P! B2 C$ v0 D; kroot@openstack-dev-r910:/home/brent/openstack# ./keystone_data.sh  
- s. ?/ y7 j4 ^' n1 ?( PNo handlers could be found for logger “keystoneclient.client”  9 Z7 N- N7 i7 S; \' N$ d
Unable to authorize user  
/ @; d) G3 D9 B3 S6 m0 oNo handlers could be found for logger “keystoneclient.client”  3 ]/ {" O6 t5 l# m& ?1 S
Unable to authorize user  / d0 [' j) N7 i$ x* r
No handlers could be found for logger “keystoneclient.client”  5 t3 M( ]9 P% u- f" y; i
Unable to authorize user  
# [; W. x* V/ v8 k; h复制代码* V! t1 [! Y, N5 `$ ?9 p9 K. S% N

5 V8 j. a6 c2 R5 Y2 g( t: }9 H" B
+ X* S  ~; X; `# e+ v& D9 ?/ P解决方案:
2 H" |9 ]0 e; w7 h& H8 d出现这种错误是大多数是由于keystone_data.sh有误,其中$ o6 {2 P) Y! Q, V
admin_token必须与/etc/keystone/keystone.conf中相同。然后确认keystone.conf中有如下配置:
" H. i* m- R1 T9 v) Z( j. |driver = keystone.catalog.backends.templated.TemplatedCatalog template_file = /etc/keystone/default_catalog.templates
+ @& {, ?+ B* n' a* L! Q1 T % M" W# m! r: x5 R" B

5 m. Y% V2 \8 j8 @% p3 L" g6、nova-compute挂掉与时间同步的关系, M2 Z" [. }/ a. \( L" s
很多时候发现nova-compute挂掉,或者不正常了,通过nova-manage查看状态是XXX了。
* P1 d, Y' u3 X往往是nova-compute的主机时间和controller的主机时间不一致。 nova-compute是定时地往数据库中services这个表update时间的,这个时间是nova-compute的主机时间。. }  j# {: t2 u* y. c* X
controller校验nova-compute的存活性是以controller的时间减去nova-compute的update时间,如果大于多少秒(具体数值代码里面有,好像是15秒)就判断nova-compute异常。
% m# m: [5 g, Y7 G* D这 个时候你用nova-manage查看nova-compute状态是XXX,如果创建虚拟机,查看nova-scheduler.log 就是提示找不到有效的host 其他服务节点类同,这是nova心跳机制问题。所以讲nova环境中各节点时间同步很重要。一定要确保时间同步!!1 ?5 y5 U, q( v9 \! M7 X2 O
如果在dashboard上看nova-compute状态,可能一会儿变红,一会儿变绿。那就严格同步时间,或者找到代码,把上面的那个15秒改大一点。
2 `4 n# P) b- P7 Y
3 ^0 F- W8 _* ?
& q1 N2 u+ [9 }" R7、noVNC不能连接到实例( y8 F( }* W, h, y
novnc的问题比较多,网上也有关于这方面的很多配置介绍,其实配置不复杂,只有四个参数,配置正确基本上没什么大问题,但是装的过程中还是遇到了不少的问题。  O2 z8 q* }5 H
a、提示“Connection Refuesd”4 N& A+ s9 I& X& L
可能是控制节点在收到vnc请求的时候,无法解析计算节点的主机名,从而无法和计算节点上的实例建立连接。/ f- D  @, {7 B, f/ U' c+ T
另外可能是,当前浏览器不支持或者不能访问,将计算节点的ip和主机名的对应关系加入到控制节点的/etc/hosts文件中。  Y( C7 l+ T. k' d) H0 {  W
b、提示“failed connect to server”% r8 ]# N6 k+ q" S
出 现这种错误的情况比较多,有可能是配置文件的错误,我们的环境中遇到这个错误是因为网络源有更新,导致安装版本不一致,使组件无法正常使用,解决方法就是 使用本地源。另外需要特别说明的是使用novnc的功能需要浏览器支持Web Socket和HTML5.推荐使用谷歌。
6 Q: a- f. w/ I5 j2 \& q 7 J/ i) F6 d6 T' Z

9 z# q# a/ `, @+ |2 X" d$ ?8、Unable to attach cinder volume to VM& _3 h# P# W6 o4 V! F! R1 K
     在测试openstack中的volume服务时把lvm挂载到虚拟机实例时失败,这其实不是cinder的错误,是iscsi挂载的问题。3 H  m' p0 y+ c! K
以下是计算节点nova-compute.log 的错误日志:5 r% p6 N+ j* d  `6 `0 \6 c
2012-07-24 14:33:08 TRACE nova.rpc.amqp ProcessExecutionError: Unexpected error while running command.
: L& a: a! e7 `  @5 H! p2012-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
: Z$ Y2 b/ o: c" Y% d; n! q2012-07-24 14:33:08 TRACE nova.rpc.amqp Exit code: 255
( y0 a* `! Z1 X9 v; o" v* W2012-07-24 14:33:08 TRACE nova.rpc.amqp Stdout: ”
0 z1 m+ I9 W2 @5 c3 \" M2012-07-24 14:33:08 TRACE nova.rpc.amqp Stderr: ‘iscsiadm: No portal found.\n’
6 p7 ]) f, ~% T复制代码
" s( @7 F  `) c3 g5 r- `以上错误是没有找到iscsi服务端共享出的存储,查找了很多openstack 资料说要添加以下两个参数:) H# U9 b, [! }2 I5 t
iscsi_ip_prefix=192.168.80 #openstack环境内网段% I& Z( i) z$ h, m
iscsi_ip_address=192.168.80.22 # volume机器内网IP/ ^' T) u6 R# \0 c& q8 a
可是问题依然无法解决,后来发现只要在nova.conf配置文件中添加参数iscsi_helper=tgtadm 就挂载失败。4 ?3 c- B7 q. j+ s
根据这个情况进行了测试查看日志才发现:如果使用参数 :iscsi_helper=tgtadm 时就必须使用 tgt 服务,反之使用iscsitarget服务再添加参数iscsi_helper=ietadm。3 H: ]8 S  G( `7 X3 Y7 O9 W
我 测试环境的问题是tgt和iscsitarget服务都已安装并运行着(在安装nova-common时会把tgt服务也安装上,这个不小心还真不会发 现),在nova.conf配置中添加参数iscsi_helper=tgtadm ,查看端口3260 发现是iscsitarget服务占用,所以导致挂载失败,我们可以根据情况来使用哪个共享存储服务!!将tgt 和iscsi_helper=tgtadm、iscsitarget和iscsi_helper=ietadm保留一个即可。
6 L) [* |9 @  o& X  x& a5 [ # V# M) A4 p- F
* C% ^! x1 e: N
9、glance index报错:8 d% _7 S& |/ l
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)
( Z4 l) Y( t) m: r; z9 o: c7 F. o复制代码9 J/ U/ b; Y1 y
在 Grizzly 版,我测试 glance index 时候报错:8 S% ^/ s$ @- ?7 O6 q3 {
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)
: [) u! ]$ z) Q
/ _- Z3 s- @$ U3 B' f# ~" O错误信息指出:glance 没有通过keystone验证,查看了 keystone 日志,报错如下:
/ H6 M5 e7 q5 h# ~2 f3 }( }3 P' D2677 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" v, M& m% ]" G. O4 n& N
5 \6 x6 _5 Z! d* g+ P- p
在Grizzly 版中,keystone 默认验证方式是 PKI , 需要签名证书,之前的版本都是用的 UUID,改 keystone.conf:
% |" Z- [2 g  u6 ^) Gtoken_format = UUID
1 I. s+ z/ G6 d+ J  t# l0 {, @& Q. h" |4 q
在试一次就没有错误了。& C4 S) p1 N2 |0 l

, G* B* z/ N9 H9 {  e  Z! H
- ~. ^" }( o/ |10、镜像制作
5 [6 {6 f% q  E9 Y这里主要强调下windows的镜像制作,因为windows的涉及到加载驱动的问题,就比较麻烦。+ B- d2 y1 P7 X" [6 r
下载virtio 驱动,因为win默认不支持virtio驱动,而通过openstack管理虚拟机是需要virtio驱动的。需要两个virtio驱动,一个是硬盘的, 一个是网卡的,即:virtio-win-0.1-30.iso和virtio-win-1.1.16.vfd。这里主要强调两个地方:# z: h* {8 u5 x+ ]9 n
1、创建镜像:
9 E6 {- j8 \5 K$ T  ^kvm -m 512 -boot d –drive  3 C# p8 ?, v- n) @
  
. |# @2 d* y; l- a. w; q# Kile=win2003server.img,cache=writeback,if=virtio,boot=on -fda virtio-win-1.1.16.vfd -cdrom w
0 r' R: h4 j- g+ K0 C8 R8 q1 T7 Z复制代码
# ~! M7 }! {5 n% g4 y7 D4 R( {& M5 [0 U5 h. w

' E3 i7 E, u4 q! U8 S6 A+ r* j* a8 k6 F# h" e# l
3 O5 ]1 Z! t; Z3 T: S# v4 @
2、引导系统 :0 D# y4 z, J' O& _8 _
kvm -m 1024 –drive file=win2003server.img,if=virtio,
5 v+ `6 H- T- {$ M
2 Q1 ]+ ]1 G( L+ Pboot=on -cdrom virtio-win-0.1-30.iso -net nic,model=virtio -net user -boot c -nographic -vnc 8
* j, ~1 f  v& y0 q5 ^% [8 S1 n复制代码/ O0 `6 ^- ~. `; I6 U3 w
这 里需要注意的地方是if=virtio,boot=on –fda virtio-win-1.1.16.vfd和引导系统时使用的virtio-win-0.1-30.iso 这两个驱动分别是硬盘和网卡驱动。如果不加载这两个驱动安装时会发现找不到硬盘,并且用制作好的镜像生成实例也会发现网卡找不到驱动,所以在这里安装镜像 生成后需要重新引导镜像安装更新网卡驱动为virtio。
9 ^7 R( y: k) o" F. Y8 @% d
- ^$ J( @. ?% \4 ~' A4 x% s& J, p11、删除僵尸volume+ C' a: W0 h- T% q0 v/ m6 a
( T* {$ E0 e3 L& H& t. |

! I5 F, _6 J- }+ W. M如果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:52 , Processed in 0.018471 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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