易陆发现互联网技术论坛

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

openstack常见错误

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

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

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

x
以下主要为安装部署过程中遇到的一些问题,因为openstack版本问题,带来的组件差异导致不同的版本安装的方法也完全不一样。经过测试,目前已可成功部署Essex和Grizzly两个版本,其中间还有个版本是Folsom,这个版本没有部署成功,也没有花太多时间去研究,因为Folsom版本中使用的quantum组件还不成熟,对于网络连通性还有很多问题,网上也很少有成功的案例,大多数人使用的还是folsom+nova-network模式。) P2 y$ G; d* B( q. H6 c
1 I2 C% s& F* w8 |
到了Grizzly版本,quantum组件才比较稳定,可以正常使用,自己也花了很多时间研究,现在已可以成功部署多节点环境。以下是部署过程中遇到的一些问题,包括Essex和Grizzly两个版本。国内网上关于这方面的资料很少,很多资料也都是国外网站上看到的。而且很多情况下日志错误信息相同,但导致错误的原因却不尽相同,这时候就需要仔细分析其中的原理,才能准确定位。遇到错误并不可怕,我们可以通过对错误的排查加深对系统的理解,这样也是好事。7 F6 F4 f, z( F9 G6 V0 z1 k- {
! |# G2 {  Y- }) }0 l5 k& z" D
关于安装部署,网上有一些自动化的部署工具,如devstack和onestack,一键式部署。如果你是初学者,并不建议你使用这些工具,很明显,这样你学不到任何东西,不会有任何收获。如果没有问题可以暂时恭喜你一下,一旦中间环节出现错误信息,你可能一头雾水,根本不知道是哪里错了,加之后期的维护也是相当困难的。你可能需要花更多的时间去排查故障。因为你根本不了解中间经过了哪些环节,需要做哪些配置!这些工具大多数是为了快速部署开发环境所用,正真生产环境还需要我们一步一步来操作。这样有问题也可快速定位排查错误。5 }6 V/ V8 _! s4 N7 Y

- w  D. a5 j$ l3 r# _  k" j本文仅是针对部署过程中的一些错误信息进行总结梳理,并给予解决办法,这些情况是在我的环境里遇到的,并成功解决的,可能会因为环境的不同而有所差异,仅供参考。
2 S, r4 F. b% k* k2 R, _1 V( h
% S1 Z/ X- Q" b& R7 U* r+ j( s1、检查服务是否正常:$ n9 E% B' T0 V( x0 t% g, W3 |* @& K
! z- B0 d6 S/ n7 V. G( J& A6 @
root@control:~# nova-manage service list6 k* j4 |. C' H% p3 S
0 B; A, C9 E5 x8 B, I7 [' @
Binary           Host                                 Zone             Status     State Updated_At
2 r! K* Z2 B, O8 ]& F- y8 a * Q  _) Y5 X2 _7 F) U3 h+ e% \
nova-cert        control                              internal         enabled    :-)   2013-04-26 02:29:44# ^6 h  ]5 w" |
1 p  a; ?, L6 v1 c8 b
nova-conductor   control                              internal         enabled    :-)   2013-04-26 02:29:42  i: h+ Q" R# c1 w, g/ k' R
" x3 y$ c( ~, {# z* M
nova-consoleauth control                              internal         enabled    :-)   2013-04-26 02:29:44
! h( C, m' b0 g5 I' ^ 9 U" \  E) c  O3 I! t0 ^( Z
nova-scheduler   control                              internal         enabled    :-)   2013-04-26 02:29:47# v% I' ~. E. P" z

# a3 M8 I- M( x* Knova-compute     node-01                              nova             enabled    :-)   2013-04-26 02:29:46* w' y! `: C" G3 {6 c+ w& M
- G7 y: m1 `' m$ Z. d8 g: O, m
nova-compute     node-02                              nova             enabled    :-)   2013-04-26 02:29:462 ^  V7 f: {9 d, A0 \2 `. K

+ I$ l+ q5 f, `& onova-compute     node-03                              nova             enabled    :-)   2013-04-26 02:29:42
; x5 S" @  ^: ?/ x4 l
+ Z9 a$ \' L2 G  |/ m+ M* E8 e3 I, M1 ^
如果看到都是笑脸状态,说明nova的服务属于正常状态,如果出现XXX,请查看该服务的相关日志信息,在/var/log/nova/下查看,通过日志一般可以分析出错误的原因。* ]& }* [- j- r4 a$ z% v0 d
* ?3 l- V- _* z9 ~+ l
2、libvirt错误, [$ L1 j- U3 x0 }8 l4 ~& d

% Z4 z( a& N  V ( i0 l' ?' n) `3 k! O8 j9 M% R

