易陆发现互联网技术论坛

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

openstack常见错误

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

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

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

x
以下主要为安装部署过程中遇到的一些问题,因为openstack版本问题,带来的组件差异导致不同的版本安装的方法也完全不一样。经过测试,目前已可成功部署Essex和Grizzly两个版本,其中间还有个版本是Folsom,这个版本没有部署成功,也没有花太多时间去研究,因为Folsom版本中使用的quantum组件还不成熟,对于网络连通性还有很多问题,网上也很少有成功的案例,大多数人使用的还是folsom+nova-network模式。* }' j! w  @% d' W

# U3 g4 j" R& K5 o; B9 z到了Grizzly版本,quantum组件才比较稳定,可以正常使用,自己也花了很多时间研究,现在已可以成功部署多节点环境。以下是部署过程中遇到的一些问题,包括Essex和Grizzly两个版本。国内网上关于这方面的资料很少,很多资料也都是国外网站上看到的。而且很多情况下日志错误信息相同,但导致错误的原因却不尽相同,这时候就需要仔细分析其中的原理,才能准确定位。遇到错误并不可怕,我们可以通过对错误的排查加深对系统的理解,这样也是好事。
  s: @0 I, q9 I! Z, g7 N' C1 a9 ~2 C2 a8 B
关于安装部署,网上有一些自动化的部署工具,如devstack和onestack,一键式部署。如果你是初学者,并不建议你使用这些工具,很明显,这样你学不到任何东西,不会有任何收获。如果没有问题可以暂时恭喜你一下,一旦中间环节出现错误信息,你可能一头雾水,根本不知道是哪里错了,加之后期的维护也是相当困难的。你可能需要花更多的时间去排查故障。因为你根本不了解中间经过了哪些环节,需要做哪些配置!这些工具大多数是为了快速部署开发环境所用,正真生产环境还需要我们一步一步来操作。这样有问题也可快速定位排查错误。
! L: ]& ~/ j4 ], H( q, F- T7 h% z0 t. Y  c& f2 m2 b
本文仅是针对部署过程中的一些错误信息进行总结梳理,并给予解决办法,这些情况是在我的环境里遇到的,并成功解决的,可能会因为环境的不同而有所差异,仅供参考。) z+ a9 m  o4 K$ |6 q6 |: M
5 F3 Z) M; q6 n3 W+ `
1、检查服务是否正常:
1 p8 k: r6 N& m: v+ K
( {8 ~# x* k& Mroot@control:~# nova-manage service list6 p5 O* l: {- c- v& D: s, y
/ V0 T4 x/ A" a0 B& D8 D
Binary           Host                                 Zone             Status     State Updated_At
( ]' [4 `: o4 y- D( K
" }, d1 r& i  {9 P% v3 y' k1 `+ `- Bnova-cert        control                              internal         enabled    :-)   2013-04-26 02:29:44
9 P) z& u0 ^* P  V( W; K# c" h
; g2 t2 ~  |; `* K0 f2 _nova-conductor   control                              internal         enabled    :-)   2013-04-26 02:29:42
9 ~7 n: V2 Y2 n: R ! z: [1 `0 V6 k4 h2 {
nova-consoleauth control                              internal         enabled    :-)   2013-04-26 02:29:44
5 Y2 N- M* g' c  g& ~+ A8 E : ]9 _. B3 F7 g# Y: t6 Z
nova-scheduler   control                              internal         enabled    :-)   2013-04-26 02:29:47# a, R) ^2 e! S3 Q( n( R2 t% e; m, P