$ M& z; B4 _4 c, K5 ]+ n& spython2.7/dist-packages/nova/virt/libvirt/connection.py”, line 338, in _connect
! g  t5 F$ ?, O$ p! a( R2013-03-0917:05:42 TRACE nova return libvirt.openAuth(uri, auth, 0)+ L4 _' W3 x6 a5 S, t4 C2 m
2013-03-09 17:05:42 TRACE nova File “/usr/lib/python2.7/dist-packages/libvirt.py”, line 102, in openAuth
" T# x* `. C" r' p2013-03-09 17:05:42 TRACE nova if ret is None:raise libvirtError(‘virConnectOpenAuth() failed’)3 k4 F6 O3 L+ r
2013-03-09 17:05:42 TRACE nova libvirtError: Failed to connect socket to ‘/var/run/libvirt/libvirt-sock’: No such file or directory
8 `$ y9 c5 ]; h# t6 H2013-03-09 22:05:41.909+0000: 12466: info : libvirt version: 0.9.87 ^& @) a  ^6 M
2013-03-09 22:05:41.909+0000: 12466: error : virNetServerMDNSStart:460 : internal error Failed to create mDNS client: Daemon not running
5 y7 B+ S! L( M) O: C6 E0 m8 c$ c
5 S6 r& E  P4 g7 f
0 I: g8 }7 }$ h9 K% Z) X% a( P解决方案:
: s5 }' d; a& k
  j: @, K" H" ?+ Q& ~9 x0 P' _. P出现这种错误首先要查看/var/log/libvirt/libvirtd.log日志信息,日志里会显示:libvirt-bin service will not start without dbus installed.
  ~; ]* x+ Y. ~- u: D' v( w- [# ?7 [9 `0 r$ u3 c7 ~" c
我们再查看ps –ea|grep dbus,确认dbus is running,然后执行apt-get install lxc+ W$ o. x( q$ h  E: a* a; A% r
2 k5 P2 _5 ?9 Z  Q$ @
3、Failed to add image
- T$ t/ R# S% F$ B6 ^6 \* Y) g" g
1 d5 p) I9 W8 tError:
$ C) w3 Y. ~. zFailed to add image. Got error:
The request returned 500 Internal Server Error
% u* u( Y8 j8 E: t, z   \' L% x! b. b( ?+ S% W

8 E2 T% O7 z& P% k3 S4 y& T# k解决方案:
. V8 _+ O) Q3 Q& w9 C( j6 {8 Z
: `  Z6 |. i/ M. A0 O: O+ p8 J6 ]! Q2 s环境变量问题,配置环境变量,在/etc/profile文件中新增:
# x  U2 z# e* ~) H  U/ W
' d/ S& H7 z0 h' R/ m' y/ ^OS_AUTH_KEY=”openstack”
5 f& l3 {& j7 T5 P! ROS_AUTH_URL=”http://localhost:5000/v2.0/”/ v3 H5 f( Z6 |4 Z, G  E7 N6 ~
OS_PASSWORD=”openstack”
; b9 S" ?: L1 e" p- ~9 M. JOS_TENANT_NAME=”admin”
3 E& P& t  F% b, @! FOS_USERNAME=”admin”
+ g6 D. E" k/ M/ w1 P" u
" X' e. P, c) X7 I, n$ d9 j. y8 t3 g0 {# U3 V
然后执行source  /etc/profile即可!当然你也可以不在profile里配置环境变量,但是只能临时生效,重启服务器就很麻烦,所以建议你还是写在profile里,这样会省很多麻烦。
, y9 }! D* V3 X3 l0 g/ `
' m8 w% A/ G1 z4 U4、僵尸实例的产生
. N6 i* s/ f& h8 h
( [. Y+ U! i4 R  F6 c" J( g僵尸实例一般是非法的关闭nova或者底层虚拟机,又或者在实例错误时删除不了的错误,注意用virsh list检查底层虚拟机是否还在运行,有的话停掉,然后直接进入数据库删除。
3 n/ ^0 F, L( m+ U
* p, L5 @; \- f2 uNova instance not found
4 a2 A: A3 y) K$ e3 g) U! D 9 |( T7 P9 F* t4 c) x
Local file storage of the image files.
8 k5 W! l& p. g6 u( ?7 j1 l4 o
+ W# r5 i6 `- q  UError:
2 I1 [5 {- K! ^2 f2013-03-09 17:58:08 TRACE nova raise exception.InstanceNotFound(instance_id=instance_name)# q6 b" k* R! n; V, J: y: c! h
2013-03-09 17:58:08 TRACE nova InstanceNotFound: Instance instance-00000002 could not be found.3 V, o) v, @* U
2013-03-09 17:58:08 TRACE nova0 ^$ {1 \  }, _! m0 Y
; L, g1 [6 L# b, S

4 K* n' r3 M7 a . b( ?( F5 L1 z0 Y. U
; F; p8 Y- L  _' N' |  i
解决方案:
: M5 y" _) {5 I' P" |5 ^+ X( Z: S9 H+ `
删除数据库中的僵尸实例或将数据库删除重新创建:; @/ [+ W0 Y& t* R7 Q
/ x, J. H$ j# E: G9 e
a、删除数据库:
% p( [5 B2 x  c' `6 M4 m; }
& _$ l8 _5 N3 ?0 ^; e9 c; ^$mysql –u root –p
8 a1 m! ?: J5 `  T# M" b( jDROP DATABASE nova;
  A. b5 M, h& ?. [- u ! B: V3 Q0 A. I  i. ]
Recreate the DB:6 w9 Q) u* j3 B; x8 a; {
CREATE DATABASE nova; (strip formatting if you copy and paste any of this)
0 E. x% ]3 W6 [- o( IGRANT ALL PRIVILEGES ON nova.* TO ‘novadbadmin’@'%’ IDENTIFIED BY ‘<password>’;
' j. Q0 ^8 f* v! I3 `2 d* ZQuit
$ C& J# b; m( P! T9 x
/ D: l& p/ d: w7 I8 l5 d) [9 s2 M. HResync DB* c( b1 X+ O& z8 _: h1 _
2 Y" m# M: V1 p! o; L8 M8 w
  [. m6 K8 O( o, \- P, ^
b、删除数据库中的实例:/ N9 ^& a6 D' |2 I$ v1 d

& l& s" `  z& R+ q* v, t; R! J; B#!/bin/bash! D9 u0 w& Q( N: Y9 ]" _

( Q2 q( S; k# R- G3 ~5 j' V7 Rmysql -uroot -pmysql << _ESXU_/ Q9 U/ ]  K6 w/ {! X- A

& o, ?* {8 P  s, a: nuse nova;" j. s$ G$ s' k, [

9 h0 l; \1 I+ z' N- kDELETE a FROM nova.security_group_instance_association 2 x/ ~0 u, R; G; X1 d

9 o( _0 C! T$ m& U1 k2 a: IAS a INNER JOIN nova.instances AS b
0 Z& ~: ?0 Q# n% w" a: s- R
0 e0 P+ q/ R2 P' h( k) wON a.instance_uuid=b.id where b.uuid='$1';$ |/ p2 `: p7 \

; i9 @* u* }2 \$ M" R$ `DELETE FROM nova.instance_info_caches WHERE instance_uuid='$1';
% `0 |& x2 o) C
; C  ^# G5 n( ~# F7 WDELETE FROM nova.instances WHERE uuid='$1';/ \) m  ?+ W. l) c! r8 E4 \$ H, i( Y
* L$ l  F0 z! c& g
_ESXU_( y6 w0 |% b  R  _" L. |* S/ Q9 H3 [

7 s/ l* z. E* O. ]* A1 g- J9 Q2 |' U* X+ |+ s# G4 B/ \8 ^) W
将以上文件写入delete_insrance.sh中,然后执行sh delete_instrance.sh insrance_id;; X$ f8 q, M/ T; ]

3 z$ \$ f: _* d7 ~( L$ g其中instrance_id可以通过nova list 查看。
% \: a  w4 [+ U6 ^, Y7 U' w, m+ n. r$ U+ s. }
5、Keystone NoHandlers$ Q6 D8 U7 |8 n- p" j

9 a) X* Q, r0 F3 R6 n, n' RError
* V) o- c" U* {, b% h1 croot@openstack-dev-r910:/home/brent/openstack# ./keystone_data.sh
3 J$ i. ?; W& R" DNo handlers could be found for logger “keystoneclient.client”4 l8 u5 e' M3 ?  b7 s: ]9 p" H
Unable to authorize user
" ^- J2 V" f( h. ~' _No handlers could be found for logger “keystoneclient.client”
" X7 p& ]  J" S' C" yUnable to authorize user
; ^* X+ `) r" n" J* u/ NNo handlers could be found for logger “keystoneclient.client”
+ }* Z3 c" I8 lUnable to authorize user
- j7 z/ b- C' A# [2 W; I ; ?% g/ t, {/ j& o6 |7 ~
1 w. t$ Z7 }+ z  b( J" s
解决方案:
: n" Z" X% f+ {6 T1 w) T
4 h9 M- R1 A% n+ U% k& c7 K出现这种错误是大多数是由于keystone_data.sh有误,其中* a$ A; h! {+ r
4 O8 A9 o# P0 s* a( O( o1 f4 g
admin_token必须与/etc/keystone/keystone.conf中相同。然后确认keystone.conf中有如下配置:
3 F) ~# ~( A- p9 ^( J4 k- P; X! E7 Y9 E" S& C+ ]" B
driver = keystone.catalog.backends.templated.TemplatedCatalog template_file = /etc/keystone/default_catalog.templates1 v( X  G' W0 [/ O

. B4 v$ k2 O) E5 Z5 m) p6、清空系统组件,重新安装:
7 n* m: W& t  p) s6 r+ p/ u  z7 ]) R6 y! ?7 J
#!/bin/bash
6 t  Z4 D$ e& j# vmysql -uroot -popenstack -e “drop database nova;”
5 _; S/ J" K. H, ~1 Xmysql -uroot -popenstack -e “drop database glance;”: f7 ]9 m7 X/ A% ^
mysql -uroot -popenstack -e “drop database keystone;”
+ D5 ?0 e: M! j& Eapt-get purge nova-api nova-cert nova-common nova-compute$ z- H' v1 H/ G0 T1 z' E
nova-compute-kvm nova-doc nova-network nova-objectstore
* `2 t% j2 H3 W! I2 Wnova-scheduler nova-vncproxy nova-volume python-nova python-novaclient
& y0 G% F! C& j6 _' n4 Eapt-get autoremove
( M5 l: i1 D  |2 X/ O7 p4 ^* ?rm -rf /var/lib/glance
7 N1 e$ C$ [; Qrm -rf /var/lib/keystone/
+ ~. V& w9 e8 |. q! e+ [+ k. z6 a9 brm -rf /var/lib/nova/
: S7 W4 C: N1 `6 q# S6 i+ ~rm -rf /var/lib/mysql
: k* ?2 M# L$ x6 ^ : }( G8 K" I3 e1 V) Z) h  c9 f. ^

0 p# r2 M/ p4 Q, J/ x9 k8 `可通过执行上面的脚本,卸载已安装的组件并清空数据库。这样可以省去重装系统的麻烦!
' `# c, T1 T3 A! c4 a) \+ ^( Z
, H$ _. e* `) M" E8 H7、Access denied for user ‘keystone@localhost(using password:YES’)
) a+ Y9 ?4 B: O& R. Z! j
3 k+ r1 |! f% M( a3 W! g* T# keystone-manage db_sync
$ @! z  J- x! o' M# L5 |8 I2 r- w ) |/ B# p+ S& P3 }
File “/usr/lib/python2.7/dist-packages/MySQLdb/connections.py”, line 187, in __init__! X9 |, G2 a2 @7 K3 T

2 m% Y; v5 A' A" nsuper(Connection, self).__init__(*args, **kwargs2)3 Y: J3 Q4 ?+ a- r6 `( J
sqlalchemy.exc.OperationalError: (OperationalError) (1045, “Access denied for user ‘keystone’@'openstack1′ (using password: YES)”) None None. J' x% p( g! P* g2 C0 \" Q6 V' B2 S
. `; K0 O4 q" j8 X
3 c. a. @$ |, `) H  [$ ?+ P5 l( S
解决方案:
# i- r$ ^; T+ `. A& a! Y
+ k& ~$ B$ {* ?+ C查看keystone.conf配置文件链接数据库是否有误,正确如下:) t5 R4 _( p; x% y0 Z" G' R
2 B7 Z1 R' l1 R" E$ V
[sql]% o( K  A: G! B7 E
1 A# |4 P: f# r3 P- F* M" G
connection = mysql://keystone:openstack@localhost:3306/keystone
3 `# T7 z% }1 i3 Y$ n  x " M/ a5 N3 \. Z* |
% T- w' b8 L" ^9 W: K; f
8、nova-compute挂掉与时间同步的关系
3 h& i3 N" \8 `0 J
4 v- k( Q6 Y; [很多时候发现nova-compute挂掉,或者不正常了,通过nova-manage查看状态是XXX了。
1 K7 k, t! }: M* W# {* I# U
% o% J! H+ M( Z' e2 z* |往往是nova-compute的主机时间和controller的主机时间不一致。 nova-compute是定时地往数据库中services这个表update时间的,这个时间是nova-compute的主机时间。
6 G" C6 _" S$ A# P- W& d5 j9 ]8 L+ t4 |  d6 n3 m
controller校验nova-compute的存活性是以controller的时间减去nova-compute的update时间,如果大于多少秒(具体数值代码里面有,好像是15秒)就判断nova-compute异常。
" q1 l# g# X  `3 g
# e( `/ H3 A( e7 v& j( ^0 N这个时候你用nova-manage查看nova-compute状态是XXX,如果创建虚拟机,查看nova-scheduler.log 就是提示找不到有效的host 其他服务节点类同,这是nova心跳机制问题。所以讲nova环境中各节点时间同步很重要。一定要确保时间同步!!
2 n9 C/ Z, n! O* |% D! F9 P' z# E7 ^  g* \8 s  O
如果在dashboard上看nova-compute状态,可能一会儿变红,一会儿变绿。那就严格同步时间,或者找到代码,把上面的那个15秒改大一点。
) T& o$ k8 R  A) _* T6 ?+ ]4 B+ i) e
9、noVNC不能连接到实例
2 s7 {3 L* j) i& Z8 B
' E6 r- N# S: wnovnc的问题比较多,网上也有关于这方面的很多配置介绍,其实配置不复杂,只有四个参数,配置正确基本上没什么大问题,但是装的过程中还是遇到了不少的问题。% n9 I* U0 s  O7 n& r
# x7 B+ Q! P8 w4 Y) r
a、提示“Connection Refuesd”
. s, u# Y  u( ?5 a9 n- [
( v. V: }! ^- c  l6 r" N可能是控制节点在收到vnc请求的时候,无法解析计算节点的主机名,从而无法和计算节点上的实例建立连接。: P1 l* @$ A& e) y
) r7 k6 o8 E8 q3 y( E
另外可能是,当前浏览器不支持或者不能访问,将计算节点的ip和主机名的对应关系加入到控制节点的/etc/hosts文件中。- b. C' M; L$ e- N- g9 m6 Q

6 X  U( Y2 {! c! u1 gb、提示“failed connect to server”3 N4 L" \- G2 G  b

, n1 R1 t4 ~5 z' g出现这种错误的情况比较多,有可能是配置文件的错误,我们的环境中遇到这个错误是因为网络源有更新,导致安装版本不一致,使组件无法正常使用,解决方法就是使用本地源。另外需要特别说明的是使用novnc的功能需要浏览器支持Web Socket和HTML5.推荐使用谷歌。
" K. ]2 ~! b& l# }$ |" \. M9 M. `1 N- Y3 J9 O' p2 e- H
10、cinder错误,无法登录dashboard.
3 A+ S1 K5 [. Q2 P% R' o: e/ s" v' S6 v
出现如下错误:; M& p( a* S: N$ q  q& f

6 b, a, _5 O! L+ a: Z( @   
1 y. c& X; q% k( m5 |TypeError at /admin/ 8 T( z- ^1 t& ~
hasattr(): attribute name must be string
4 ]9 Z* ~& ^' ~
5 j- o/ H- y3 R) b1 cRequest Method:   GET
) M; u6 P3 X; r) ]6 d" S  t
1 b: g2 l0 r6 s! f, GRequest URL: http://192.168.80.21/horizon/admin/- I  H9 y9 X$ A1 V* T$ P& B, G
3 E+ l4 t4 T) e# t' W6 ^- A
Django Version:   1.4.58 I" H/ r8 F- x
1 v( @$ ?' L4 h& n7 W: ~
Exception Type:   TypeError( @: W( Z) X5 y; Q, M  b- C& q

8 M9 ~+ k; [7 a! `& i5 @8 Z7 t8 ~Exception Value: , e) a% X8 u( p1 j6 Q
8 j, K: t& N% O  G3 s- ]: I1 E% `
hasattr(): attribute name must be string
& x. @4 D" w$ X9 ~! W8 z9 a. k' x# m 2 D4 h* I+ C+ H* N' ~5 L. k
Exception Location: /usr/lib/python2.7/dist-packages/cinderclient/client.py in __init__, line 78
3 Q: t- {# T' }. H( e
7 C* V9 z+ c" P! L0 f5 U/ `Python Executable:   /usr/bin/python
% d7 V3 I% [! m0 B5 c4 F4 P5 M
7 @% ^1 t5 \# i3 m6 v5 SPython Version:   2.7.3
* W6 m9 l8 y* Y" `- R3 [5 _
0 E6 [7 Q+ f, C& bPython Path:
: c% B+ E- r7 k3 g8 i3 `0 c" U
" R0 ?+ P; h; Z8 R4 [; L['/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../..',$ e5 L- X1 y: }+ V) }
2 u2 [- }6 x+ r% X- Z7 `
'/usr/lib/python2.7',9 {" K- Z* p3 \* u# w8 h
2 S7 }4 s$ B2 h8 r
'/usr/lib/python2.7/plat-linux2',
2 j1 H+ U% _5 c4 I& a
3 a: X& E8 w% C4 N) f2 X '/usr/lib/python2.7/lib-tk',
* g9 J2 G; c- z1 c
9 W$ p5 o* u  L' O '/usr/lib/python2.7/lib-old',1 G; u& l5 ^4 e2 ]

4 @. Q/ h+ K% v: B" N8 z '/usr/lib/python2.7/lib-dynload',
% x# [' s  Y4 n" C5 O# ?7 V8 E ! p' e: q2 N& |7 P9 N  I/ t
'/usr/local/lib/python2.7/dist-packages',
+ X" W6 k* @+ m# j3 w9 j/ { ' L' L2 z' Q8 O5 l
'/usr/lib/python2.7/dist-packages',; R9 t! b( G: t( d. L* P. p

9 f' u/ e; R& `$ [ '/usr/share/openstack-dashboard/',
9 k% P/ v; H+ X+ Q$ Q' `7 a
1 l9 l1 K: O3 X4 t9 ? '/usr/share/openstack-dashboard/openstack_dashboard']
3 w4 J( t. [  @1 f
/ b5 p8 I% q( q; k7 @ ' B5 q- b( o  ?' l5 [
) I$ b1 B+ d8 Z
Server time: Fri, 29 Mar 2013 12:51:09 +0000
/ c% s: |% D" c. T9 W5 p5 Z+ c   Q9 y  n6 w, E4 R% |

2 T2 p; M6 f5 Q解决方案4 i( |* l  N% s$ G" x7 g  j/ I

$ |, I! {# n2 s5 t* K. }2 I查看 apache2 的 error 日志,报如下错误:* f- g, _" S2 ^& }3 n

1 }7 n( Z5 F% p3 _
  }/ Y. B: i, K8 L+ TERROR:django.request:Internal Server Error: /horizon/admin/
9 m! L" z; }8 P( V) c
6 Y7 }& B! D/ D, dTraceback (most recent call last):
9 ^# g, H% `( o% n$ P7 t: d9 R1 a
  e' V7 A- e5 X3 A  File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py", line 111, in get_response- k6 c4 h) W& A- @9 G8 Q9 j

" M& |  P$ M) r, F2 b    response = callback(request, *callback_args, **callback_kwargs): g8 Q* H0 s! [+ o1 ~8 `4 v
4 z9 z& e8 T. E# \4 z
  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 38, in dec
& {, D4 E! u- H* u( {9 R , G8 ^/ f' K3 I( g, H2 E. o
    return view_func(request, *args, **kwargs)& Q) Z' a0 N" h0 S* c9 v2 e

% D# O: t! t, v3 P' [6 w/ e! w4 f  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 86, in dec9 h9 Q: A$ ^: R! ]4 O

8 q+ t$ o$ U6 O, w# C$ d2 F) r* n    return view_func(request, *args, **kwargs)
3 F7 l0 |8 V0 C; ~! P; A# h 5 L) r! z8 T1 `) Q, y# |( z7 @5 Z
  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 54, in dec0 R% B6 E) c4 l7 x4 W
$ g8 Y" i% l& d, P' U# H! x
    return view_func(request, *args, **kwargs)
& U5 z: L" n! Y4 S- Y 0 d1 i; g) I& c& R9 [
  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 38, in dec
7 h9 j. x" l& e
/ f' w1 I$ A* U7 ~7 P! U) L, s8 G    return view_func(request, *args, **kwargs)
, z5 C+ S' P- T( X
6 ]! S, b4 V- W4 T0 Q  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 86, in dec
! {6 L  H6 h/ J( b1 i0 q
, q3 G- }& M  ~7 M    return view_func(request, *args, **kwargs)
0 H" I  V) S8 d$ J4 v $ R" V3 l, J) ?, a3 f5 M8 V  {/ i
  File "/usr/lib/python2.7/dist-packages/django/views/generic/base.py", line 48, in view0 D9 O; E! B0 |( U+ A. w, j% |

% _* p( d1 N' d9 P, v    return self.dispatch(request, *args, **kwargs)0 Y1 P  H) u  Y; q6 M+ \/ X4 H

9 H, X' V/ |4 M! k  File "/usr/lib/python2.7/dist-packages/django/views/generic/base.py", line 69, in dispatch! Z% `' A' W% M1 d# N' r1 K

9 h6 e( P. Y! F. @8 L; m    return handler(request, *args, **kwargs)4 Z) s- N7 F- O% f9 f* U. T4 d

6 U8 ^' ^9 V, Q+ H* S& b  File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 155, in get
9 X# _; k; ]" E4 N2 p& j 7 v4 S4 D; M/ H" v2 P: L6 F
    handled = self.construct_tables()
8 s* c+ {  f( P$ u& a7 v) q2 {1 l
. G) ?/ i- L) N3 ]  V  File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 146, in construct_tables
4 s$ O) C7 }: ]  u+ x ) G( O9 L$ W; w) }% q+ i$ e* {
    handled = self.handle_table(table); M, l3 @2 V: y( @5 I
# n' L3 G0 V5 a5 d* x6 T
  File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 118, in handle_table' X! v- _! j+ P; B

1 ]* Z4 H- V  R    data = self._get_data_dict()- N3 m7 u# W- }- i0 E/ o
; `+ U4 p  ?6 X  L3 g! e) E
  File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 182, in _get_data_dict
# U) m" D) s. |4 d! T6 C" W' b
- d# S2 Y8 ^8 Q9 T  ?: J( M/ I    self._data = {self.table_class._meta.name: self.get_data()}- a& O+ E: M! ~

! U9 d2 \/ m6 J* p/ e  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/dashboards/admin/overview/views.py", line 41, in get_data
! ^+ b1 P' O: l" j) D) z
/ f6 ]& b+ K% q    data = super(GlobalOverview, self).get_data()( j2 N5 W7 p" V% Y  i
1 Q2 F8 i9 z% y
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/views.py", line 34, in get_data( d. c: U% Q) Q# X2 V$ H5 E- O
( W$ G0 D4 N' O
    self.usage.get_quotas()" n) M6 `& J) z

4 D9 {6 \0 q4 G  ^# }" `  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/base.py", line 115, in get_quotas
4 P( w1 A# Y# E3 R, y; o% H" W ; T' H6 u9 U, X
    _("Unable to retrieve quota information."))
0 `! b4 p2 {' n8 {4 ]8 y$ c0 d+ ~. x . d" U  H/ \8 V
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/base.py", line 112, in get_quotas7 f3 \6 O. Y# f

2 t/ _/ H. c& s( {5 o    self.quotas = quotas.tenant_quota_usages(self.request)3 H; C' M  x0 B6 M

) J; z! t2 @5 Y  File "/usr/lib/python2.7/dist-packages/horizon/utils/memoized.py", line 33, in __call__
& U& Q) K' m5 v6 u: A. K
+ j9 o5 M# R; ^( U/ c  a# T+ a7 _- c: n    value = self.func(*args)
3 k* l, x  r8 W% z5 o8 c5 B 8 ?. X) f6 Q3 ^7 H+ X
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/quotas.py", line 115, in tenant_quota_usages
7 z" ]$ W, G- I( ~ , }; x4 H* \6 U
    disabled_quotas=disabled_quotas):
* t6 W$ C$ Y2 u7 p# v. Y: v
- M" w: h. T& t* l" `* M  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/quotas.py", line 98, in get_tenant_quota_data: d. Q% B  u& p* H1 o2 F3 |

) r4 S0 t7 u3 m6 C5 w9 F    tenant_id=tenant_id)
  |/ X" I! T7 n7 h5 o+ f9 `
) G2 ?* G! {( u  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/quotas.py", line 80, in _get_quota_data  S# K1 m! C. ^3 b4 `  w& i
; s+ }7 T4 `# ^5 C* y) y* y
    quotasets.append(getattr(cinder, method_name)(request, tenant_id))
4 ~  a& i/ _, B3 c  @ ; F  u' m, `/ ]  Y  u" y
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/api/cinder.py", line 123, in tenant_quota_get" l9 Z" _; H. e, a' y7 l
: k7 d1 p; b- b. a( e0 ]
    c_client = cinderclient(request)0 M, E. x. R3 @% ?. v( L" A
. h8 I1 |# e0 [  t) x
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/api/cinder.py", line 59, in cinderclient7 w8 q% u( n, J0 l$ `! I

% t) G8 b) M1 H$ Y6 \2 q: _8 a    http_log_debug=settings.DEBUG)+ {# ^3 r% [+ I) D! m
" g. M' K) U2 `7 m7 H* ~. P
  File "/usr/lib/python2.7/dist-packages/cinderclient/v1/client.py", line 69, in __init__$ F  |# s! [/ Y# W9 f/ T

! L7 `. Y$ X4 T    cacert=cacert)
% f6 D& c2 `; W
& N8 v8 Q! |9 I  t! F* j. \  File "/usr/lib/python2.7/dist-packages/cinderclient/client.py", line 78, in __init__, D6 d  e' ?* _$ a4 v. H

( E, L6 B0 U; X    if hasattr(requests, logging):( a- ^3 g4 f: g% o" x1 c6 m1 [
6 v; c8 m  d7 }$ A& X
TypeError: hasattr(): attribute name must be string; K5 y& L- g! J' r

  U3 j# X" j7 {) N$ L+ B+ s$ h5 {; d7 F  g# n6 {3 `
错误信息中指出了 Cinderclient 的 client.py 中 78 行 hasattr() 方法的属性必须是一个字符串。# _" R- E8 R% }- q4 H: P
修改代码:
! M8 h9 }0 |: L1 J; t2 }
  ~. S! }7 Y" e" A5 j
, }# Z# ~) Q3 p+ Q5 B: I7 m6 y! a4 P0 e
# vim /usr/lib/python2.7/dist-packages/cinderclient/client.py
" D$ U, V: n- z
- B/ Z& S+ C% [2 r" p. \( A 78 if hasattr(requests, logging): # 改为 : if hasattr(requests, 'logging'):- [$ I3 ~( Q* q# r* {

( n! f0 S( Q3 }: [) j 79 requests.logging.getLogger(requests.__name__).addHandler(ch)2 a0 z1 B% }) Z- w; O; B
- W/ L6 f  d6 i, d* }4 ?
2 `  f( c1 U& D2 n% f
重新启动 apache2 :! k1 V7 U  ^1 I' A
# R* Q- w  {( y! V" |9 ]( A5 `# M3 t% d
/etc/init.d/apache2 restart
( ]; q# i6 i3 _" J0 x" t  r& q( Z1 ]4 |
这次访问 dashboard 没有报错,尝试创建 volume 也没有问题了。
- g" n" X% n/ J. w- ]4 Q' k  {- i
11、Unable to attach cinder volume to VM. G% l3 p* m  @; ~( s. O" i% F2 a

& T, u7 ], G$ E8 U     在测试openstack中的volume服务时把lvm挂载到虚拟机实例时失败,这其实不是cinder的错误,是iscsi挂载的问题。
9 ~5 _2 v  C% B/ O
( d: h7 O# L( X5 K7 g5 S  ^9 }以下是计算节点nova-compute.log 的错误日志:
7 @% g$ z9 r, ]/ t
% i) M% r. {- W8 |  c2012-07-24 14:33:08 TRACE nova.rpc.amqp ProcessExecutionError: Unexpected error while running command.
* [  {7 H' J% ]# T/ `! s1 {1 X7 p8 f! 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& `# Y& E" v6 z6 R8 _5 s: Z
2012-07-24 14:33:08 TRACE nova.rpc.amqp Exit code: 255
* u" ~  ]1 \. G- A/ e2012-07-24 14:33:08 TRACE nova.rpc.amqp Stdout: ”
% Q5 h5 u) J- n/ M. D8 r' `2012-07-24 14:33:08 TRACE nova.rpc.amqp Stderr: ‘iscsiadm: No portal found.\n’
( _1 X, ^/ ?+ C, T4 X$ W1 P" H' M6 [4 `0 x: @5 l7 _9 ]/ ~* G9 z% J

, g0 J6 t; H5 f* Q4 ~0 M& J6 u- w3 `) P) h
以上错误是没有找到iscsi服务端共享出的存储,查找了很多openstack 资料说要添加以下两个参数:
$ b- s" y% c! J0 X0 B7 X
9 |% }8 {' l. ]4 {iscsi_ip_prefix=192.168.80 #openstack环境内网段( a' w9 U$ [' x  }) O" V( j
( |' T* ]- [6 F1 E3 f7 h
iscsi_ip_address=192.168.80.22 # volume机器内网IP) q% ]" M" R% D9 o$ j2 J$ x

5 |. J8 p  X& s  e, i/ ^可是问题依然无法解决,后来发现只要在nova.conf配置文件中添加参数iscsi_helper=tgtadm 就挂载失败。
* n, A; n6 V" i
. Y* _! o5 ]2 X. b5 r根据这个情况进行了测试查看日志才发现:如果使用参数 :iscsi_helper=tgtadm 时就必须使用 tgt 服务,反之使用iscsitarget服务再添加参数iscsi_helper=ietadm。
- C& W9 n/ B, J
6 a% }0 B- I5 @4 l+ W+ V我测试环境的问题是tgt和iscsitarget服务都已安装并运行着(在安装nova-common时会把tgt服务也安装上,这个不小心还真不会发现),在nova.conf配置中添加参数iscsi_helper=tgtadm ,查看端口3260 发现是iscsitarget服务占用,所以导致挂载失败,我们可以根据情况来使用哪个共享存储服务!!将tgt 和iscsi_helper=tgtadm、iscsitarget和iscsi_helper=ietadm保留一个即可。7 T) a, |1 c# b2 G) K# W* G

, |6 B$ b$ l; e0 h9 h12、glance index报错:; Y. R3 k# o! @2 u: H4 T% d
" B. J4 g9 l6 x. J# E; 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); U' b% I- E3 c
; ^( N2 J3 W) D/ \( o! w
4 t0 a5 u4 }8 y) I$ R
在 Grizzly 版,我测试 glance index 时候报错:6 i9 k% d6 J. Z: b& d& ~
7 x# W( |8 f1 w7 D* o& |' m
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)9 Q! z% l2 ^2 |0 ?. K
错误信息指出:glance 没有通过keystone验证,查看了 keystone 日志,报错如下:# O7 H& F; i$ n4 H2 ^1 z" f

3 [: Q% e- h3 V( W, l4 d( E: {2677 2013-03-04 12:40:58    ERROR [keystone.common.cms] Signing error: Error opening signer certificate /etc/keystone/ssl/certs/signing_cert.pem4 O6 D( C' f& c
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')* @, }: Z1 R5 P* ~
2679 139803495638688:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:400:, ]0 O0 l9 k1 U% f
2680 unable to load certificate3 P) t: o9 l3 ]8 ~
2682 2013-03-04 12:40:58    ERROR [root] Command 'openssl' returned non-zero exit status 33 A6 q  ]% z+ E7 d- \7 W. y
2683 Traceback (most recent call last):
. @+ u1 X7 M% p: r6 d8 a2684   File "/usr/lib/python2.7/dist-packages/keystone/common/wsgi.py", line 231, in __call__4 a/ f) z8 p1 e# E6 f) w
2685     result = method(context, **params)
# P0 D' a, D  a7 {* q8 f' F2686   File "/usr/lib/python2.7/dist-packages/keystone/token/controllers.py", line 118, in authenticate
. B: F2 P4 o7 v0 l, y2687     CONF.signing.keyfile)0 [$ O& A* }; v# n, U% `9 e
2688   File "/usr/lib/python2.7/dist-packages/keystone/common/cms.py", line 140, in cms_sign_token
: p9 U' K) i' u) D9 c2689     output = cms_sign_text(text, signing_cert_file_name, signing_key_file_name)
( F7 O8 U" Z, k1 y2690   File "/usr/lib/python2.7/dist-packages/keystone/common/cms.py", line 135, in cms_sign_text
& R0 O2 h' |  r3 J2691     raise subprocess.CalledProcessError(retcode, "openssl")# ~+ J% D; _; A0 q0 P: t
2692 CalledProcessError: Command 'openssl' returned non-zero exit status 3
  v+ A" p; p* M- Q$ ?& Y/ z在Grizzly 版中,keystone 默认验证方式是 PKI , 需要签名证书,之前的版本都是用的 UUID,改 keystone.conf:
8 C4 s; [  e+ m: u' Y
% J3 l5 j1 C+ h4 B+ s+ Wtoken_format = UUID2 P( [$ X6 W' Q
在试一次就没有错误了。
3 K/ d9 F( i- K( l* s1 k0 u5 r! T3 H8 q- _& f1 q, {5 n
13、镜像制作
7 O8 {4 i& ^5 G
6 S$ l) g- H+ N1 X这里主要强调下windows的镜像制作,因为windows的涉及到加载驱动的问题,就比较麻烦。% Y3 O- L( D1 Q

( w* _/ i( J9 M, [9 o. C! x9 `下载virtio驱动,因为win默认不支持virtio驱动,而通过openstack管理虚拟机是需要virtio驱动的。需要两个virtio驱动,一个是硬盘的,一个是网卡的,即:virtio-win-0.1-30.iso和virtio-win-1.1.16.vfd。这里主要强调两个地方: ' u8 ]  `' f6 x2 ~1 U* H* O
" k- @  M8 S8 O
1、创建镜像:
, r! ?! K) B1 d
" g% c+ T; }" X' S% t7 }( t kvm -m 512 -boot d –drive6 I- m; W0 `% x' U( O' p
: P5 b, ?, b0 S6 V+ O
file=win2003server.img,cache=writeback,if=virtio,boot=on -fda virtio-win-1.1.16.vfd -cdrom windows2003_x64.iso -vnc:10                   , _4 J( h( m3 C- o! _3 }

" n/ l7 p0 y( H% `( E9 s
, d( e( I) C8 d. p* v2 T1 ?) P7 }- M2、引导系统 :
' F% I# R( o1 U. G. D3 S  @  s% a. T( L+ s5 ]# A% i6 @5 A
kvm -m 1024 –drive file=win2003server.img,if=virtio,3 ~  n% g% @7 t1 f5 g: d

& i+ O  U8 _! ?boot=on -cdrom virtio-win-0.1-30.iso -net nic,model=virtio -net user -boot c -nographic -vnc 8( H$ m6 V) P2 Q2 m: s0 F

8 D$ i; g: U9 v" A! X
" X5 a% E1 p2 H0 m: @这里需要注意的地方是if=virtio,boot=on –fda virtio-win-1.1.16.vfd和引导系统时使用的virtio-win-0.1-30.iso 这两个驱动分别是硬盘和网卡驱动。如果不加载这两个驱动安装时会发现找不到硬盘,并且用制作好的镜像生成实例也会发现网卡找不到驱动,所以在这里安装镜像生成后需要重新引导镜像安装更新网卡驱动为virtio。1 `! D0 m2 F: G5 S* ]! ?. G+ s% B0 R) S
) P# ]7 Z/ [% j5 F4 ~1 \; V* x0 V
14、删除僵尸volume4 s) H1 w& z$ f
0 K0 z4 w. I6 _- I$ u" }( Y
如果cinder服务不正常,我们在创建volume时会产生一些僵尸volume,如果在horizon中无法删除的话,我们需要到服务器上去手动删除,
& P; ]2 T4 q' \( O6 F0 }
$ e6 m# V  S- h9 y" X* b: c. D/ q7 }命令:lvremove /dev/nova-volumes/volume-000002* R: b4 Z8 E6 s
5 P8 L, x- P, H3 {4 B: Y& E' @
注意这里一定要写完整的路径,不然无法删除,如果删除提示:$ W  v. J8 H/ x

5 l5 v# {0 O4 W+ U/ ^7 X, O6 q“Can't remove open logical volume“ 可尝试将相关服务stop掉,再尝试删除。删除完还需到数据库cinder的volumes表里清除相关记录。
 楼主| 发表于 2018-9-2 22:29:09 | 显示全部楼层
以下主要为安装部署过程中遇到的一些问题,因为openstack版本问题,带来的组件差异导致不同的版本安装的方法也完全不一样。经过测试,目前已可成 功部署Essex和Grizzly两个版本,其中间还有个版本是Folsom,这个版本没有部署成功,也没有花太多时间去研究,因为Folsom版本中使 用的quantum组件还不成熟,对于网络连通性还有很多问题,网上也很少有成功的案例,大多数人使用的还是folsom+nova-network模 式。
, h' u) W2 Q4 V, h" l: J% l+ R; z" K1 C7 \2 H: S5 f2 i7 X# i& @  n
到了Grizzly版本,quantum组件才比较稳定,可以正常使用,自己也花了很多时间研究,现在已可以成功部署多节点环境。以下是部署过程中遇到的 一些问题,包括Essex和Grizzly两个版本。国内网上关于这方面的资料很少,很多资料也都是国外网站上看到的。而且很多情况下日志错误信息相同, 但导致错误的原因却不尽相同,这时候就需要仔细分析其中的原理,才能准确定位。遇到错误并不可怕,我们可以通过对错误的排查加深对系统的理解,这样也是好 事。
& }: R0 U# p; K( f  \
7 Z( T* f" g1 A9 e- h$ ]关于安装部署,网上有一些自动化的部署工具,如devstack和onestack,一键式部署。如果你是初学者,并不建议你使用这些工具,很明显,这样 你学不到任何东西,不会有任何收获。如果没有问题可以暂时恭喜你一下,一旦中间环节出现错误信息,你可能一头雾水,根本不知道是哪里错了,加之后期的维护 也是相当困难的。你可能需要花更多的时间去排查故障。因为你根本不了解中间经过了哪些环节,需要做哪些配置!这些工具大多数是为了快速部署开发环境所用, 正真生产环境还需要我们一步一步来操作。这样有问题也可快速定位排查错误。, Z+ s. Z8 a  _. \4 ^! x4 @
$ }3 M- a% J( g
本文仅是针对部署过程中的一些错误信息进行总结梳理,并给予解决办法,这些情况是在我的环境里遇到的,并成功解决的,可能会因为环境的不同而有所差异,仅供参考。
% Z7 O" g; O2 n' J- @" s( e* h- `- Q2 I2 e
1、检查服务是否正常
' l2 N" f" |: Z# i% `7 u% y, W
* y# S" d- ^, Qroot@control:~# nova-manage service list4 c' b) H' A2 \

% d. f7 J. L8 F6 r; B( kBinary           Host                                 Zone             Status     State Updated_At
! _( ~& M  t, m5 E( Q
* G% L! q8 g% j+ @. x4 Qnova-cert        control                              internal         enabled    :-)   2013-04-26 02:29:44
, l# A$ N3 K2 J# l) E: v) S% v0 K. P* m1 P
nova-conductor   control                              internal         enabled    :-)   2013-04-26 02:29:42- x2 e0 k3 N9 f# B. O. n
5 e8 B& Y7 f- y2 g0 V5 p9 \: z
nova-consoleauth control                              internal         enabled    :-)   2013-04-26 02:29:44
9 Q& A; l( r4 \! p% _8 g* X# n% l6 P) Z2 w
nova-scheduler   control                              internal         enabled    :-)   2013-04-26 02:29:47
3 c- E4 g' c/ a- T5 p: P7 ]
4 D( y' c0 Z1 \( O1 V& X. B+ [nova-compute     node-01                              nova             enabled    :-)   2013-04-26 02:29:46
. [. q" A; k( t# s5 f# m
( u) G- c/ g5 D8 T8 c' Tnova-compute     node-02                              nova             enabled    :-)   2013-04-26 02:29:46
+ Y3 k% M  }) ~' k  V3 j% G
  D! C% l- h" M' [" z# ~8 R) J3 n  mnova-compute     node-03                              nova             enabled    :-)   2013-04-26 02:29:42+ M2 U) a* ]+ [/ O- Q1 n
复制代码# b, {# [, L' A  W- A) S
如果看到都是笑脸状态,说明nova的服务属于正常状态,如果出现XXX,请查看该服务的相关日志信息,在/var/log/nova/下查看,通过日志一般可以分析出错误的原因。
, ~+ f, `% C& {, t0 h5 Q. m ; J7 R  v- p$ `% e+ w3 u( ~# A
5 B3 x- O. X9 {" F( w9 k
2、libvirt错误( J7 P- l: o1 G. b
python2.7/dist-packages/nova/virt/libvirt/connection.py”, line 338, in _connect1 }0 I6 d4 H' d$ Q+ a: }( d
2013-03-0917:05:42 TRACE nova return libvirt.openAuth(uri, auth, 0)9 d5 Z. V; O4 _7 R3 q; X
2013-03-09 17:05:42 TRACE nova File “/usr/lib/python2.7/dist-packages/libvirt.py”, line 102, in openAuth; G. d+ t  E; O8 w; Z/ T
2013-03-09 17:05:42 TRACE nova if ret is None:raise libvirtError(‘virConnectOpenAuth() failed’)
0 V" t' K1 J& i) T: K% O' Z2013-03-09 17:05:42 TRACE nova libvirtError: Failed to connect socket to ‘/var/run/libvirt/libvirt-sock’: No such file or directory6 E" y9 n+ h2 W2 c; i6 [! e$ G5 m
2013-03-09 22:05:41.909+0000: 12466: info : libvirt version: 0.9.8
3 S2 n3 A8 G/ c' X# {) R+ V2013-03-09 22:05:41.909+0000: 12466: error : virNetServerMDNSStart:460 : internal error Failed to create mDNS client: Daemon not running1 W4 Q! b0 m. y; N2 y! i
复制代码! g! b& X' a& ]3 _, P0 k8 b) K! v! A
解决方案:
# E1 S! ?$ D; s6 J2 ]  y4 d出现这种错误首先要查看/var/log/libvirt/libvirtd.log日志信息,日志里会显示:libvirt-bin service will not start without dbus installed.
; K+ J/ g7 V  ]" q/ ]! g我们再查看ps –ea|grep dbus,确认dbus is running,然后执行apt-get install lxc
4 W+ v# w" l) b1 z% d! T 7 K' b2 [- ^' y- g' x& L
% x2 E4 o, Q! a. X# A+ p
3、Failed to add image( o" e; S  Y& K2 `
Error:
; m. I. q  ]  UFailed to add image. Got error:
The request returned 500 Internal Server Error) v1 o; |8 t' `1 X5 _+ [; t
复制代码1 ?$ V, s& p5 @  V% E7 A3 h  h: i

  T9 ]0 s6 b8 t( [+ v
; U( o# w# w5 d; o2 t! A* K- A# E解决方案:
5 k, h: v9 k( T6 s4 p* r环境变量问题,配置环境变量,在/etc/profile文件中新增:
  K* V+ w$ `4 M$ p( R0 T( b9 @
8 l4 A& H+ q& P) A
) n7 l  }4 v/ ^/ @5 |, s& DOS_AUTH_KEY=”openstack”
: B/ B* T; D/ r2 \8 W3 UOS_AUTH_URL=”http://localhost:5000/v2.0/”: o6 r8 s: ^' d. h% g+ t3 T6 Q' ?# {
OS_PASSWORD=”openstack”
$ i+ x; f& E9 w1 uOS_TENANT_NAME=”admin” / C1 _& z; S5 ]8 P3 t0 |, ^/ }
OS_USERNAME=”admin”
/ ?7 X: D- o9 T: m' g' ]/ V; E. h复制代码
) d6 M; C0 H! A% R+ i, F然后执行source  /etc/profile即可!当然你也可以不在profile里配置环境变量,但是只能临时生效,重启服务器就很麻烦,所以建议你还是写在profile里,这样会省很多麻烦。
+ j1 L' v5 R7 K/ _9 Z8 U! m
. {$ |$ _; |" B1 s$ G; F4 V! R. t1 X' F6 L: u
4、僵尸实例的产生7 T( H/ Y- p! S# G  ^/ V
僵尸实例一般是非法的关闭nova或者底层虚拟机,又或者在实例错误时删除不了的错误,注意用virsh list检查底层虚拟机是否还在运行,有的话停掉,然后直接进入数据库删除。2 P+ K4 f: V8 Z$ a4 x! I; l% F
Nova instance not found
* ]4 Y" {2 q3 D- O4 F* A3 r- ~, h! u) Z6 T, x5 G; G3 S
Local file storage of the image files.4 O* H" s( i4 p1 r: K: C. q

2 w+ K2 i9 ~3 y7 _, R: @Error:
# Y$ J5 m4 U5 K' R% Q. q2013-03-09 17:58:08 TRACE nova raise exception.InstanceNotFound(instance_id=instance_name)8 e3 C8 Q+ B: T7 ~# n) e$ J% C
2013-03-09 17:58:08 TRACE nova InstanceNotFound: Instance instance-00000002 could not be found.6 z9 r' q& ^0 {
2013-03-09 17:58:08 TRACE nova
# p5 d; }  O; a2 p+ b2 c- z  \复制代码
' L; M" |" [) t. T  m/ K) y解决方案:
. s8 Y1 y" v* y6 A删除数据库中的僵尸实例或将数据库删除重新创建:
; y+ y! h- l1 a0 Ua、删除数据库:
. E: U( Q9 a* u& @$mysql –u root –p
; C' J: K* X2 X/ Y, _* ADROP DATABASE nova;
0 `/ C1 h( z# _- x- `- V( P9 k9 v
" ~7 s8 e+ _1 L' g% eRecreate the DB:
/ M. K4 F# x) ~CREATE DATABASE nova; (strip formatting if you copy and paste any of this)& @" T$ z4 ?$ t! Z
GRANT ALL PRIVILEGES ON nova.* TO ‘novadbadmin’@'%’ IDENTIFIED BY ‘<password>’;
- p9 r0 v3 N0 SQuit
) Q) a9 \) u# M  o) w( d9 h
3 `4 r  r% }' E; S% |: HResync DB# c1 L7 f* I8 N' U
复制代码
" t, Q2 d- T. e' Y7 `2 i4 @( h$ zb、删除数据库中的实例:0 t) H0 ]/ s  M. p* [! O: @
#!/bin/bash: Y- _8 C" O. M0 j

2 s& J0 _- W" ?  ]- ~  g0 Fmysql -uroot -pmysql << _ESXU_5 x3 Q) _, |9 Z7 a' R* V

; b% T/ H$ }6 S- muse nova;9 x9 W6 K5 `/ G( l2 ^

4 Z# R- i- G/ N4 wDELETE a FROM nova.security_group_instance_association
: ^9 N$ d4 x6 P
) c9 d6 t+ U' u3 gAS a INNER JOIN nova.instances AS b
, ~6 z& S% j" ~5 S7 k8 y  W9 E' z5 f0 h
ON a.instance_uuid=b.id where b.uuid='$1';
3 R; h: w' w4 y. G7 N8 @; Q% A/ T0 X5 n' p$ b$ X+ B1 E
DELETE FROM nova.instance_info_caches WHERE instance_uuid='$1';
+ K9 _- x# r, B5 e* P
4 q: |5 ^( K: W: C. f$ B6 k4 i( rDELETE FROM nova.instances WHERE uuid='$1';* \2 o$ H  _) B
. B9 t6 B  D; k6 S# E
_ESXU_  ~/ C0 o% J# |) W2 B! l8 g
复制代码1 \, ?: p6 V& K" ~
将以上文件写入delete_insrance.sh中,然后执行sh delete_instrance.sh insrance_id;
- D3 K& \- N1 i其中instrance_id可以通过nova list 查看。- T) m/ e# g! t& M1 y4 ]
3 J+ l" D3 v) ]
" D- Q2 b, t: G0 u% C( [
5、Keystone NoHandlers, M  F% t- s7 y' b
0 {7 U: e* V" f" A
Error  
+ Y: f' w) e. o- w6 A+ i) q) ?root@openstack-dev-r910:/home/brent/openstack# ./keystone_data.sh  
( v! r. h4 V0 m! J) l. d7 dNo handlers could be found for logger “keystoneclient.client”  # c' X0 l4 L! x2 f' @
Unable to authorize user  " f  }7 }% z" y8 ?6 e$ n' v/ P) G9 @
No handlers could be found for logger “keystoneclient.client”    x5 H. g; G5 E% U
Unable to authorize user  
/ x; H9 e  ]0 B5 ]1 q: l2 BNo handlers could be found for logger “keystoneclient.client”  
$ u: s( L6 R+ E! {! M) uUnable to authorize user  9 X# W6 L. _3 @1 e7 s  ]* ^
复制代码& |. N, _# n! U9 V

& t- k4 H6 r# }, q/ G8 P
% ?6 w9 S! p2 S) U解决方案:# e. d4 v% p" e  o+ x4 |
出现这种错误是大多数是由于keystone_data.sh有误,其中* m, r& g5 g: }7 b/ \* ]$ _  `' N) x
admin_token必须与/etc/keystone/keystone.conf中相同。然后确认keystone.conf中有如下配置:
2 Z& o9 l; k4 |; q: |9 d+ \$ Ndriver = keystone.catalog.backends.templated.TemplatedCatalog template_file = /etc/keystone/default_catalog.templates% X; o# s6 H0 e

9 f' S3 D6 w. ]% V1 q5 q8 t+ I$ I
# W- `7 D) ?6 o/ i1 L. O6、nova-compute挂掉与时间同步的关系. F/ ]. t) n6 {8 X
很多时候发现nova-compute挂掉,或者不正常了,通过nova-manage查看状态是XXX了。
5 A, u5 F5 U; o2 ^' _9 L9 S6 D往往是nova-compute的主机时间和controller的主机时间不一致。 nova-compute是定时地往数据库中services这个表update时间的,这个时间是nova-compute的主机时间。
/ G6 D' f: S% k( Y; F! v& ucontroller校验nova-compute的存活性是以controller的时间减去nova-compute的update时间,如果大于多少秒(具体数值代码里面有,好像是15秒)就判断nova-compute异常。% g+ k- f, p& }. K9 ^6 ]' ~7 P
这 个时候你用nova-manage查看nova-compute状态是XXX,如果创建虚拟机,查看nova-scheduler.log 就是提示找不到有效的host 其他服务节点类同,这是nova心跳机制问题。所以讲nova环境中各节点时间同步很重要。一定要确保时间同步!!! ]4 K6 c4 `; Q7 p  J: x) o" f
如果在dashboard上看nova-compute状态,可能一会儿变红,一会儿变绿。那就严格同步时间,或者找到代码,把上面的那个15秒改大一点。
( E6 }3 a9 C/ v) t0 B  `- G8 l) B# M
+ ?, b5 e8 h1 [: k1 p
7 h0 F3 B2 D& A& ?6 r7、noVNC不能连接到实例
, B9 O) T4 u, f1 T+ U& S- {9 }novnc的问题比较多,网上也有关于这方面的很多配置介绍,其实配置不复杂,只有四个参数,配置正确基本上没什么大问题,但是装的过程中还是遇到了不少的问题。
: j6 [7 I4 u5 s6 Ya、提示“Connection Refuesd”- s. u( m- k+ c! @9 S$ }) R* k
可能是控制节点在收到vnc请求的时候,无法解析计算节点的主机名,从而无法和计算节点上的实例建立连接。# z4 j  w; }8 B3 v" K0 X* g/ C0 v, \
另外可能是,当前浏览器不支持或者不能访问,将计算节点的ip和主机名的对应关系加入到控制节点的/etc/hosts文件中。- J$ R. @, T4 K1 z# n5 e" `
b、提示“failed connect to server”1 J, w8 R9 n& A9 j+ P$ V
出 现这种错误的情况比较多,有可能是配置文件的错误,我们的环境中遇到这个错误是因为网络源有更新,导致安装版本不一致,使组件无法正常使用,解决方法就是 使用本地源。另外需要特别说明的是使用novnc的功能需要浏览器支持Web Socket和HTML5.推荐使用谷歌。/ F0 U" d6 G8 h3 w, j( e. L5 w! [

9 A9 L3 e$ g+ [3 F
+ I4 D( ~. d6 o/ L9 ]9 `8、Unable to attach cinder volume to VM
+ Y0 v2 b+ {: r9 j9 r& n+ Y     在测试openstack中的volume服务时把lvm挂载到虚拟机实例时失败,这其实不是cinder的错误,是iscsi挂载的问题。( I: H! K+ I$ o
以下是计算节点nova-compute.log 的错误日志:2 u6 ]% r+ V4 ?+ {- a: C
2012-07-24 14:33:08 TRACE nova.rpc.amqp ProcessExecutionError: Unexpected error while running command.; e6 J$ F$ |4 \$ A$ o
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, J# _# I+ u7 X
2012-07-24 14:33:08 TRACE nova.rpc.amqp Exit code: 255
+ Z' a/ m0 ~' ^2012-07-24 14:33:08 TRACE nova.rpc.amqp Stdout: ”
3 A2 G4 O. v' |* `& U2012-07-24 14:33:08 TRACE nova.rpc.amqp Stderr: ‘iscsiadm: No portal found.\n’
9 }$ w4 i9 N0 N; F* v5 q复制代码
2 I/ U- S3 [0 X% q7 \2 ]1 H3 |) v# f以上错误是没有找到iscsi服务端共享出的存储,查找了很多openstack 资料说要添加以下两个参数:
: m: h% Z: c0 M9 p( o! s' xiscsi_ip_prefix=192.168.80 #openstack环境内网段
, R# y5 i4 c" m( L* H* ?iscsi_ip_address=192.168.80.22 # volume机器内网IP
3 N0 H0 Q+ J& H1 D- F  F, }, `可是问题依然无法解决,后来发现只要在nova.conf配置文件中添加参数iscsi_helper=tgtadm 就挂载失败。
* }$ L8 I8 H! u9 t. Q8 g4 v根据这个情况进行了测试查看日志才发现:如果使用参数 :iscsi_helper=tgtadm 时就必须使用 tgt 服务,反之使用iscsitarget服务再添加参数iscsi_helper=ietadm。
# r4 T# o2 I$ k9 R我 测试环境的问题是tgt和iscsitarget服务都已安装并运行着(在安装nova-common时会把tgt服务也安装上,这个不小心还真不会发 现),在nova.conf配置中添加参数iscsi_helper=tgtadm ,查看端口3260 发现是iscsitarget服务占用,所以导致挂载失败,我们可以根据情况来使用哪个共享存储服务!!将tgt 和iscsi_helper=tgtadm、iscsitarget和iscsi_helper=ietadm保留一个即可。
/ G, A+ n7 M# d5 j; s" |4 v ! t' z3 K  V4 y4 w' ~
9 n/ e9 R# f! X3 }5 ]
9、glance index报错:" ]- {% A9 M+ t, Z7 o/ N+ O- |) E" B
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)
& R) E! g8 Z" M1 u' m- ]复制代码. Y! w3 S# x4 P  @+ A
在 Grizzly 版,我测试 glance index 时候报错:2 Q3 H5 W& i3 G" ]8 z6 r6 J! z
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, y% N9 e( U; l3 u% Y3 J0 `

+ [- S1 w& f. C/ E4 \' e. B错误信息指出:glance 没有通过keystone验证,查看了 keystone 日志,报错如下:
5 i& F: Z% g& o3 a) M7 P5 I2677 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
4 a" p0 S* R3 o. {' ]5 ~" U& M7 G4 g9 d5 \" d& `7 s- x7 m
在Grizzly 版中,keystone 默认验证方式是 PKI , 需要签名证书,之前的版本都是用的 UUID,改 keystone.conf:
# o, R3 L  G& Q- y  }1 Otoken_format = UUID
  ^; o; C# ]$ I4 a5 w1 d3 c
4 \$ p1 l. W6 {. O: F在试一次就没有错误了。
: H% ^0 x4 Q9 Q4 r0 u
- E, \, R5 _4 {3 n7 A8 P% X+ K  j( \" p, O
10、镜像制作
. f4 v" K8 E5 f1 n) z0 E& C这里主要强调下windows的镜像制作,因为windows的涉及到加载驱动的问题,就比较麻烦。
' A; T  i5 F$ B) k  ^下载virtio 驱动,因为win默认不支持virtio驱动,而通过openstack管理虚拟机是需要virtio驱动的。需要两个virtio驱动,一个是硬盘的, 一个是网卡的,即:virtio-win-0.1-30.iso和virtio-win-1.1.16.vfd。这里主要强调两个地方:
5 ]/ S+ X8 H1 u' I- @' [1、创建镜像:2 d$ S! g4 F# K+ ]. d# M
kvm -m 512 -boot d –drive  . H1 h0 K, z9 Z( `/ ]6 ?9 M' ^
  
* S) P6 {6 A; \9 u: Z, U  I# Yile=win2003server.img,cache=writeback,if=virtio,boot=on -fda virtio-win-1.1.16.vfd -cdrom w( `3 |5 H; r* ~6 D5 z
复制代码5 `1 `( L) K; I5 ]/ k! }4 H0 @5 D  y

: b# z7 K( e6 a: R8 M% |6 }2 A$ [3 M  H+ m1 i
! k; k0 P# D" O! ^( [; |6 Q- l2 K
' l( O8 F. L* z
2、引导系统 :  a7 k( g6 _2 b3 Y5 a
kvm -m 1024 –drive file=win2003server.img,if=virtio,( y2 _& s/ n6 I& e# e% j8 L
- M. D$ [" X7 S
boot=on -cdrom virtio-win-0.1-30.iso -net nic,model=virtio -net user -boot c -nographic -vnc 8( n0 e7 ?4 Z/ C# O  ^  p5 ]
复制代码. |6 X, ^7 ~/ j* N' k; Q: g& d6 F
这 里需要注意的地方是if=virtio,boot=on –fda virtio-win-1.1.16.vfd和引导系统时使用的virtio-win-0.1-30.iso 这两个驱动分别是硬盘和网卡驱动。如果不加载这两个驱动安装时会发现找不到硬盘,并且用制作好的镜像生成实例也会发现网卡找不到驱动,所以在这里安装镜像 生成后需要重新引导镜像安装更新网卡驱动为virtio。, R$ W  k0 \+ n) D0 K

' u6 x, W4 y2 e' g11、删除僵尸volume
, n' I5 f# N7 _: X
; i0 j# s  {4 P/ g/ }- b  \! ^/ x0 w) C! O$ z( m
如果cinder服务不正常,我们在创建volume时会产生一些僵尸 volume,如果在horizon中无法删除的话,我们需要到服务器上去手动删除,命令:lvremove /dev/nova-volumes/volume-000002注意这里一定要写完整的路径,不然无法删除,如果删除提示:“Can't remove open logical volume“ 可尝试将相关服务stop掉,再尝试删除。删除完还需到数据库cinder的volumes表里清除相关记录。
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

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

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

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

GMT+8, 2026-4-8 17:19 , Processed in 0.056237 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

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