! n( ]  N0 ^: t1 f8 O! ^nova-compute     node-01                              nova             enabled    :-)   2013-04-26 02:29:46) a2 v  C) ?% m- W; s
' z; R0 g) k. A# D
nova-compute     node-02                              nova             enabled    :-)   2013-04-26 02:29:46
/ ?- `9 j! c) G# q 2 Z, m7 w2 {4 B4 x8 p( \+ {
nova-compute     node-03                              nova             enabled    :-)   2013-04-26 02:29:42; L9 i( Q% z4 A$ f9 c

8 S7 a. y: m% N* @$ e# c7 v# h- G# Y# z, f) F
如果看到都是笑脸状态,说明nova的服务属于正常状态,如果出现XXX,请查看该服务的相关日志信息,在/var/log/nova/下查看,通过日志一般可以分析出错误的原因。. S: X6 O" [0 K9 y

7 N7 }0 H. x( b8 D2、libvirt错误
* _5 z8 _( V- s, l  S. _  T, ?( n& x8 v9 v6 o

& W6 q5 ^: ~  G: p1 o2 C' T7 p
/ B6 Q6 m, u0 {# O4 G0 @2 f5 O% xpython2.7/dist-packages/nova/virt/libvirt/connection.py”, line 338, in _connect- @& x8 O( H4 K, P# H# A
2013-03-0917:05:42 TRACE nova return libvirt.openAuth(uri, auth, 0)
. K- a6 Y5 ?' V/ r; b$ q0 }2013-03-09 17:05:42 TRACE nova File “/usr/lib/python2.7/dist-packages/libvirt.py”, line 102, in openAuth7 O9 n6 K2 }  n" w
2013-03-09 17:05:42 TRACE nova if ret is None:raise libvirtError(‘virConnectOpenAuth() failed’)9 s1 s6 Z& ]+ @6 v3 W6 q1 {  \4 c
2013-03-09 17:05:42 TRACE nova libvirtError: Failed to connect socket to ‘/var/run/libvirt/libvirt-sock’: No such file or directory( A3 K. @5 [% q. E2 k
2013-03-09 22:05:41.909+0000: 12466: info : libvirt version: 0.9.8& v6 o: Y$ t$ g1 P6 ]) m' A) I" e
2013-03-09 22:05:41.909+0000: 12466: error : virNetServerMDNSStart:460 : internal error Failed to create mDNS client: Daemon not running2 }3 c% U* @0 G" I
8 S# J% H. p3 R

8 h' j: s; D% m0 i8 f/ y  u解决方案:5 }3 E, W8 Y5 a% N0 C" ~+ h: }
. |; A( |& A% }
出现这种错误首先要查看/var/log/libvirt/libvirtd.log日志信息,日志里会显示:libvirt-bin service will not start without dbus installed.; O2 _. b; [3 ?* i* J  F" m" A

# R0 Q8 L: w9 k4 y( Q: ~) I5 @: |我们再查看ps –ea|grep dbus,确认dbus is running,然后执行apt-get install lxc
7 H: t9 W1 V% x- s2 v$ y% q# y3 F7 H0 j
3、Failed to add image6 G3 w; y8 p+ Q  J
1 x6 Q3 K4 `+ u6 b& I, U3 W
Error:
2 A1 u) c) V: F. wFailed to add image. Got error:
The request returned 500 Internal Server Error
1 ?2 s. ^& w4 E
0 x# N3 U. e) _& E/ \" f. y' w) v- N5 e2 |8 ^8 `+ M3 Z
解决方案:
; ^& J) V' b; t, a- }1 C: _6 l: d
  y/ N2 R; c9 {8 I, q" S环境变量问题,配置环境变量,在/etc/profile文件中新增:, R7 b: c( P( T4 p7 z& C- n3 u. [
! s( g, ^2 `* h- s: ~
OS_AUTH_KEY=”openstack”
+ c& K3 |+ y* s3 z% k+ ^8 cOS_AUTH_URL=”http://localhost:5000/v2.0/”
5 I* R' E* k1 pOS_PASSWORD=”openstack”) G) W  D  a/ w) d1 h1 I
OS_TENANT_NAME=”admin” & t' ]# z( u! v
OS_USERNAME=”admin”
4 P9 H( L+ I2 L7 l. A0 I ! {, a, a; j2 U- S# C" `

" Z+ q' R& d* S3 u* a然后执行source  /etc/profile即可!当然你也可以不在profile里配置环境变量,但是只能临时生效,重启服务器就很麻烦,所以建议你还是写在profile里,这样会省很多麻烦。/ Y- O# E; `  [0 m# j# D  f

. J% I( Y5 W. ^$ G. ~4 X4、僵尸实例的产生0 B- E- r6 K8 v+ Z
( y$ v& n( N. F! t
僵尸实例一般是非法的关闭nova或者底层虚拟机,又或者在实例错误时删除不了的错误,注意用virsh list检查底层虚拟机是否还在运行,有的话停掉,然后直接进入数据库删除。
' |# S. E3 g- c7 j" a) L- K" n1 c  S" T  g3 ^
Nova instance not found3 e+ S3 w$ h4 A" o2 d) d" D+ W
+ U6 [0 S0 P' C$ R4 L; q
Local file storage of the image files.7 g8 Q6 [- v8 T( U+ O' E

5 |, |  Z- L; C" R. m* gError:  I1 }- a# N( z7 d
2013-03-09 17:58:08 TRACE nova raise exception.InstanceNotFound(instance_id=instance_name)7 I$ l& x) [+ k5 m4 M6 |- c/ N
2013-03-09 17:58:08 TRACE nova InstanceNotFound: Instance instance-00000002 could not be found.
0 b& t5 S  f: F: K. C2013-03-09 17:58:08 TRACE nova4 H/ n: r2 x8 r' D0 m* m( p
" Q1 q2 @5 ?& L2 T! a  {

( I' W8 Z. l5 Z2 K$ F
& @( g. F3 [% {2 @4 _
6 B( X0 O) E3 ]/ O1 T- ~1 p4 ^9 ]解决方案:0 \8 B& o% [) ?+ `% n
  H. P' I1 F- g
删除数据库中的僵尸实例或将数据库删除重新创建:
+ |$ r5 _& {! q" O4 i9 }5 o5 U  X# |' }; N$ K
a、删除数据库:
: e+ X" p0 d1 O( X# v- I7 [7 n* n0 u4 a4 i, f) l  y' l6 v
$mysql –u root –p6 @  _5 P! p; a( G% C
DROP DATABASE nova;  J2 `2 t9 ?: o, l" k! o" _5 n4 s
5 e2 _6 i( L' S6 A6 n1 [; l
Recreate the DB:
( V/ E' H. u- M. |; M0 L- k" PCREATE DATABASE nova; (strip formatting if you copy and paste any of this)
9 [  ?) S2 S& w* x' IGRANT ALL PRIVILEGES ON nova.* TO ‘novadbadmin’@'%’ IDENTIFIED BY ‘<password>’;! l* t" N5 y3 I! ]/ N
Quit  T0 l' h6 J" E# I5 E0 {- t

. O* P/ }+ O: f  U3 H: a* y% _4 QResync DB
+ v5 o- @! }1 l
  r  e8 h1 e4 H  `; ?& R- E
4 o" O: K9 u9 [$ Rb、删除数据库中的实例:
7 K7 s) m4 W$ g8 G* s
0 S) J1 u- z4 U# N0 _5 g1 M1 a+ u#!/bin/bash
4 ~/ D! f  _! \  E( } 3 }! ]3 {) j7 z5 L
mysql -uroot -pmysql << _ESXU_3 M6 S. y9 A4 i) F, f& t9 S) Y! n, W
0 R# i9 x2 H7 L7 O( c+ U$ r" F
use nova;
  X5 o4 r, O  z) n9 b/ ] ' d2 s% L6 b: g) \" u/ N
DELETE a FROM nova.security_group_instance_association
: U' c6 f4 b# u+ d6 [ * g9 g3 y8 X* l" N
AS a INNER JOIN nova.instances AS b( A7 l3 F7 `  m
/ S$ Z; V8 z* z/ F' S) e- r
ON a.instance_uuid=b.id where b.uuid='$1';" x# B+ R% {/ _% i( A3 c: A

+ E, d/ ]0 F4 B* _5 o/ QDELETE FROM nova.instance_info_caches WHERE instance_uuid='$1';- W+ g) b4 q. F: Z5 |5 c

0 h0 ], f6 i& TDELETE FROM nova.instances WHERE uuid='$1';
8 P/ D; W; P2 I' F' ?3 N7 [4 I' }
' `7 \1 A' i5 x_ESXU_
5 w% F  C4 D  @' U5 I# a! i 4 O% P- l" v, z7 W
' k1 {7 Y. m4 q3 {* j  i' L' v
将以上文件写入delete_insrance.sh中,然后执行sh delete_instrance.sh insrance_id;
- z, Y' w, f' ^" ?0 K  Y" q- Y
其中instrance_id可以通过nova list 查看。
; v& g) V# G9 B- I
& R3 {- }: z9 z5、Keystone NoHandlers
- L& F* i  ]4 I' x, w
) l8 o+ g" `# oError1 c% v& q( k) e& {* D4 @
root@openstack-dev-r910:/home/brent/openstack# ./keystone_data.sh
& @  i5 Y2 d, B$ dNo handlers could be found for logger “keystoneclient.client”
* C" N  q3 K  pUnable to authorize user
+ u2 w: N0 H- _( D- nNo handlers could be found for logger “keystoneclient.client”
- d! {" {' U6 t& ?( d, Q. z& GUnable to authorize user
# Y. f* [5 M+ bNo handlers could be found for logger “keystoneclient.client”$ G- n! X* }5 n  Q
Unable to authorize user
! B8 U3 H( @0 Y; y* X
* H5 U( B" I% m% o( Z) u# J
5 i' t  L9 i! H解决方案:
! m+ r9 ^9 ^% Y& {9 U& v- i9 @3 J3 ]* n- h  G
出现这种错误是大多数是由于keystone_data.sh有误,其中
- B& s+ m8 w/ I2 T& r) t- M& _* F5 F0 j! ~6 K  Y/ B
admin_token必须与/etc/keystone/keystone.conf中相同。然后确认keystone.conf中有如下配置:
& x1 h7 h# K5 ]/ P- a1 I5 Y
% v) S$ v1 S( f9 T9 y  Cdriver = keystone.catalog.backends.templated.TemplatedCatalog template_file = /etc/keystone/default_catalog.templates4 D1 M4 ?" a2 ^& r. e
* r, S8 q+ j9 f) h7 t- D
6、清空系统组件,重新安装:
, C5 H2 c# |, E8 I! s5 S1 s+ S2 ^6 m5 x4 K; L/ Y
#!/bin/bash3 G3 p( p7 x0 J* T. u  E9 R0 V3 p- L! J
mysql -uroot -popenstack -e “drop database nova;”( D3 ]' m: ^& z5 |" F4 y
mysql -uroot -popenstack -e “drop database glance;”7 ~5 j! o6 _5 y+ q' j( X+ |
mysql -uroot -popenstack -e “drop database keystone;”
9 b" c6 n4 Y* Capt-get purge nova-api nova-cert nova-common nova-compute# j  a9 }) y- `+ C$ i# y# `
nova-compute-kvm nova-doc nova-network nova-objectstore# l6 l) C0 z+ e: g( x- G2 L6 ~
nova-scheduler nova-vncproxy nova-volume python-nova python-novaclient
) c& F: K9 m. r% uapt-get autoremove, J' g, m. M- p, r( \
rm -rf /var/lib/glance
6 t* T6 k) c$ {4 Y) L" @* n" a* mrm -rf /var/lib/keystone/+ M( A& X- Z2 C# ?
rm -rf /var/lib/nova/7 P! l2 w0 F/ t# p8 K) d
rm -rf /var/lib/mysql
+ z% z0 `9 g2 N
7 o+ j0 M3 w4 t! c# M6 b) A3 M% y5 v: Y* p; }/ ~2 W, Z5 ?
可通过执行上面的脚本,卸载已安装的组件并清空数据库。这样可以省去重装系统的麻烦!' `' h& v% _2 E

) F, ?/ `0 u1 r& e, C5 Q3 }7、Access denied for user ‘keystone@localhost(using password:YES’)
: p1 G7 R6 `# ?$ J; A) O3 e3 c% [: S. T, l6 j
# keystone-manage db_sync% P( }, J5 B4 f0 n0 E) t
: h  F. Y* ~# @8 A/ ^3 V2 F+ {
File “/usr/lib/python2.7/dist-packages/MySQLdb/connections.py”, line 187, in __init__: r( c8 o, b7 K/ }8 f! P
/ R3 g/ A+ T9 h3 d% M$ w
super(Connection, self).__init__(*args, **kwargs2)
% @! v5 r0 c% v7 o7 {sqlalchemy.exc.OperationalError: (OperationalError) (1045, “Access denied for user ‘keystone’@'openstack1′ (using password: YES)”) None None+ W( E8 h" m( ]6 d: c

6 j; x1 l/ }. ^% N5 Z8 Z( P4 ]- ^7 _* ^! {* l" P
解决方案:
# o3 N/ a5 O/ h" r, b  H4 t6 P8 R. k$ h' I/ P. o
查看keystone.conf配置文件链接数据库是否有误,正确如下:" u5 [( l# J1 x

) H9 z, ?9 y. L* ]; {; |" i; w[sql]
3 ~5 P4 ?( x5 k- z7 s ) e+ F" ?% W# m2 g( K
connection = mysql://keystone:openstack@localhost:3306/keystone6 B% f1 @. Z9 S; o; M' @3 F/ L! e
% h7 N) U! n+ b. ]

9 v$ n) N) s) T/ d( Q9 V& U  O6 }% r. D* F8、nova-compute挂掉与时间同步的关系4 x& y! V, s# U; K
* \9 e2 Z6 u4 [- a
很多时候发现nova-compute挂掉,或者不正常了,通过nova-manage查看状态是XXX了。
& @3 ~- R, e5 q* i; Q: w8 _4 s% j* `& g1 N# ?, f( [
往往是nova-compute的主机时间和controller的主机时间不一致。 nova-compute是定时地往数据库中services这个表update时间的,这个时间是nova-compute的主机时间。! C" F+ `: Y; G0 L. u! }

" v, A0 W2 j' ^+ T& K- g( Z7 g; dcontroller校验nova-compute的存活性是以controller的时间减去nova-compute的update时间,如果大于多少秒(具体数值代码里面有,好像是15秒)就判断nova-compute异常。5 a5 {2 t- ]+ R

" @+ w, X9 u( y这个时候你用nova-manage查看nova-compute状态是XXX,如果创建虚拟机,查看nova-scheduler.log 就是提示找不到有效的host 其他服务节点类同,这是nova心跳机制问题。所以讲nova环境中各节点时间同步很重要。一定要确保时间同步!!
, `: J) m3 C: ]7 t" R- i2 v- l) D; m9 f; g$ {* P: T
如果在dashboard上看nova-compute状态,可能一会儿变红,一会儿变绿。那就严格同步时间,或者找到代码,把上面的那个15秒改大一点。, F4 v6 E2 l$ D1 y9 _( T% S( d
$ F* Y( s2 K( m- U: `  o
9、noVNC不能连接到实例) s1 |0 V( A0 _% G3 B
% G- @; b1 m, T$ E4 d
novnc的问题比较多,网上也有关于这方面的很多配置介绍,其实配置不复杂,只有四个参数,配置正确基本上没什么大问题,但是装的过程中还是遇到了不少的问题。$ Q/ C' E+ I6 F$ [! i# U& f

  o4 @0 L0 J& Y! N7 n1 K6 T5 Z9 ~- sa、提示“Connection Refuesd”2 o( a1 y; Z' S5 m
6 H+ R7 }. s5 t. @
可能是控制节点在收到vnc请求的时候,无法解析计算节点的主机名,从而无法和计算节点上的实例建立连接。
1 l1 l  d, J9 |; Y5 T: F1 y: @) _# P7 S) G
另外可能是,当前浏览器不支持或者不能访问,将计算节点的ip和主机名的对应关系加入到控制节点的/etc/hosts文件中。: P9 V1 O) u' v3 b

  D  n3 a( X0 Y- l% {# \b、提示“failed connect to server”
7 ]# N( n: x' |9 A4 |1 Y' O7 `% N# C! R$ |: v
出现这种错误的情况比较多,有可能是配置文件的错误,我们的环境中遇到这个错误是因为网络源有更新,导致安装版本不一致,使组件无法正常使用,解决方法就是使用本地源。另外需要特别说明的是使用novnc的功能需要浏览器支持Web Socket和HTML5.推荐使用谷歌。3 L& ?# p' k+ o6 |3 G2 e/ q' L/ w
  ~: d, ?1 G. T" P  l; p
10、cinder错误,无法登录dashboard.
& o' o; p  [1 ^! D' [* R
) f1 U. w. t7 }5 s" }+ I: R出现如下错误:
2 Z* w* I: d! }/ V
' [# o; c/ Z6 \   ( {, \9 y# e5 F( I0 w8 ^
TypeError at /admin/ ) o6 |5 v, X, f" i3 J
hasattr(): attribute name must be string
/ H2 g: C' G% a- b
0 H/ k3 U7 P' Q. x; X) CRequest Method:   GET
  L# `( b$ K! g8 @% c8 H- o5 z' t
) G. ?) J1 h5 L# y# y4 hRequest URL: http://192.168.80.21/horizon/admin/: ^- y' M  q  f* t% D

/ z! V4 \" ?% ^5 D7 Z  Y, h  c" JDjango Version:   1.4.5
: t$ {" W( e1 l2 h  ?% Q
: {; l3 w$ ^! x. xException Type:   TypeError
4 x  n. m9 z3 W( B  ^3 M5 R& ^ & K' i0 D; r+ a% N% O  V; s6 u8 v5 G
Exception Value:
' a, _# e. V( o3 Q! C7 p9 j& t1 D
7 x& ]3 d& ]9 [9 E& lhasattr(): attribute name must be string2 t- ]6 a1 M0 E: {9 M# B8 g
- r. j& p3 V; ^) O/ b. `, Z" e
Exception Location: /usr/lib/python2.7/dist-packages/cinderclient/client.py in __init__, line 78
$ z: |% T* B0 O6 p+ x , `. D5 @" h  P! ?. @1 }; ]' _
Python Executable:   /usr/bin/python
+ O4 a( C( Q1 P- Q
% ]; N. c1 C& U' u2 tPython Version:   2.7.3. l! ~& b( O7 H- U7 C) u& R

% i' B; L7 `8 ?9 @2 |/ }Python Path:
% i6 Q% C* F9 \2 {" n1 u. e
7 r! I: }6 Z3 ]  J5 q['/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../..',7 f9 |! |# ^; h
! M& w) z4 R, o* X: E: P! q
'/usr/lib/python2.7',
' w$ l; S) L0 m7 ~. H4 g8 m1 ~ / p0 f- u9 n/ Y, I
'/usr/lib/python2.7/plat-linux2',
4 a- v1 x! C+ W, h( U
' U# x0 ~0 y7 z/ V" z2 O& [+ n '/usr/lib/python2.7/lib-tk',3 n  \! K8 a8 e3 q/ ^/ F

; S9 J- v6 f4 R' T- n, D. z '/usr/lib/python2.7/lib-old',
$ c# |) W" d6 A+ K( o8 W5 u, u
* ]3 `  o4 n. b5 L '/usr/lib/python2.7/lib-dynload',
# J4 y8 J; }" {4 [
$ B, ~2 o( w+ O  t+ n '/usr/local/lib/python2.7/dist-packages',
3 a  }6 }: S+ [$ M/ E+ G
% h  Z+ ^3 u9 |! p% Y '/usr/lib/python2.7/dist-packages',( @7 G* \7 v! Q

$ d8 x, H1 N; I+ ]: t6 h '/usr/share/openstack-dashboard/',1 u1 [  Q  B4 W& u# c) {

/ \3 a: d. Q1 b9 [8 ^) g6 l) y '/usr/share/openstack-dashboard/openstack_dashboard']
9 ]; _0 G/ H% C1 g
" i0 V0 K3 g- w : F: A! ^4 B' r
2 C1 @. U5 b* n0 i! p! H) H4 |/ j
Server time: Fri, 29 Mar 2013 12:51:09 +00009 C6 K' S6 y- f# u

, e0 W' j0 e/ Q' Q$ c0 c
6 ?9 S; k, |) x* @2 J) j7 u解决方案
5 \7 \# x) D) s. M) t4 C% x  N
! x/ z& t' V8 k) T1 t查看 apache2 的 error 日志,报如下错误:
  n0 N/ F  [2 O; v1 n9 d" y: Z+ L# S& O( f, f; p; A
# q; o' o0 K+ a& |, B  |3 r
ERROR:django.request:Internal Server Error: /horizon/admin/
. ^+ d' X. I: E0 h2 l; f0 g : n) B1 W: v# ^" u9 G
Traceback (most recent call last):
  U$ }$ i- k! Q0 B. B; B# T
$ L1 ?3 S: M/ s  File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py", line 111, in get_response0 ~: d( Z9 L8 H; X. ]
4 b5 |) e  u; w9 z: l, A  O
    response = callback(request, *callback_args, **callback_kwargs); l, G  x6 p- J$ ]5 |$ S5 U( p* s4 a

7 L( t' `6 K% e& N% I8 O0 w. ?  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 38, in dec  w% d5 E! H4 k3 C; @5 Z; m: c
7 \7 F" |3 z( n9 n9 e; v
    return view_func(request, *args, **kwargs)
$ [: b: }) J3 u; |: { 3 x+ |' g1 \: I2 h8 N, K  s/ v
  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 86, in dec5 ~) W( S, B/ s: |8 z" G% D! \( Y3 Q

2 K0 {; l8 R/ j! \% a/ @: [    return view_func(request, *args, **kwargs)1 c$ ]3 {5 B) H; z  J2 _

- d( R, I1 @6 f% U" J$ ~  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 54, in dec
7 ^* a! F/ x$ ~) \9 N. j
# D0 X% a' Z* E    return view_func(request, *args, **kwargs)
+ ~3 N, T  q& y/ J4 i2 h " `3 C  {# t9 H" e/ h- }
  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 38, in dec3 B7 W1 i4 D3 ]& ^; n# o5 w/ N0 x
, h: e+ [, T6 I; y+ y8 F7 y0 I! x, ]1 v
    return view_func(request, *args, **kwargs)
4 s3 f' u& V5 w. S6 U1 O : o4 M- {8 w6 d( H; y
  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 86, in dec3 h; t9 `. b& h5 V0 r
5 U# K( }* ?0 |4 z' D
    return view_func(request, *args, **kwargs)
7 ]* Z: k7 V. r# m: e3 c
0 V) a- D: `1 ~% j( R& d; q* B  File "/usr/lib/python2.7/dist-packages/django/views/generic/base.py", line 48, in view( u. l% L4 \2 e9 ~  `; q

  Z* Z6 ~7 l+ Y; [2 h$ ]& p    return self.dispatch(request, *args, **kwargs)5 V) f8 V# f! m3 [; H

7 w( Y3 T+ ]; i& a( g  File "/usr/lib/python2.7/dist-packages/django/views/generic/base.py", line 69, in dispatch1 W$ x" x; j6 }. P) B3 {
. a( S. s" s$ W+ M. _7 B$ K
    return handler(request, *args, **kwargs)
% g. y+ _( ]- f- k. b6 A
+ J5 k3 t  y* |, e! @  M7 F: x6 v; Y  File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 155, in get7 Q* F( p0 X5 g3 q
2 G3 {+ g' _, d, Q3 z
    handled = self.construct_tables()9 Q/ [* Y+ |, K9 n9 N% j$ l

& s7 R) k' w- Z% n3 i  File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 146, in construct_tables
; a/ A5 a3 ]6 m$ ? * @7 ~2 S, Z  O; B% }4 _: X
    handled = self.handle_table(table), K. D! b4 w& i& J; H" I% \
& O5 h: E& m: L3 x4 k
  File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 118, in handle_table5 v. ?3 N. u$ w' v) i

+ x% r2 I( u' r) x& l    data = self._get_data_dict()( _5 _; t0 |9 m1 T" x( u
0 O- u% e) j7 ?
  File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 182, in _get_data_dict
- r: \  y$ i% y" O) s- X" R1 ~
  [  Y) z4 A' i    self._data = {self.table_class._meta.name: self.get_data()}7 n( E9 X4 J9 H2 @+ S6 `

3 Q$ F4 @6 y  M2 A+ \# W  A  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/dashboards/admin/overview/views.py", line 41, in get_data9 `. {0 E9 L! R# R
) P8 o- ^; [7 U
    data = super(GlobalOverview, self).get_data()
4 j- g: q8 A$ x4 ? ( \1 m. p/ K  g! i1 c: v; O) L
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/views.py", line 34, in get_data
. A$ M1 S/ X; A; H/ p+ | 9 T7 x+ p2 x, h7 D8 F
    self.usage.get_quotas()1 p. ~9 j/ D" w8 ?
% ?$ b7 Y* Y5 ]7 Q. L" C
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/base.py", line 115, in get_quotas( o2 z& d- z1 R, x8 Q- T% \3 }# N

" I: I3 C. R. L* `( |- l    _("Unable to retrieve quota information."))
% T. G3 Z1 W+ U; t: Q 7 R  W8 H3 d4 V# u. I4 ]; k) |
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/base.py", line 112, in get_quotas! g  k: X4 N' C5 m* B  N
8 p  a8 m" F- W5 l# L7 o
    self.quotas = quotas.tenant_quota_usages(self.request)
+ b! `1 M+ u+ M8 B( {, B' l+ o . h9 l  o# n0 r5 G2 ?2 K
  File "/usr/lib/python2.7/dist-packages/horizon/utils/memoized.py", line 33, in __call__
" |, ~* R& a8 S$ F) [* ~! Q
0 |2 A% z4 y2 D0 A9 }) \: P    value = self.func(*args)6 e- `" h3 W4 J2 X

% q9 r3 _$ D) h9 E  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/quotas.py", line 115, in tenant_quota_usages
3 l  E0 Y/ B+ E4 ]8 E+ G& a
) M* ^# K4 i4 h! \% N    disabled_quotas=disabled_quotas):, m3 t6 {1 Q' a" C5 F

+ d0 [' ?! ^2 Y  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/quotas.py", line 98, in get_tenant_quota_data
* q2 o7 A( j4 a2 S/ N
1 W3 n& O+ h: _6 \- P( s) H    tenant_id=tenant_id)
" n7 M: P: r/ J2 ?, R; G( V
" D/ f1 Y: ]5 [) X- V0 Q' P  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/quotas.py", line 80, in _get_quota_data
8 M7 Y. @! @  x * T) V+ X' M/ f
    quotasets.append(getattr(cinder, method_name)(request, tenant_id))
+ g0 }1 K8 ~- t" t 8 k2 s. S3 K5 i& k/ _  {3 f  p2 R
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/api/cinder.py", line 123, in tenant_quota_get
" W2 p( n' `, L+ Q9 M $ W. u2 \4 b  `
    c_client = cinderclient(request)
+ j8 v% `! T# l% T$ x" g% F 3 [% ?) a! S: S
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/api/cinder.py", line 59, in cinderclient) ?9 R# m% e, e

# W$ G9 i+ X1 V. @9 [6 p    http_log_debug=settings.DEBUG)8 X2 m* R2 B% y' S. H6 V) V, h

1 a$ b7 V& y: Y6 A  File "/usr/lib/python2.7/dist-packages/cinderclient/v1/client.py", line 69, in __init__
$ m3 L- x3 I/ }; V ( C: Q" D5 t5 e& \
    cacert=cacert)
' i% g0 Z# @; F- @8 n- y* {5 D
* X1 `7 K) ^: j7 b; K) S  File "/usr/lib/python2.7/dist-packages/cinderclient/client.py", line 78, in __init__
/ p9 P8 y" i) v! d' B" u1 m
. e6 q/ h: }9 Z: B1 L2 ?1 I/ j    if hasattr(requests, logging):
2 d9 m' @$ [( z4 h4 } 1 S# b  t9 d6 V
TypeError: hasattr(): attribute name must be string
1 l* _6 H. g% u1 e# Y" i 4 R8 s. b* [7 F" |

) R/ j6 @0 ], W  o' l' r8 r+ @5 J错误信息中指出了 Cinderclient 的 client.py 中 78 行 hasattr() 方法的属性必须是一个字符串。. Y# R$ \, u6 u; o% V, Y
修改代码:
) Y; X; Z' E9 S% d9 R9 W+ J; h4 \" `1 G* u% v2 f

8 v& C$ a5 H9 \9 r: o% c4 r% L
; a, R0 I( O& q2 }; ^2 x# vim /usr/lib/python2.7/dist-packages/cinderclient/client.py( V9 k/ o: `% d0 c
; M4 }  }/ u6 k- r4 o" \
78 if hasattr(requests, logging): # 改为 : if hasattr(requests, 'logging'):
3 o& w+ M$ b$ ?! _' w2 a1 P
6 }. ?; J) g. k* n8 @ 79 requests.logging.getLogger(requests.__name__).addHandler(ch)
  h, P7 s: _* |3 ]" J+ ?: g
% }7 c  n" z$ r' r4 D- |5 ]2 f2 q/ H( v/ E
重新启动 apache2 :' x3 N, a2 X  N, S0 s1 X; Z% R

% w7 d$ Z8 l: e/ k /etc/init.d/apache2 restart
6 a- G% G) |- V# E3 z  }* U( }
, b5 h: a  Q* m/ Y这次访问 dashboard 没有报错,尝试创建 volume 也没有问题了。
0 z" ~: W& t3 \! b) a5 G: z) |, [
11、Unable to attach cinder volume to VM
* G& t& P8 Z/ w4 X+ Q6 u0 {- R; h; ]. x: |
     在测试openstack中的volume服务时把lvm挂载到虚拟机实例时失败,这其实不是cinder的错误,是iscsi挂载的问题。
7 K  h5 b9 K! Q$ @' Y4 U
0 Y/ ]0 e) @  K$ q) f以下是计算节点nova-compute.log 的错误日志:: J7 P3 ?  V  Y, B2 E
& o, X2 P6 Y- P
2012-07-24 14:33:08 TRACE nova.rpc.amqp ProcessExecutionError: Unexpected error while running command.4 ?. ], a9 x+ w4 z
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" z9 L& E6 B- e- Y6 B
2012-07-24 14:33:08 TRACE nova.rpc.amqp Exit code: 255
9 J$ n6 K8 a. R5 c2012-07-24 14:33:08 TRACE nova.rpc.amqp Stdout: ”
1 [% ?% T) g9 O! x2012-07-24 14:33:08 TRACE nova.rpc.amqp Stderr: ‘iscsiadm: No portal found.\n’
. p/ _( j) V; U4 V$ v, @/ \$ m7 l- y* B+ \- i3 L
& t1 I7 [9 g( \/ k, t
) S: n8 }* f5 @& F; l
以上错误是没有找到iscsi服务端共享出的存储,查找了很多openstack 资料说要添加以下两个参数:
" i# r; A# \' G3 M' R4 O$ S$ R6 N8 C% _" {3 D5 p
iscsi_ip_prefix=192.168.80 #openstack环境内网段* r. Q  t* j/ y; E& A

6 Q' \$ ~) A/ A7 c' x- Jiscsi_ip_address=192.168.80.22 # volume机器内网IP. j1 l( h  u) i- @+ n- J" O

4 }' @- t5 S( H3 |, U可是问题依然无法解决,后来发现只要在nova.conf配置文件中添加参数iscsi_helper=tgtadm 就挂载失败。, L1 F0 n4 g' @" T9 y
5 n6 a0 _1 C- j( d/ Y  u1 E
根据这个情况进行了测试查看日志才发现:如果使用参数 :iscsi_helper=tgtadm 时就必须使用 tgt 服务,反之使用iscsitarget服务再添加参数iscsi_helper=ietadm。
" n6 p0 d7 P% F/ t% _; \3 a6 r0 \" K* A/ r
我测试环境的问题是tgt和iscsitarget服务都已安装并运行着(在安装nova-common时会把tgt服务也安装上,这个不小心还真不会发现),在nova.conf配置中添加参数iscsi_helper=tgtadm ,查看端口3260 发现是iscsitarget服务占用,所以导致挂载失败,我们可以根据情况来使用哪个共享存储服务!!将tgt 和iscsi_helper=tgtadm、iscsitarget和iscsi_helper=ietadm保留一个即可。
9 E2 t- A( E1 i9 Q4 i" m. U% J0 Q/ Z6 S( |
12、glance index报错:: U/ ?( V! x7 {9 q. ?
7 z/ j$ ~5 }6 O. x* _1 c
Authorization Failed: Unable to communicate with identity service: {"error": {"message": "An unexpected error prevented the server from fulfilling your request. Command 'openssl' returned non-zero exit status 3", "code": 500, "title": "Internal Server Error"}}. (HTTP 500)9 m3 ^0 Y/ q9 p9 t5 a+ @
: @( h) {% q$ g  e& f2 X& w

! D3 K, R6 s: `0 C  v& S 在 Grizzly 版,我测试 glance index 时候报错:
8 ]0 N6 @" i0 h4 S. k) j% q
' _& ?" c8 E% u) CAuthorization 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)# P3 B6 R% G' |* v8 s! T8 }' r! Z
错误信息指出:glance 没有通过keystone验证,查看了 keystone 日志,报错如下:
3 K0 b3 u# E' j2 E
; a9 J! m  ^9 _6 g* F  _2677 2013-03-04 12:40:58    ERROR [keystone.common.cms] Signing error: Error opening signer certificate /etc/keystone/ssl/certs/signing_cert.pem  m. Q7 _  z! J5 c2 ]; F4 G* `
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')
$ k& f: u/ B8 {2 {9 m3 O$ s2679 139803495638688:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:400:
4 y3 ?$ C( j4 |, _2 H1 T6 j# c1 c  I2680 unable to load certificate
# Z6 J) ?5 l7 {8 t1 f6 ^1 }4 I, s2 n2682 2013-03-04 12:40:58    ERROR [root] Command 'openssl' returned non-zero exit status 3
7 X9 a- a6 {% W4 l# j2683 Traceback (most recent call last):! k  C+ E1 V/ @
2684   File "/usr/lib/python2.7/dist-packages/keystone/common/wsgi.py", line 231, in __call__0 z" O. ^' {) b& ]1 c: w/ q' m
2685     result = method(context, **params)
8 L8 G' y7 h: S9 `- J  k" z5 O& n$ s3 T2686   File "/usr/lib/python2.7/dist-packages/keystone/token/controllers.py", line 118, in authenticate$ I) N! A9 E1 m3 `( F6 n
2687     CONF.signing.keyfile)
6 S- d/ M0 A) {4 G, C9 k$ E% s) Q2688   File "/usr/lib/python2.7/dist-packages/keystone/common/cms.py", line 140, in cms_sign_token  ?: f0 p8 w" Y0 r# b4 k
2689     output = cms_sign_text(text, signing_cert_file_name, signing_key_file_name)
, x, l( U3 s8 t( W/ z: o4 G" X8 {2690   File "/usr/lib/python2.7/dist-packages/keystone/common/cms.py", line 135, in cms_sign_text
* Z8 U6 |. J4 N$ ^2691     raise subprocess.CalledProcessError(retcode, "openssl")# W7 {9 `' j" v) ~
2692 CalledProcessError: Command 'openssl' returned non-zero exit status 3/ _1 q. h/ u$ l3 c; b
在Grizzly 版中,keystone 默认验证方式是 PKI , 需要签名证书,之前的版本都是用的 UUID,改 keystone.conf:8 p$ @' R. B# p3 s) i0 H# s

/ w$ Q& H/ W) O5 ]2 Wtoken_format = UUID7 ?# ~9 s. o! }
在试一次就没有错误了。3 ^6 s2 l, ?, P$ ]0 t
+ D8 I$ o6 O& w/ w1 X% B1 }- d
13、镜像制作* Y9 ]" I7 W2 q$ L3 I% }/ G: t( P
8 Z# g- z# U( h( M9 Z9 c
这里主要强调下windows的镜像制作,因为windows的涉及到加载驱动的问题,就比较麻烦。' z! F  O. Z) N5 B: s; W

$ i, S0 `3 m  O" J9 Z+ q下载virtio驱动,因为win默认不支持virtio驱动,而通过openstack管理虚拟机是需要virtio驱动的。需要两个virtio驱动,一个是硬盘的,一个是网卡的,即:virtio-win-0.1-30.iso和virtio-win-1.1.16.vfd。这里主要强调两个地方: $ T, s# b9 r& ^" h
+ E+ b8 N, y- k/ c" Z, o
1、创建镜像:
, J# H, I' V0 m5 v$ a  T+ v  Y+ h" W3 O+ Q
kvm -m 512 -boot d –drive9 ^8 c  H( Y; Q9 Z7 m: j

" s8 N/ q7 n6 G/ t4 @. }* d2 ^file=win2003server.img,cache=writeback,if=virtio,boot=on -fda virtio-win-1.1.16.vfd -cdrom windows2003_x64.iso -vnc:10                   - m9 Y# r/ O; N" _9 g; K

1 \; N& r% W) U( ?9 r$ i8 Z8 K2 Y
( b3 F) O+ S  z- w3 L: ?, E2、引导系统 :
! D, a1 j2 f, c9 W- h3 ~* H3 M  H3 a' t, R& g4 B# ]
kvm -m 1024 –drive file=win2003server.img,if=virtio,
" ~, g! C6 [, e$ o9 R* T+ u $ ^$ \" `" a+ s* w7 k7 r0 m3 p: `
boot=on -cdrom virtio-win-0.1-30.iso -net nic,model=virtio -net user -boot c -nographic -vnc 8  U$ ]! B! w; f( I
6 Z/ @" `3 ~) E, P4 b& B# _: l* M
" D% I7 O3 x$ K8 U
这里需要注意的地方是if=virtio,boot=on –fda virtio-win-1.1.16.vfd和引导系统时使用的virtio-win-0.1-30.iso 这两个驱动分别是硬盘和网卡驱动。如果不加载这两个驱动安装时会发现找不到硬盘,并且用制作好的镜像生成实例也会发现网卡找不到驱动,所以在这里安装镜像生成后需要重新引导镜像安装更新网卡驱动为virtio。# m  S: \% B0 u$ G& n! r. k

$ Q% E* B+ a  s' \; B14、删除僵尸volume- W- R) E- P! p% {( W
, b9 p) E' T7 Z) W  c
如果cinder服务不正常,我们在创建volume时会产生一些僵尸volume,如果在horizon中无法删除的话,我们需要到服务器上去手动删除,
2 h8 J5 f. m+ S3 S: G2 {# \$ t) d
+ e- d4 G4 L; e, f/ i命令:lvremove /dev/nova-volumes/volume-0000024 W9 g" {' _: {5 I) ?
) f" V; ]% I2 ?. _1 }$ r# d1 _
注意这里一定要写完整的路径,不然无法删除,如果删除提示:
2 L# ?! }1 g9 y, S$ L0 u8 ~
, T5 G3 K2 t% {5 Z2 s0 j' _“Can't remove open logical volume“ 可尝试将相关服务stop掉,再尝试删除。删除完还需到数据库cinder的volumes表里清除相关记录。
 楼主| 发表于 2018-9-2 22:29:09 | 显示全部楼层
以下主要为安装部署过程中遇到的一些问题,因为openstack版本问题,带来的组件差异导致不同的版本安装的方法也完全不一样。经过测试,目前已可成 功部署Essex和Grizzly两个版本,其中间还有个版本是Folsom,这个版本没有部署成功,也没有花太多时间去研究,因为Folsom版本中使 用的quantum组件还不成熟,对于网络连通性还有很多问题,网上也很少有成功的案例,大多数人使用的还是folsom+nova-network模 式。
2 H5 B9 H1 q% V. Z( a( q% h6 V& W" ]+ I, u7 O
到了Grizzly版本,quantum组件才比较稳定,可以正常使用,自己也花了很多时间研究,现在已可以成功部署多节点环境。以下是部署过程中遇到的 一些问题,包括Essex和Grizzly两个版本。国内网上关于这方面的资料很少,很多资料也都是国外网站上看到的。而且很多情况下日志错误信息相同, 但导致错误的原因却不尽相同,这时候就需要仔细分析其中的原理,才能准确定位。遇到错误并不可怕,我们可以通过对错误的排查加深对系统的理解,这样也是好 事。! |+ i7 V8 T1 \' _  j

2 g8 T  Q2 n8 u9 [1 L6 K7 h关于安装部署,网上有一些自动化的部署工具,如devstack和onestack,一键式部署。如果你是初学者,并不建议你使用这些工具,很明显,这样 你学不到任何东西,不会有任何收获。如果没有问题可以暂时恭喜你一下,一旦中间环节出现错误信息,你可能一头雾水,根本不知道是哪里错了,加之后期的维护 也是相当困难的。你可能需要花更多的时间去排查故障。因为你根本不了解中间经过了哪些环节,需要做哪些配置!这些工具大多数是为了快速部署开发环境所用, 正真生产环境还需要我们一步一步来操作。这样有问题也可快速定位排查错误。
# p6 l9 s! w" z5 ?0 Y" j) ?# g2 l$ ~9 P8 B8 I; ~; i; O1 y
本文仅是针对部署过程中的一些错误信息进行总结梳理,并给予解决办法,这些情况是在我的环境里遇到的,并成功解决的,可能会因为环境的不同而有所差异,仅供参考。6 u& P$ }: u! E$ H# Z3 H

& p7 X( u! L- J3 Q+ ~) R, `1、检查服务是否正常
* V$ B+ `8 ^& K0 v6 q+ m9 y2 G, g% ?, Z
root@control:~# nova-manage service list
. U) n0 ^0 V2 n  G8 {
% n  ~" C+ N+ U9 h6 hBinary           Host                                 Zone             Status     State Updated_At
9 y+ |2 M- A7 S/ M0 s0 f
) U% Q8 G- D  p3 J/ T' g% y3 {* inova-cert        control                              internal         enabled    :-)   2013-04-26 02:29:44( a" S1 ^8 {! g0 T0 A# s

" w  [# w5 e6 C8 Cnova-conductor   control                              internal         enabled    :-)   2013-04-26 02:29:42: e2 L) L0 V2 P. K2 Q# t+ L( y

0 B/ _& {& C* E" Vnova-consoleauth control                              internal         enabled    :-)   2013-04-26 02:29:44
5 w* R* w% r. Q9 i) v, K. |  ?
2 I9 R. J, A  r' V/ Knova-scheduler   control                              internal         enabled    :-)   2013-04-26 02:29:47
7 x* _+ B* @1 y" V) V
2 S* E1 r- x. W6 d& v! q, Vnova-compute     node-01                              nova             enabled    :-)   2013-04-26 02:29:46
: k) {4 j; t5 i% X; Q/ ]; _+ @: t8 W! ]( c
nova-compute     node-02                              nova             enabled    :-)   2013-04-26 02:29:46. o* {2 \" B# O7 \
4 V6 [5 b0 S) _* l3 l$ i6 @4 Y
nova-compute     node-03                              nova             enabled    :-)   2013-04-26 02:29:42
+ `8 B) W- ?! V6 {( @, c% }复制代码& u1 l1 H9 A: z# P0 c
如果看到都是笑脸状态,说明nova的服务属于正常状态,如果出现XXX,请查看该服务的相关日志信息,在/var/log/nova/下查看,通过日志一般可以分析出错误的原因。* t( h4 I' ~0 e) w
4 \. M1 I! ?! O4 Z' p% i% h

" F* S0 N3 E# G6 e: k& H2、libvirt错误
' Z8 A8 Z( P; _python2.7/dist-packages/nova/virt/libvirt/connection.py”, line 338, in _connect
8 f. }9 D  j8 j) y8 ~/ m2013-03-0917:05:42 TRACE nova return libvirt.openAuth(uri, auth, 0), O# ~, L' l! N1 n( \5 p% X
2013-03-09 17:05:42 TRACE nova File “/usr/lib/python2.7/dist-packages/libvirt.py”, line 102, in openAuth
! u0 [! I& J7 P3 X+ g! L- b2013-03-09 17:05:42 TRACE nova if ret is None:raise libvirtError(‘virConnectOpenAuth() failed’)
  F; h1 @" b+ J2013-03-09 17:05:42 TRACE nova libvirtError: Failed to connect socket to ‘/var/run/libvirt/libvirt-sock’: No such file or directory
; O4 L$ W, \* G7 u" \) ^: E2013-03-09 22:05:41.909+0000: 12466: info : libvirt version: 0.9.8$ @8 o( K6 K* u6 {
2013-03-09 22:05:41.909+0000: 12466: error : virNetServerMDNSStart:460 : internal error Failed to create mDNS client: Daemon not running" I" n+ y8 j# P
复制代码% K5 t2 Q7 B1 z9 h
解决方案:
8 b: ?: O; [7 F, E, l+ U7 D, [出现这种错误首先要查看/var/log/libvirt/libvirtd.log日志信息,日志里会显示:libvirt-bin service will not start without dbus installed.! o: p  U+ H9 W! B( X. v
我们再查看ps –ea|grep dbus,确认dbus is running,然后执行apt-get install lxc
. g7 U1 Q2 [5 E/ M( b, Q2 {( b 8 j8 _/ I  f3 T& l  l, \" }5 o$ h" l
. k8 f  C" q. V, L/ h. h
3、Failed to add image
8 |; ^2 o+ C* kError:& k) M7 B1 ?( N
Failed to add image. Got error:
The request returned 500 Internal Server Error" Q$ [' r( F; z
复制代码) B  K! M9 g: g$ x  h; d
6 U$ n) l5 U5 w2 s; f. P6 {* ]
, x% b! A6 j1 M* O3 n" c' g1 v
解决方案:* |9 {% Y) P! _  ~; I) q6 E
环境变量问题,配置环境变量,在/etc/profile文件中新增:
  P# j; c5 L3 \' J- j# U   o7 @+ s; X- M/ F  ]# Y
2 ?% p( O) m3 _: ~( ?
OS_AUTH_KEY=”openstack”
, P: _, U+ K# U9 C: ROS_AUTH_URL=”http://localhost:5000/v2.0/”
6 @- S0 c: Q+ {5 O6 L' }* k# D4 FOS_PASSWORD=”openstack”5 A8 g; ?0 O/ G$ g. a
OS_TENANT_NAME=”admin”
4 k: X, m" J& d, ^( _8 ]* rOS_USERNAME=”admin”% ?2 x; {5 a3 F* z- C6 X
复制代码
! r; p2 ?: ?0 O% |# M7 ?' H, f4 ?然后执行source  /etc/profile即可!当然你也可以不在profile里配置环境变量,但是只能临时生效,重启服务器就很麻烦,所以建议你还是写在profile里,这样会省很多麻烦。) H1 |7 S- B; K0 o3 n' [
: ^( Y, j  \' @9 t5 P+ N, ^1 Q2 Z1 y! b
0 G: z' V. [$ w
4、僵尸实例的产生1 B! v( ^6 p/ W- [. Y$ |5 R" e0 T
僵尸实例一般是非法的关闭nova或者底层虚拟机,又或者在实例错误时删除不了的错误,注意用virsh list检查底层虚拟机是否还在运行,有的话停掉,然后直接进入数据库删除。* Z" S- q) G- r/ `
Nova instance not found, f9 U8 }, J/ N1 n
# ~4 t7 R+ j8 N, Z# S. p
Local file storage of the image files.
* n- x% {0 j, M3 O- t
% n* B  H/ G9 c* B4 `; K5 [, m- yError:# j7 e5 t* z5 G8 J+ ?
2013-03-09 17:58:08 TRACE nova raise exception.InstanceNotFound(instance_id=instance_name)
* Q8 D& a7 @5 j' A( }( s2013-03-09 17:58:08 TRACE nova InstanceNotFound: Instance instance-00000002 could not be found.
% t# j# B! r/ n# }: O1 ~2013-03-09 17:58:08 TRACE nova
8 G& M, ]% R# c复制代码$ w. j5 {7 r* s7 g  O
解决方案:
4 M; P3 B7 K- S; d; H* i删除数据库中的僵尸实例或将数据库删除重新创建:: G8 Q" F3 a5 N7 a; o% J& L4 z
a、删除数据库:
2 t" w3 o, \1 _4 @$mysql –u root –p
8 g) S2 w0 ]; O* B6 ADROP DATABASE nova;; |, H  w" C& m! h; E$ F, `* j
3 `- {7 X  j: w" G. h. M
Recreate the DB:8 J; V( b3 ]$ y. w+ V7 Z
CREATE DATABASE nova; (strip formatting if you copy and paste any of this)/ k/ K: u$ {- q$ G4 i8 f' I
GRANT ALL PRIVILEGES ON nova.* TO ‘novadbadmin’@'%’ IDENTIFIED BY ‘<password>’;& J# l7 v% m" q$ O
Quit6 f1 y: n0 ^: h% \% U

6 d$ G: i  q+ q' D( TResync DB
) `3 v( C5 O! X, O' ?; h' M6 x复制代码. `' U1 o% a4 X( e, a
b、删除数据库中的实例:8 I' o8 ?8 Q8 l! }4 @5 U* ^
#!/bin/bash; A% m* Q1 c6 C; K& p
3 y. y( h. e/ h- ]
mysql -uroot -pmysql << _ESXU_9 T. d8 J9 l; M! n# ?

: ^) H$ ?& C' ?7 }8 Quse nova;1 U9 c2 u7 d* b' Z+ L4 f
7 ?0 o9 [/ n  }, x7 b
DELETE a FROM nova.security_group_instance_association
; G5 k4 J8 l4 \9 |1 s6 f. h  P4 d: \6 v2 H" @( w* P! r
AS a INNER JOIN nova.instances AS b
, v/ k' B$ v. d4 u+ T+ B( t2 s  d! x. z/ O6 S* R/ S$ G
ON a.instance_uuid=b.id where b.uuid='$1';# e$ x$ u6 d3 k6 ?

( t2 ~# y3 n% L# X3 |1 ^- ~8 zDELETE FROM nova.instance_info_caches WHERE instance_uuid='$1';6 Q" c% [2 u8 ?& D8 ^8 s
& W5 m2 x( k7 C0 y$ x0 U
DELETE FROM nova.instances WHERE uuid='$1';8 X3 X* K5 I. E$ {; W1 O. X. r+ {
: R# R% V: M4 R- i& p. U3 F
_ESXU_
' j, _( c' t* ?+ o复制代码# G' P' s* d6 @9 z6 w
将以上文件写入delete_insrance.sh中,然后执行sh delete_instrance.sh insrance_id;; P* e4 K2 R9 v- v: Y/ p1 D
其中instrance_id可以通过nova list 查看。
) Q% h% ]0 I  L
# l6 Z5 R4 q& z5 i' [; l' G
) N2 c8 F5 i9 X0 V5、Keystone NoHandlers
1 ]& }% h9 N( B! J9 z
" _7 y* B6 ^: \8 DError  7 B8 u9 N. Q8 _/ o+ u
root@openstack-dev-r910:/home/brent/openstack# ./keystone_data.sh  + @. X5 w; q  s, t+ F3 @8 C2 U
No handlers could be found for logger “keystoneclient.client”  1 F- }( Z* l) t) s$ }- D/ X
Unable to authorize user  ; Q+ L" b. r$ @" V
No handlers could be found for logger “keystoneclient.client”  
$ @4 p3 T5 P3 y5 ?1 M" TUnable to authorize user  % d! }7 Q4 z# u
No handlers could be found for logger “keystoneclient.client”  * J/ Y" `6 t( m
Unable to authorize user  
0 ]* S8 k; C! n$ c, a复制代码1 Z9 Q6 v1 b1 @3 d

2 l% l, [! u0 E% v1 Q( }" ^' I& T# {. I$ {
解决方案:
, c% i1 p/ \4 S- ]8 |3 M出现这种错误是大多数是由于keystone_data.sh有误,其中
9 |$ Z" Z! X# C. Q  Q; Oadmin_token必须与/etc/keystone/keystone.conf中相同。然后确认keystone.conf中有如下配置:* n; y6 H+ B& R* D. H" B- A
driver = keystone.catalog.backends.templated.TemplatedCatalog template_file = /etc/keystone/default_catalog.templates$ |) L' r7 Y" J$ m
4 `; Q" s; `( b2 w0 I
7 s! f1 ]+ j& k. b  `
6、nova-compute挂掉与时间同步的关系- w# D6 J8 ~& K0 v
很多时候发现nova-compute挂掉,或者不正常了,通过nova-manage查看状态是XXX了。7 }1 F, l% I+ H0 N
往往是nova-compute的主机时间和controller的主机时间不一致。 nova-compute是定时地往数据库中services这个表update时间的,这个时间是nova-compute的主机时间。0 Q$ X- t2 j) K. @% ?
controller校验nova-compute的存活性是以controller的时间减去nova-compute的update时间,如果大于多少秒(具体数值代码里面有,好像是15秒)就判断nova-compute异常。
: V. r" ]0 o! o, G. [- T这 个时候你用nova-manage查看nova-compute状态是XXX,如果创建虚拟机,查看nova-scheduler.log 就是提示找不到有效的host 其他服务节点类同,这是nova心跳机制问题。所以讲nova环境中各节点时间同步很重要。一定要确保时间同步!!
/ X; ]/ V$ J& c& G3 S; {如果在dashboard上看nova-compute状态,可能一会儿变红,一会儿变绿。那就严格同步时间,或者找到代码,把上面的那个15秒改大一点。
$ b4 P# [8 v# {$ @3 b2 e6 @
* S2 z& x; s6 e. I. v& D5 B& i$ m3 W, u
7、noVNC不能连接到实例
0 H0 F* N1 W# {  H- Z2 C/ jnovnc的问题比较多,网上也有关于这方面的很多配置介绍,其实配置不复杂,只有四个参数,配置正确基本上没什么大问题,但是装的过程中还是遇到了不少的问题。$ d( C8 M4 W7 C8 P4 p0 q0 c! f
a、提示“Connection Refuesd”8 m8 p7 L, j! Y9 I2 i5 e
可能是控制节点在收到vnc请求的时候,无法解析计算节点的主机名,从而无法和计算节点上的实例建立连接。2 w" @$ H$ c2 p9 V; r' C% D
另外可能是,当前浏览器不支持或者不能访问,将计算节点的ip和主机名的对应关系加入到控制节点的/etc/hosts文件中。  |0 a9 r2 o% X' f' r
b、提示“failed connect to server”
$ d) r% s- @% r9 `- {4 V6 x出 现这种错误的情况比较多,有可能是配置文件的错误,我们的环境中遇到这个错误是因为网络源有更新,导致安装版本不一致,使组件无法正常使用,解决方法就是 使用本地源。另外需要特别说明的是使用novnc的功能需要浏览器支持Web Socket和HTML5.推荐使用谷歌。1 _6 l/ u: I6 J# L1 M7 @6 K

  P1 ]+ \3 Q8 A* w1 v
3 T  X$ s$ E; M% b8、Unable to attach cinder volume to VM
& X0 z: P6 a0 M  x     在测试openstack中的volume服务时把lvm挂载到虚拟机实例时失败,这其实不是cinder的错误,是iscsi挂载的问题。
& L0 A2 i7 k' \) q: N$ g2 u! \以下是计算节点nova-compute.log 的错误日志:
" T1 r! R! j/ W6 W6 |  v. i: B2012-07-24 14:33:08 TRACE nova.rpc.amqp ProcessExecutionError: Unexpected error while running command.
$ s4 R) X+ ]8 s9 H2012-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/ _% A6 ^- B$ _
2012-07-24 14:33:08 TRACE nova.rpc.amqp Exit code: 255
: V' y, [2 @6 H' e( t& D2012-07-24 14:33:08 TRACE nova.rpc.amqp Stdout: ”* \* k  @5 j( ?0 ~
2012-07-24 14:33:08 TRACE nova.rpc.amqp Stderr: ‘iscsiadm: No portal found.\n’
6 e+ _+ W* ~! m复制代码) O) U( f4 A. O& t
以上错误是没有找到iscsi服务端共享出的存储,查找了很多openstack 资料说要添加以下两个参数:3 G  G5 o' b3 D5 ^
iscsi_ip_prefix=192.168.80 #openstack环境内网段
  y& T9 o9 R# A; b- T" _7 k. viscsi_ip_address=192.168.80.22 # volume机器内网IP; h+ `/ a3 |; G, }. c  @8 f
可是问题依然无法解决,后来发现只要在nova.conf配置文件中添加参数iscsi_helper=tgtadm 就挂载失败。
  e1 E% P4 Y! x2 {/ Y0 {0 [$ S根据这个情况进行了测试查看日志才发现:如果使用参数 :iscsi_helper=tgtadm 时就必须使用 tgt 服务,反之使用iscsitarget服务再添加参数iscsi_helper=ietadm。, I, I% Z/ J3 C$ J) U/ D7 V
我 测试环境的问题是tgt和iscsitarget服务都已安装并运行着(在安装nova-common时会把tgt服务也安装上,这个不小心还真不会发 现),在nova.conf配置中添加参数iscsi_helper=tgtadm ,查看端口3260 发现是iscsitarget服务占用,所以导致挂载失败,我们可以根据情况来使用哪个共享存储服务!!将tgt 和iscsi_helper=tgtadm、iscsitarget和iscsi_helper=ietadm保留一个即可。* M' [2 ~- h0 s" Z' a
3 c! s; ^* S. X

; y/ w1 ]3 E7 i& E- e4 B9、glance index报错:7 X1 ^/ P! J9 g2 ^0 _
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)
' D' J# A% O3 \复制代码
% W' V( V3 s  k在 Grizzly 版,我测试 glance index 时候报错:: K! ?& W" O; U& g: `" X
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)0 G4 m3 `" q6 ^9 k5 d3 @
* b) R7 R8 j. G. P
错误信息指出:glance 没有通过keystone验证,查看了 keystone 日志,报错如下:. j2 S9 c2 D; }- X0 F+ l8 d
2677 2013-03-04 12:40:58    ERROR [keystone.common.cms] Signing error: Error opening signer certificate /etc/keystone/ssl/certs/signing_cert.pem2678 139803495638688:error:02001002:system library:fopen:No such file or directory:bss_file.c:398:fopen('/etc/keystone/ssl/certs/signing_cert.pem','r')2679 139803495638688:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:400:2680 unable to load certificate2682 2013-03-04 12:40:58    ERROR [root] Command 'openssl' returned non-zero exit status 32683 Traceback (most recent call last):2684   File "/usr/lib/python2.7/dist-packages/keystone/common/wsgi.py", line 231, in __call__2685     result = method(context, **params)2686   File "/usr/lib/python2.7/dist-packages/keystone/token/controllers.py", line 118, in authenticate2687     CONF.signing.keyfile)2688   File "/usr/lib/python2.7/dist-packages/keystone/common/cms.py", line 140, in cms_sign_token2689     output = cms_sign_text(text, signing_cert_file_name, signing_key_file_name)2690   File "/usr/lib/python2.7/dist-packages/keystone/common/cms.py", line 135, in cms_sign_text2691     raise subprocess.CalledProcessError(retcode, "openssl")2692 CalledProcessError: Command 'openssl' returned non-zero exit status 31 D5 d9 p$ ]" A
9 S# N7 e5 C/ i" x
在Grizzly 版中,keystone 默认验证方式是 PKI , 需要签名证书,之前的版本都是用的 UUID,改 keystone.conf:1 g- g9 w3 N. p/ O% T0 G6 h
token_format = UUID: r! i& a3 n, y7 ]1 j

/ Y+ e6 D5 Z+ \1 f. P# T6 G在试一次就没有错误了。' B6 s# j2 b. H2 C! F& @
: C" a4 E8 ?4 _% n% U0 R

+ Y) F: r8 c+ M; u10、镜像制作% L- d( }2 l& U5 j0 K
这里主要强调下windows的镜像制作,因为windows的涉及到加载驱动的问题,就比较麻烦。
' ~4 w) l8 ~- a' d8 J9 K下载virtio 驱动,因为win默认不支持virtio驱动,而通过openstack管理虚拟机是需要virtio驱动的。需要两个virtio驱动,一个是硬盘的, 一个是网卡的,即:virtio-win-0.1-30.iso和virtio-win-1.1.16.vfd。这里主要强调两个地方:
! F" i) e1 U  s$ V1、创建镜像:
4 l! T& h7 V( e5 lkvm -m 512 -boot d –drive  % A6 Q5 @+ c2 S% d$ l/ w" u
  7 U+ u& d) {/ h2 e% g9 n
ile=win2003server.img,cache=writeback,if=virtio,boot=on -fda virtio-win-1.1.16.vfd -cdrom w
9 k  I4 t" h* n复制代码
7 R7 A8 i$ \( n% }" J7 D) L7 u! y: c
$ i) L8 N; f: Q. J- T" ]* {2 j

( v- g: D# l( a; P, ]% Y; u% O8 [0 X$ b- o
2、引导系统 :3 j! x9 X: k$ P7 X
kvm -m 1024 –drive file=win2003server.img,if=virtio,
$ {: j- b" s% h% Y5 d; o! K8 n4 |7 }
boot=on -cdrom virtio-win-0.1-30.iso -net nic,model=virtio -net user -boot c -nographic -vnc 8
  J9 b; m5 _6 U+ Y4 A4 J复制代码9 e. B* H; E( ^: m; W
这 里需要注意的地方是if=virtio,boot=on –fda virtio-win-1.1.16.vfd和引导系统时使用的virtio-win-0.1-30.iso 这两个驱动分别是硬盘和网卡驱动。如果不加载这两个驱动安装时会发现找不到硬盘,并且用制作好的镜像生成实例也会发现网卡找不到驱动,所以在这里安装镜像 生成后需要重新引导镜像安装更新网卡驱动为virtio。
/ a5 y- F  W) ^- m' P5 G
5 n9 ?" T: X, M, [( Z" O11、删除僵尸volume; G" i0 X) J. i+ H  J# _

# Q; g! _+ \: P2 n! ~. J2 @* S) t5 ], I5 X' H8 h
如果cinder服务不正常,我们在创建volume时会产生一些僵尸 volume,如果在horizon中无法删除的话,我们需要到服务器上去手动删除,命令:lvremove /dev/nova-volumes/volume-000002注意这里一定要写完整的路径,不然无法删除,如果删除提示:“Can't remove open logical volume“ 可尝试将相关服务stop掉,再尝试删除。删除完还需到数据库cinder的volumes表里清除相关记录。
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

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

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

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )点击这里给我发消息

GMT+8, 2026-4-8 21:19 , Processed in 0.059352 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

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