易陆发现互联网技术论坛

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

openstack常见错误

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

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

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

x
以下主要为安装部署过程中遇到的一些问题,因为openstack版本问题,带来的组件差异导致不同的版本安装的方法也完全不一样。经过测试,目前已可成功部署Essex和Grizzly两个版本,其中间还有个版本是Folsom,这个版本没有部署成功,也没有花太多时间去研究,因为Folsom版本中使用的quantum组件还不成熟,对于网络连通性还有很多问题,网上也很少有成功的案例,大多数人使用的还是folsom+nova-network模式。
% m' f' a& v# f: v
, w7 d% s( W  N% u. ^到了Grizzly版本,quantum组件才比较稳定,可以正常使用,自己也花了很多时间研究,现在已可以成功部署多节点环境。以下是部署过程中遇到的一些问题,包括Essex和Grizzly两个版本。国内网上关于这方面的资料很少,很多资料也都是国外网站上看到的。而且很多情况下日志错误信息相同,但导致错误的原因却不尽相同,这时候就需要仔细分析其中的原理,才能准确定位。遇到错误并不可怕,我们可以通过对错误的排查加深对系统的理解,这样也是好事。
0 Z) u" X- N0 |! a( a
( Q4 _0 M6 p0 W" T9 l4 t关于安装部署,网上有一些自动化的部署工具,如devstack和onestack,一键式部署。如果你是初学者,并不建议你使用这些工具,很明显,这样你学不到任何东西,不会有任何收获。如果没有问题可以暂时恭喜你一下,一旦中间环节出现错误信息,你可能一头雾水,根本不知道是哪里错了,加之后期的维护也是相当困难的。你可能需要花更多的时间去排查故障。因为你根本不了解中间经过了哪些环节,需要做哪些配置!这些工具大多数是为了快速部署开发环境所用,正真生产环境还需要我们一步一步来操作。这样有问题也可快速定位排查错误。
5 T0 b* z0 ?! L, _$ ~: @6 k! {" F% b& A  d& S% O. ?
本文仅是针对部署过程中的一些错误信息进行总结梳理,并给予解决办法,这些情况是在我的环境里遇到的,并成功解决的,可能会因为环境的不同而有所差异,仅供参考。
, b4 M# B; @! m: |- a- R  f2 N  K! K* i7 n2 _) l8 A+ U
1、检查服务是否正常:/ `9 H* \( W3 L6 G4 T' e
9 g" x) u5 O; H6 ^* q+ T: Y1 g
root@control:~# nova-manage service list
" k5 V7 r7 y- _& m6 @
5 q3 L/ p  e$ Z: [* e; k: pBinary           Host                                 Zone             Status     State Updated_At) q: h+ a8 T$ M6 o# o4 H

5 S0 p9 u! R4 y) k1 dnova-cert        control                              internal         enabled    :-)   2013-04-26 02:29:444 f7 L5 R- z. n$ ?& e
3 L, e, n( r/ i7 h* ?" t3 w& k4 x/ D1 V
nova-conductor   control                              internal         enabled    :-)   2013-04-26 02:29:42( c* Y( m6 @  E8 Y9 V$ c7 Q1 ]

9 X/ I2 k5 z6 H) G! Y8 knova-consoleauth control                              internal         enabled    :-)   2013-04-26 02:29:44
, d/ ]' b1 h, R( \+ q
. w* p( p3 e; A1 x" C4 [% dnova-scheduler   control                              internal         enabled    :-)   2013-04-26 02:29:476 w$ N% F1 I3 d! }% @4 z' v
# r7 a6 j& H1 ]( w
nova-compute     node-01                              nova             enabled    :-)   2013-04-26 02:29:46
& ~. L4 z, m; E
! o* S) U: O0 q0 p. M0 ynova-compute     node-02                              nova             enabled    :-)   2013-04-26 02:29:46
; C7 \* G) o3 f- m. d1 C " n' s% ~3 n; K' b: f+ r  a7 x
nova-compute     node-03                              nova             enabled    :-)   2013-04-26 02:29:42: }& d+ y( S% V! _' F, x

7 [8 Z- A2 o0 I9 i; ~- i+ f2 I& B% B! o
如果看到都是笑脸状态,说明nova的服务属于正常状态,如果出现XXX,请查看该服务的相关日志信息,在/var/log/nova/下查看,通过日志一般可以分析出错误的原因。
4 f0 C! W$ E7 w
; c1 H  X( b7 N9 _2、libvirt错误
7 P/ |9 _( b, E- x9 A, }5 n2 a$ Y" F3 L
% Z: Y  Y1 r8 M$ D0 W& x
0 P$ Z% `7 O5 q0 d# h
python2.7/dist-packages/nova/virt/libvirt/connection.py”, line 338, in _connect( s( f5 Q+ a9 J0 x: {2 _
2013-03-0917:05:42 TRACE nova return libvirt.openAuth(uri, auth, 0)
1 L  }+ Y5 z) c1 i  T6 M) w2013-03-09 17:05:42 TRACE nova File “/usr/lib/python2.7/dist-packages/libvirt.py”, line 102, in openAuth8 w/ o6 G" f$ N" U: i2 L# i- E
2013-03-09 17:05:42 TRACE nova if ret is None:raise libvirtError(‘virConnectOpenAuth() failed’)
$ S  B! \* Q8 ^2013-03-09 17:05:42 TRACE nova libvirtError: Failed to connect socket to ‘/var/run/libvirt/libvirt-sock’: No such file or directory
0 z1 V5 ^2 D: l2013-03-09 22:05:41.909+0000: 12466: info : libvirt version: 0.9.8
6 L9 ^) R( {9 M6 S% }2 k" F. ~2013-03-09 22:05:41.909+0000: 12466: error : virNetServerMDNSStart:460 : internal error Failed to create mDNS client: Daemon not running
" ^0 O% ^, S+ z, \
! Q/ Y/ O' y2 [  F9 b7 K* P0 `  x" `
解决方案:
& [7 T( ]" q0 t: W8 P3 e% e+ H' T8 r0 N7 k" R' {
出现这种错误首先要查看/var/log/libvirt/libvirtd.log日志信息,日志里会显示:libvirt-bin service will not start without dbus installed.
' `$ z8 F: b- R' }6 i
) v1 `$ q6 J8 }) X% n. }! t0 s$ L6 a我们再查看ps –ea|grep dbus,确认dbus is running,然后执行apt-get install lxc2 h' Q4 i" F2 Q7 n( W

& j8 [4 _0 f7 G6 ], j) C3、Failed to add image  ?( v- ^9 h9 c- G4 B. |
  \+ \5 |# e3 H( ?) `4 _0 N1 R2 G
Error:4 q3 L0 h" u' V* J: N8 C$ @
Failed to add image. Got error:
The request returned 500 Internal Server Error
, r' e5 o  M" x$ F % a. w5 E$ e: e7 y% y
5 Y3 W1 {$ {9 c0 Z2 x7 ]
解决方案:- H6 w8 K' Q( U9 A% E0 c) E
9 G: I4 R! v5 X8 n6 t
环境变量问题,配置环境变量,在/etc/profile文件中新增:7 Y8 i. u# _; }8 x0 t6 @4 K

7 m, y$ c  [1 Y# }OS_AUTH_KEY=”openstack”
9 s6 [+ t4 p7 v, ^! EOS_AUTH_URL=”http://localhost:5000/v2.0/”7 |! W5 {, h" H, u, C9 I
OS_PASSWORD=”openstack”- e; x! d! S+ E7 g
OS_TENANT_NAME=”admin”
& h2 b1 e" _0 g5 G6 pOS_USERNAME=”admin”) E' H" z3 r; W6 }+ J1 R

8 c' J) l0 _' _8 e( U  J
8 u# Y$ q1 g  G8 K% x$ W然后执行source  /etc/profile即可!当然你也可以不在profile里配置环境变量,但是只能临时生效,重启服务器就很麻烦,所以建议你还是写在profile里,这样会省很多麻烦。
& f$ n1 V- r# y3 Q& }+ J: w5 |3 e( @3 \" @, x; H
4、僵尸实例的产生
' r6 H6 n  \" M" ^7 Q& R- Q; D  R" \& [$ B
僵尸实例一般是非法的关闭nova或者底层虚拟机,又或者在实例错误时删除不了的错误,注意用virsh list检查底层虚拟机是否还在运行,有的话停掉,然后直接进入数据库删除。& ~$ w$ l+ w& G: _) q+ F" f& [

3 \, W6 C' z) m+ y( GNova instance not found
1 j; J2 d% }# B5 q
, L# F6 Z! Z2 g, d# BLocal file storage of the image files.
; C; k4 Z+ x& M* j4 g
. [: M% l; p7 Y2 s( C: L  V4 BError:
5 v' ^. m7 g  M; @3 X2013-03-09 17:58:08 TRACE nova raise exception.InstanceNotFound(instance_id=instance_name)2 ~* J6 ~3 f. o( S$ B
2013-03-09 17:58:08 TRACE nova InstanceNotFound: Instance instance-00000002 could not be found.; y( ~1 h* Y! G) N5 M8 }& J7 r+ w
2013-03-09 17:58:08 TRACE nova
8 D7 }' K# T7 D4 w* J6 }. G ' n; @" S* z( T% [9 Q" H$ l

# p1 O5 W5 K- q$ m5 M8 [# C ; v4 T) {( d9 C4 T. |. f/ m0 M

# p$ n& ]8 \$ L0 A: T8 Q解决方案:
; u3 z! f+ \& \. x7 M& x
- j+ Q* D; Y, o. ^+ C删除数据库中的僵尸实例或将数据库删除重新创建:
$ y' i, ?7 d- m/ Z, a' A$ U) J7 t# y3 T) `/ p
a、删除数据库:+ p* C# }9 j, @1 D" Y
/ x) ?; x4 a3 l. [
$mysql –u root –p$ n# Q4 J; v& r" s, i$ `! h+ ?- c( K
DROP DATABASE nova;# H/ R4 U8 n7 l- ]  F

+ _& [4 `+ M" fRecreate the DB:$ y, t# _6 N; v" l3 @) `0 c
CREATE DATABASE nova; (strip formatting if you copy and paste any of this)
( c+ l+ A! |5 S. lGRANT ALL PRIVILEGES ON nova.* TO ‘novadbadmin’@'%’ IDENTIFIED BY ‘<password>’;# W" h1 _6 I8 u. @+ N6 I6 z' l4 t3 s
Quit0 F4 z& t( x: A
8 ?: ?& `, x$ S! D6 z7 u( S& h
Resync DB
0 d/ ]( f( |  T% l1 B ) |! q2 f0 d% J9 Q& F
) @* u7 x, D+ |" m, F4 Y
b、删除数据库中的实例:+ V) `7 H) h' ?3 F
  @# R7 K& g1 R
#!/bin/bash5 b: }/ j' D: b* J

9 `: v/ s6 c: A- `% pmysql -uroot -pmysql << _ESXU_
5 n: _* x+ ~: v& v1 }: M
$ F9 v3 T; |- H5 |8 Q- q4 s2 juse nova;# w; s* i# o! h$ @9 L& S
3 D7 G5 o/ c4 G. i' A1 X- S! q2 x
DELETE a FROM nova.security_group_instance_association 4 @: C+ E7 I7 w, q* w2 y
# r5 |; y* Q0 t3 E/ v
AS a INNER JOIN nova.instances AS b
* @, Z( e9 }* L( y* L/ l( ^ 6 A4 v6 P4 {& O/ J, ~4 T$ l8 _( d
ON a.instance_uuid=b.id where b.uuid='$1';  ~1 i% }8 P( K  t' {* U

+ O7 U* a3 K! C! s9 j- eDELETE FROM nova.instance_info_caches WHERE instance_uuid='$1';% R" ^+ Q$ u# K8 m% l8 W
! X+ u* i2 n! r2 p, x
DELETE FROM nova.instances WHERE uuid='$1';* ]% q1 X/ j7 n7 U5 u

" l. C) S- M4 M1 @+ [_ESXU_: {0 E4 T+ \9 s* L# k

6 q3 T7 e! i7 X# m2 D! f( Q5 t# o8 o- Y
将以上文件写入delete_insrance.sh中,然后执行sh delete_instrance.sh insrance_id;3 d! M) i$ D- j, w$ N1 p$ l
0 Y- f4 q5 A7 o- u9 F# c8 s! {
其中instrance_id可以通过nova list 查看。$ E; u7 u, _: q! v

$ w7 O8 l" r5 u! g  ]# y1 v* P7 }) w: t" B5、Keystone NoHandlers
7 a' k* y4 M: _# q* y5 c
: K- x; @/ }2 P* }+ v' O8 \Error" F' \) S. S, v& K! u, ?
root@openstack-dev-r910:/home/brent/openstack# ./keystone_data.sh$ S3 Q, Z6 m& R: k+ C3 P# |8 h8 }
No handlers could be found for logger “keystoneclient.client”* h. Z( O% n9 f! Q
Unable to authorize user
. H8 _  A  n! I& X! B) p+ TNo handlers could be found for logger “keystoneclient.client”
. A6 d7 L# N7 FUnable to authorize user
: m4 w4 q% |( e* ]+ V% E. gNo handlers could be found for logger “keystoneclient.client”
9 P- m: V) t  w% U! s' LUnable to authorize user
0 _6 q2 `) r# c* d( a" d
8 N# F$ b' {( m, G2 S7 d% L. Q, O
解决方案:) \- w* K: p' e; {2 f1 N/ Q

+ b; w: r6 [, K( Q出现这种错误是大多数是由于keystone_data.sh有误,其中* E9 o0 c. a6 i& |9 E
9 E, p- |- Z8 g. l5 H% t9 A
admin_token必须与/etc/keystone/keystone.conf中相同。然后确认keystone.conf中有如下配置:
% ^! m) K: E' i$ E% A8 [; R; U. k, U: _; \  M' A# V+ R# n
driver = keystone.catalog.backends.templated.TemplatedCatalog template_file = /etc/keystone/default_catalog.templates
( S* X& L! D& O! i) e' `8 S- Q! @# {, i4 S9 D& _$ m# m5 }
6、清空系统组件,重新安装:6 m5 o" Y5 L" R+ E' Z

  k  O8 q; f! H+ ?0 H+ V8 ?& e* \#!/bin/bash% d8 J4 w* M- Q" H
mysql -uroot -popenstack -e “drop database nova;”. Q4 n7 q1 k. ^  s) i
mysql -uroot -popenstack -e “drop database glance;”) r7 y4 K  C  ~7 e
mysql -uroot -popenstack -e “drop database keystone;”
  w) `* `+ E% E& O" Iapt-get purge nova-api nova-cert nova-common nova-compute
- a4 l1 ~) Z) W5 ?nova-compute-kvm nova-doc nova-network nova-objectstore# e$ |  [4 X) f: f4 K! ~
nova-scheduler nova-vncproxy nova-volume python-nova python-novaclient; }$ F7 ^6 n: B! F$ F$ ]
apt-get autoremove  J" l+ L/ y/ g' _2 i# k6 }- J
rm -rf /var/lib/glance7 i, i& U' P  J
rm -rf /var/lib/keystone/* j" l. {, S9 @! Q% f
rm -rf /var/lib/nova/8 F5 o$ ^+ h; s+ w6 E( B- v
rm -rf /var/lib/mysql
# |1 U0 V/ K9 e$ v
1 Z3 p3 W8 g% u6 C7 u( H
: r% g0 X* V" Z+ @6 Z( G' p; J2 x) S可通过执行上面的脚本,卸载已安装的组件并清空数据库。这样可以省去重装系统的麻烦!
# p' X' t$ ~; d* d" S% v
0 E) E- c. ]: k7、Access denied for user ‘keystone@localhost(using password:YES’)
* `7 s. S2 X) Y1 a+ \
0 Q1 N9 _6 L2 A5 U/ V! F# keystone-manage db_sync4 T9 V# }$ [- x4 F) ^1 b) O+ B5 p
7 u2 k8 r7 ~: A8 \. T+ J
File “/usr/lib/python2.7/dist-packages/MySQLdb/connections.py”, line 187, in __init__
3 \# b9 s$ I- t6 @ 1 H2 E/ a2 {& H( F/ D$ i: K' K
super(Connection, self).__init__(*args, **kwargs2)% u7 F( o) h6 ~) Z; \
sqlalchemy.exc.OperationalError: (OperationalError) (1045, “Access denied for user ‘keystone’@'openstack1′ (using password: YES)”) None None
/ G3 B0 _+ ]( N, o0 e4 K
# T0 P0 o* w% x
1 {. |5 W+ o5 @* A, L+ O解决方案:% I6 S4 I9 t/ ~# X5 _" F4 |

1 j& w8 k, a) b% m$ R7 `查看keystone.conf配置文件链接数据库是否有误,正确如下:
/ A+ J% L" i  z) }; q) U/ Q% p4 ~9 D1 x4 M6 }
[sql]
% N% o8 ]1 I, W - K% y7 S, i  K: \9 ?  N
connection = mysql://keystone:openstack@localhost:3306/keystone
6 Z; r! _+ o  L! h1 c! p  X
' Q% B7 q3 I2 h' z1 b6 T4 l9 r5 F
8、nova-compute挂掉与时间同步的关系
" D8 E" h) p) Y! k6 b' y
) F) A" x: I+ t$ Z2 l6 a, I很多时候发现nova-compute挂掉,或者不正常了,通过nova-manage查看状态是XXX了。
4 D; P8 }  U0 c. `. t8 x* ?( y6 _
2 m5 u% n5 N5 ]! k  }. ^+ s往往是nova-compute的主机时间和controller的主机时间不一致。 nova-compute是定时地往数据库中services这个表update时间的,这个时间是nova-compute的主机时间。- j7 Q1 ^$ i- H; H4 V( U
+ g  j$ |  h9 F. K
controller校验nova-compute的存活性是以controller的时间减去nova-compute的update时间,如果大于多少秒(具体数值代码里面有,好像是15秒)就判断nova-compute异常。( W) c; f: `2 D: Y+ @' u
0 n/ W" g  T: A+ b5 i( L  v9 I0 F
这个时候你用nova-manage查看nova-compute状态是XXX,如果创建虚拟机,查看nova-scheduler.log 就是提示找不到有效的host 其他服务节点类同,这是nova心跳机制问题。所以讲nova环境中各节点时间同步很重要。一定要确保时间同步!!
1 E: N7 v1 Z$ ~0 j" O8 e' {" E. n7 c" u8 o# j! k# D6 s( K  X( u
如果在dashboard上看nova-compute状态,可能一会儿变红,一会儿变绿。那就严格同步时间,或者找到代码,把上面的那个15秒改大一点。
$ v6 D( a5 T" o9 z6 Z; Q4 r/ v/ W+ O( i  H+ B+ @0 h3 k: _
9、noVNC不能连接到实例
4 e8 z4 O& `4 i8 `8 v6 B% i1 [3 ~  l" n8 X
novnc的问题比较多,网上也有关于这方面的很多配置介绍,其实配置不复杂,只有四个参数,配置正确基本上没什么大问题,但是装的过程中还是遇到了不少的问题。" }, W+ e# `$ \  e

4 [: w. w7 d$ E. m' Oa、提示“Connection Refuesd”
8 }9 s5 ~) D4 L* t& {' n+ U* `% `0 f
可能是控制节点在收到vnc请求的时候,无法解析计算节点的主机名,从而无法和计算节点上的实例建立连接。
; n5 M4 I: y" z4 U, V0 ?8 O. @# p' {: S# U
另外可能是,当前浏览器不支持或者不能访问,将计算节点的ip和主机名的对应关系加入到控制节点的/etc/hosts文件中。6 u- Q0 h) N/ b( u! z2 G, {
0 V  r$ w" e$ w6 z4 a8 A
b、提示“failed connect to server”
3 r, z6 K# r# X0 q* i0 u6 v* {- W; e7 j, ~, E0 |( K
出现这种错误的情况比较多,有可能是配置文件的错误,我们的环境中遇到这个错误是因为网络源有更新,导致安装版本不一致,使组件无法正常使用,解决方法就是使用本地源。另外需要特别说明的是使用novnc的功能需要浏览器支持Web Socket和HTML5.推荐使用谷歌。- u) F; p' A0 K0 X

7 Q$ ~! M% Z" c9 A2 H10、cinder错误,无法登录dashboard.& i/ F0 p& C8 O: E) i# ^5 h0 s

7 w! K& N1 W% ]! U, k8 n) p3 Q0 F1 g) c出现如下错误:
/ ^3 a; z% N% Q5 C3 ?* c3 [' m* ^0 B) J$ J4 H' f  ]
   ) O1 c; b$ M9 Q4 G' F- Q+ Y
TypeError at /admin/
2 t: t( u( Z* e3 ?1 m- L. z1 b( yhasattr(): attribute name must be string9 x: T# R9 [9 s% o7 o
- L/ f9 H9 e7 K& N
Request Method:   GET& u% s: G5 Y# r
, |2 Z' n9 D) [2 e1 G
Request URL: http://192.168.80.21/horizon/admin/( D$ ]$ b! B6 m
; V7 E7 L, B& g* P5 s8 J+ H1 X
Django Version:   1.4.5/ s& }1 [6 }/ {: P
; X+ l  A' ]; q$ z; n0 P/ c) j
Exception Type:   TypeError
' u, p; G0 N7 @) V+ { ) Z. n$ r1 R+ r: @$ W1 r
Exception Value:
+ s. G5 b+ T0 ?
' H3 \2 x/ n2 c  Uhasattr(): attribute name must be string
  E! k( u6 v" H8 U& o
2 P$ t- H9 c+ d7 F  AException Location: /usr/lib/python2.7/dist-packages/cinderclient/client.py in __init__, line 78
# Q5 q1 {/ q4 P5 T- V+ {& A
3 T9 y+ g( V% D  gPython Executable:   /usr/bin/python5 ~# s! |6 r& s8 b8 t6 i% q3 O6 q
8 k& ?; [; E; V; z& u+ N
Python Version:   2.7.36 q( g; G# i) _" f1 C3 k
8 [' d" p2 n& [  N
Python Path: 7 s* Q1 Q* p2 K% |

# Z: p/ a0 }, A['/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../..',
1 O8 ~4 R/ f& N5 F0 Z
4 _# M6 {, S# ?" _$ E" u/ ` '/usr/lib/python2.7',! V1 H+ N2 y2 j" {
+ B7 ~8 x+ k% d3 D! Q( ~
'/usr/lib/python2.7/plat-linux2',, B4 V/ m& I8 p: l; I! _

0 h- _' K0 z( c7 p '/usr/lib/python2.7/lib-tk',: r: e6 R7 h; {/ N1 K
, m! O, U. v5 Q6 \' V
'/usr/lib/python2.7/lib-old',
5 q  ^( z) E# Y" @ ! T, U" b: H& s. ], K5 ]# e/ Y9 l# r
'/usr/lib/python2.7/lib-dynload',
. l- R! b) `# b' L# d3 A # ]" ?$ ]3 E; z. {! \
'/usr/local/lib/python2.7/dist-packages',3 y, R0 s5 Y5 r; I

  w. |0 j" Y# f/ y, _ '/usr/lib/python2.7/dist-packages',
+ Z$ U  J6 [3 N0 d ' M$ g. d4 l1 Y2 {
'/usr/share/openstack-dashboard/',. [7 Q! P! A8 u) ?( M4 ?8 [9 I7 X

! X3 ?* G  w( S. k% n '/usr/share/openstack-dashboard/openstack_dashboard']6 i0 H% ?6 ~0 k+ F

( t: D* r# P) y! N
% W$ A, _8 K1 J - w7 I  |; N4 U2 U% Q- u! h
Server time: Fri, 29 Mar 2013 12:51:09 +0000
9 b: f; H" [: T+ e* {! f6 M; }* E! e
6 t; a8 a5 G/ _) e2 X# A
" Y, j/ ]3 s8 s( ^& z$ F解决方案  E, ?1 t# E+ G4 B2 ~" B& s( M- c
9 I: L4 f) M* i1 a! J+ K
查看 apache2 的 error 日志,报如下错误:
1 k7 U" }; G1 P
# d& z+ L, d# \: q# d% }
+ b7 x; ~5 l! {; Q/ n; R. xERROR:django.request:Internal Server Error: /horizon/admin/4 e7 @. [$ y& |* l; d7 v% |* k

+ g# J* u8 I- n; U: E) \* jTraceback (most recent call last):$ }& o- ]5 n; |/ K3 F3 m

  @' @; [* @& z7 N( ~  File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py", line 111, in get_response
" F5 x  {* k# w7 A) g
. ?) g# k/ ]: E+ j% H    response = callback(request, *callback_args, **callback_kwargs)! [7 N; \. \& J$ ]% r/ N; O1 q
, D8 x/ v: D  I8 |/ M
  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 38, in dec" B) g, m. C" m! ]/ }6 M$ P

) I+ z9 [7 R$ b$ C# _5 J    return view_func(request, *args, **kwargs)
+ R. Q  Z" F1 l/ I! `8 ?
! s4 d! m4 @3 r; T, j, w  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 86, in dec
; W, Z+ T$ }8 P8 e" |  K# o$ i ; c3 v# Y5 {' T; l$ j9 e$ ?! K
    return view_func(request, *args, **kwargs)* X' _$ @8 P  W
) _  o: W% F  E3 E$ F) k
  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 54, in dec, ]  B- f; b! S7 k( @8 f  p$ L

0 n  Y: z. `$ y; P" P    return view_func(request, *args, **kwargs)8 r/ `! d1 x' s) {+ h& [, ^
- X$ o) }5 T( P9 N; o5 R
  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 38, in dec
) c% w: T3 n( p: J  X% I3 G* U; L2 |
! \+ A6 h" x+ N8 [* y/ O* k    return view_func(request, *args, **kwargs)
& `9 r, T* k+ Q, t$ Q 9 W' ]3 v6 w9 c7 ?- _
  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 86, in dec
( G9 L9 O7 \5 S
  t: @7 e% v# g7 O    return view_func(request, *args, **kwargs)
. k6 z0 p  G  v" D0 a8 i9 u/ Y 3 U. m* t- o9 d) d, v/ Z& ?
  File "/usr/lib/python2.7/dist-packages/django/views/generic/base.py", line 48, in view8 W. [9 P* w( c0 n! P0 H

& j; ^. L7 Z2 a( K% x1 a    return self.dispatch(request, *args, **kwargs)
) k* @4 U3 ], b - G  B- d0 n$ G) F0 U
  File "/usr/lib/python2.7/dist-packages/django/views/generic/base.py", line 69, in dispatch
* Z/ T; V) C# y- O: k3 M& i% i
* x# \3 C3 M0 p+ b    return handler(request, *args, **kwargs)
4 r  t3 \2 U3 L- e  @+ D8 a/ n ) |7 Z9 t" [; m+ D$ Y  P* u
  File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 155, in get" U6 ]6 Q; k  a6 G& D* ^' S
! Z0 z( h, k) T- Y$ D
    handled = self.construct_tables()3 T2 G; M3 l$ p% P) i
* K, y. Z7 C9 J2 n! Z2 O( k$ [1 _
  File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 146, in construct_tables
1 ]3 ]' }% j. e! ^; T 0 n+ R5 z, d, A' T7 K7 C
    handled = self.handle_table(table)* V. }. B7 {3 c) k+ y
! Y" P+ b: N" B
  File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 118, in handle_table
2 F. V/ z9 p+ J( p# Z' w( L
! B9 l6 L+ E$ p: }    data = self._get_data_dict()% g* b; S4 |6 J/ D% H8 G
5 {% a( n: s% y+ R
  File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 182, in _get_data_dict7 \% C* y) q) H& D9 e7 i+ `
& b. Z8 d2 G1 S
    self._data = {self.table_class._meta.name: self.get_data()}# c% \) l4 c( c7 v# D

7 ]5 W$ i  K: x! {) n. @  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/dashboards/admin/overview/views.py", line 41, in get_data+ {& J7 |' j' _( P1 ^% P, k

. d6 ]2 L1 x; B1 u    data = super(GlobalOverview, self).get_data()
9 E$ z& Y$ F: ~
5 K  S3 |& E- E; J) z  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/views.py", line 34, in get_data5 N3 U3 ?+ x) Q# q! q! w1 l7 q
; ]! N9 ~- k2 N
    self.usage.get_quotas()
( @9 ^- p, d# M  y' N7 ~7 b
% E$ A5 M/ H3 j  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/base.py", line 115, in get_quotas+ W' L% r% L1 b: g1 V5 P4 d

6 e/ B/ C7 S& O( r' o$ p# T    _("Unable to retrieve quota information."))9 Y0 H  u, d$ p: @6 e
; h  g- X; M# t5 O' ]1 L. A
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/base.py", line 112, in get_quotas
- ?7 R6 Q& s- h! i( Z2 H
5 F3 m3 B6 R' C: n    self.quotas = quotas.tenant_quota_usages(self.request)
. F% _1 D2 p. z8 f ) P, Q* F* K$ ~3 y1 E2 S& b5 e
  File "/usr/lib/python2.7/dist-packages/horizon/utils/memoized.py", line 33, in __call__
3 _- H" I- L& L+ G9 q / }9 E% H  T; Y  T
    value = self.func(*args)
2 l; k% A& Q# b) g* ~3 L
: y: O7 o2 Q- p  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/quotas.py", line 115, in tenant_quota_usages+ G: a+ G1 X+ V# T
: a* F. ]* V) W8 z2 ]+ X: t- ^
    disabled_quotas=disabled_quotas):, z9 N" V/ f3 X/ O
6 [, P+ z5 n; }) z- n8 M/ u0 Y
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/quotas.py", line 98, in get_tenant_quota_data7 T. r3 |. |; b) }1 p
2 b- w6 ]8 a0 I' N& q9 e8 e) a$ q  q+ ]
    tenant_id=tenant_id)
* i& B* u6 {! E2 F7 G
# M3 v- R0 i. {2 z- ^, `7 W  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/quotas.py", line 80, in _get_quota_data
! K! b! X. y& I0 B, @ : \, a4 t. A3 k7 q- v4 Y3 x
    quotasets.append(getattr(cinder, method_name)(request, tenant_id))' x2 S' K0 d7 F4 l6 i) Z6 B
! y7 k% Y! O3 z* E5 f
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/api/cinder.py", line 123, in tenant_quota_get/ N5 k. Z5 T" q- J: `0 ]0 T9 A5 o- V' C
2 i& ~9 V2 I! D
    c_client = cinderclient(request)8 ^4 ?' _' ?1 ]" O
* Z! k9 w+ ^( O# N
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/api/cinder.py", line 59, in cinderclient
  H1 _8 A+ M& x! f$ V! C : j2 \; L+ Q+ q) x" w! q
    http_log_debug=settings.DEBUG)4 A2 `' h5 d& y6 w; f6 |& E

) w+ ~  T% ]( |) f. n  File "/usr/lib/python2.7/dist-packages/cinderclient/v1/client.py", line 69, in __init__. b4 E: \9 u6 q: u( T, B% s
9 _* P% E! O2 S  t! b; q4 Z
    cacert=cacert)
8 T% g; l: D4 f4 g) U3 F * N8 S: i. R' n$ B: `. K
  File "/usr/lib/python2.7/dist-packages/cinderclient/client.py", line 78, in __init__
) |9 [% ~1 {8 H' k6 a0 J* y  z & I/ z' d- p' q* x
    if hasattr(requests, logging):8 E6 @0 Q0 L4 I6 k4 q
! g+ q$ {2 ~% k4 U, }
TypeError: hasattr(): attribute name must be string
( H+ b7 ^# p$ F  d4 ` & Q* K! j: W5 M8 j& d

# ~; p$ a) Z3 i  z# Q5 Z6 L错误信息中指出了 Cinderclient 的 client.py 中 78 行 hasattr() 方法的属性必须是一个字符串。
' g9 h' U8 U8 L修改代码:. f( T, m5 V- h8 I# ^" k# B' G

, F( P5 _: ^, w* q. N + T7 Y  Z: F/ R+ @7 E& `" e3 P3 ]7 s
6 _5 c' z: y6 L2 I$ p/ y
# vim /usr/lib/python2.7/dist-packages/cinderclient/client.py
8 K. K4 h7 q: m' V: a % ^  ^; V* n$ c9 ^* }$ V
78 if hasattr(requests, logging): # 改为 : if hasattr(requests, 'logging'):1 S( `# c" l/ X3 F* M
+ p8 k5 \$ ^4 I$ Q, S% E
79 requests.logging.getLogger(requests.__name__).addHandler(ch)
' D0 \* ^0 ^" @) _( D & Q+ z7 j. n$ N- [+ w3 M7 E
( D: K6 g1 P. R" D
重新启动 apache2 :, c1 K3 J; {$ u9 _" s9 A$ H6 c* y

- d* t1 a( ]% [8 O1 o& b$ r /etc/init.d/apache2 restart
: q8 \' [$ k: g+ Y8 v# y4 S7 N0 P* h" L9 n; {: Y' s
这次访问 dashboard 没有报错,尝试创建 volume 也没有问题了。
6 u. B! O- m: A1 ~5 A% M
+ F* m- @' P0 s8 _/ Q1 s% Y# b! \11、Unable to attach cinder volume to VM
# S1 g2 J' b; D6 N. j, ^
; C% D' V3 ^4 p2 T( B     在测试openstack中的volume服务时把lvm挂载到虚拟机实例时失败,这其实不是cinder的错误,是iscsi挂载的问题。
% k  A0 ~. t) A9 K" C
* K& M8 M% ~. c以下是计算节点nova-compute.log 的错误日志:
& \- ~* A$ F; J, a' ~/ u  M3 f5 `, z2 y6 |) Z8 b
2012-07-24 14:33:08 TRACE nova.rpc.amqp ProcessExecutionError: Unexpected error while running command.
& K0 _5 `2 @; F6 L5 {* {& V2012-07-24 14:33:08 TRACE nova.rpc.amqp Command: sudo nova-rootwrap iscsiadm -m node -T iqn.2010-10.org.openstack:volume-00000011 -p 192.168.0.23:3260 –rescan
5 y. A/ X, u, i# U$ W0 r, ]2012-07-24 14:33:08 TRACE nova.rpc.amqp Exit code: 255$ x6 w) }- _2 G5 K( a- g
2012-07-24 14:33:08 TRACE nova.rpc.amqp Stdout: ”) j9 i" G7 v9 U  a4 _: \
2012-07-24 14:33:08 TRACE nova.rpc.amqp Stderr: ‘iscsiadm: No portal found.\n’; W; u/ @  f( ^9 A* a" L4 u

/ c+ ]( u. G9 Q$ O# J4 B& K5 ~( k& q 6 l# n" m& \7 o5 n) D$ q( X

. S* B  K/ m. J8 w3 n以上错误是没有找到iscsi服务端共享出的存储,查找了很多openstack 资料说要添加以下两个参数:6 i. o% n/ G$ C! [0 R

0 X: d# Y, b! m7 fiscsi_ip_prefix=192.168.80 #openstack环境内网段- Y1 {' q9 r: }. f& O6 h% R1 _

4 j3 Y5 h# y7 m; |4 @, K' O: Riscsi_ip_address=192.168.80.22 # volume机器内网IP
2 d) Y  r( V: x
$ n6 W+ I! }& k2 t9 h可是问题依然无法解决,后来发现只要在nova.conf配置文件中添加参数iscsi_helper=tgtadm 就挂载失败。
( _5 n0 h- R2 {- J; [$ T: Y
( E! B( U; y$ l% z3 r4 z) [根据这个情况进行了测试查看日志才发现:如果使用参数 :iscsi_helper=tgtadm 时就必须使用 tgt 服务,反之使用iscsitarget服务再添加参数iscsi_helper=ietadm。
# w" i5 F) r! }( v: F% |2 j: T0 {9 N
我测试环境的问题是tgt和iscsitarget服务都已安装并运行着(在安装nova-common时会把tgt服务也安装上,这个不小心还真不会发现),在nova.conf配置中添加参数iscsi_helper=tgtadm ,查看端口3260 发现是iscsitarget服务占用,所以导致挂载失败,我们可以根据情况来使用哪个共享存储服务!!将tgt 和iscsi_helper=tgtadm、iscsitarget和iscsi_helper=ietadm保留一个即可。
( y2 p1 x4 g; @( r* W
3 R. H- t8 ]2 R/ y( `- D12、glance index报错:0 P$ d0 N: A) D; F9 m! G
4 I+ b4 R: F& E6 \' 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)  v( B" `  w( S8 P  M5 M
: |0 }1 Q( A8 Q$ ?
3 E8 |2 b: U4 j) A
在 Grizzly 版,我测试 glance index 时候报错:
5 o$ P: _$ `5 t4 a+ `5 H
8 `6 |/ p4 \6 a7 |( K8 EAuthorization Failed: Unable to communicate with identity service: {"error": {"message": "An unexpected error prevented the server from fulfilling your request. Command 'openssl' returned non-zero exit status 3", "code": 500, "title": "Internal Server Error"}}. (HTTP 500)
2 K4 H7 K7 z- R- [5 ~错误信息指出:glance 没有通过keystone验证,查看了 keystone 日志,报错如下:
# P5 [9 t: A2 {7 q- V) A3 |- o! X$ i4 z  N9 [
2677 2013-03-04 12:40:58    ERROR [keystone.common.cms] Signing error: Error opening signer certificate /etc/keystone/ssl/certs/signing_cert.pem
. v6 Q' n4 p1 x, B  E, ?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')/ `$ e, q+ E4 ~/ n6 g9 {% x5 \
2679 139803495638688:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:400:/ _( e2 T" \- B6 u/ V9 n8 N! y
2680 unable to load certificate" U% z$ W) L7 f; z/ S
2682 2013-03-04 12:40:58    ERROR [root] Command 'openssl' returned non-zero exit status 3- I- d! w) l4 m0 U) S; m
2683 Traceback (most recent call last):! G+ }5 N. ^+ ?4 ^# B
2684   File "/usr/lib/python2.7/dist-packages/keystone/common/wsgi.py", line 231, in __call__0 g- _4 y+ h) {. C; h) t2 M
2685     result = method(context, **params)
5 M, Y# ^. K4 [6 t* K* m2686   File "/usr/lib/python2.7/dist-packages/keystone/token/controllers.py", line 118, in authenticate% I" M: ^( a7 p" a3 ?2 l, x
2687     CONF.signing.keyfile)
. ~. n, C! ~, F& E+ h2688   File "/usr/lib/python2.7/dist-packages/keystone/common/cms.py", line 140, in cms_sign_token
' l: _1 U4 {) j* E5 D+ ^0 I9 }4 d5 \2689     output = cms_sign_text(text, signing_cert_file_name, signing_key_file_name). E" a, v4 P5 m1 Z  H- {+ y! a
2690   File "/usr/lib/python2.7/dist-packages/keystone/common/cms.py", line 135, in cms_sign_text
0 o: N* v% f: Y0 M2691     raise subprocess.CalledProcessError(retcode, "openssl")6 m9 q8 M+ P: C6 ]
2692 CalledProcessError: Command 'openssl' returned non-zero exit status 3* d/ \0 `3 ]; G8 B
在Grizzly 版中,keystone 默认验证方式是 PKI , 需要签名证书,之前的版本都是用的 UUID,改 keystone.conf:8 J- V3 F8 [  L7 c5 v  S

/ U/ a; y0 v. c5 |" h$ n% otoken_format = UUID* u# z4 s- U0 |/ v+ W+ w3 q
在试一次就没有错误了。
' `2 D. c6 r1 S7 y9 q- B& H: e
0 N% j* U! y% q. n- ]0 r13、镜像制作/ c0 R# H4 W) `3 }# V! _/ R/ `9 V

+ ?. z# x9 @" h- {, V( C9 ~这里主要强调下windows的镜像制作,因为windows的涉及到加载驱动的问题,就比较麻烦。7 `7 q6 W+ A3 w9 ?# @% Z* K

( w8 f3 V2 A' G2 O下载virtio驱动,因为win默认不支持virtio驱动,而通过openstack管理虚拟机是需要virtio驱动的。需要两个virtio驱动,一个是硬盘的,一个是网卡的,即:virtio-win-0.1-30.iso和virtio-win-1.1.16.vfd。这里主要强调两个地方:
. A8 s7 J1 m, J) J" v3 @! c% w: I; S' Z) H! p7 N4 h
1、创建镜像:
: T3 g" Z6 s! o3 H0 T% R1 m4 z
7 [$ ^' ^/ u: }9 P3 P3 j6 ]8 f kvm -m 512 -boot d –drive. |8 d$ ~  n" L* I9 J
7 Q. I+ J0 M" \4 p4 r5 V
file=win2003server.img,cache=writeback,if=virtio,boot=on -fda virtio-win-1.1.16.vfd -cdrom windows2003_x64.iso -vnc:10                   / w2 b# _) T& o; R. p! a

  k. \0 M, B: g; e
4 `6 i( ]9 ], O# M2、引导系统 :7 l9 L. s4 \  R6 z

& g. N0 d/ ^7 M" ~# e+ Mkvm -m 1024 –drive file=win2003server.img,if=virtio,+ b# h8 s+ X4 H" P5 K  p; q- n& M4 |

2 B1 a0 m8 N$ s0 N9 Zboot=on -cdrom virtio-win-0.1-30.iso -net nic,model=virtio -net user -boot c -nographic -vnc 8
1 ?0 k* w# G5 A) l2 S, v6 H# q 7 ?, h5 E; W* q# D+ l
% x2 u& m' n5 e. l
这里需要注意的地方是if=virtio,boot=on –fda virtio-win-1.1.16.vfd和引导系统时使用的virtio-win-0.1-30.iso 这两个驱动分别是硬盘和网卡驱动。如果不加载这两个驱动安装时会发现找不到硬盘,并且用制作好的镜像生成实例也会发现网卡找不到驱动,所以在这里安装镜像生成后需要重新引导镜像安装更新网卡驱动为virtio。3 p/ d0 b0 \) @' ^* F

9 V/ z. @( M2 Z! n" T4 Q14、删除僵尸volume& E" \: l# n2 }* u9 e8 u
( s: c# B+ `/ k# d2 C
如果cinder服务不正常,我们在创建volume时会产生一些僵尸volume,如果在horizon中无法删除的话,我们需要到服务器上去手动删除,' u' _2 }4 o" ^, X% Q
3 v; j, X! |5 l0 w7 M8 P
命令:lvremove /dev/nova-volumes/volume-000002
  b0 ^2 e# ]& Z4 T4 n5 g# i
8 D# ]* A/ O: {  T$ i: g注意这里一定要写完整的路径,不然无法删除,如果删除提示:
- Y$ ?- f- s* k& n  {2 ]6 m2 \% h# [! ?- T
“Can't remove open logical volume“ 可尝试将相关服务stop掉,再尝试删除。删除完还需到数据库cinder的volumes表里清除相关记录。
 楼主| 发表于 2018-9-2 22:29:09 | 显示全部楼层
以下主要为安装部署过程中遇到的一些问题,因为openstack版本问题,带来的组件差异导致不同的版本安装的方法也完全不一样。经过测试,目前已可成 功部署Essex和Grizzly两个版本,其中间还有个版本是Folsom,这个版本没有部署成功,也没有花太多时间去研究,因为Folsom版本中使 用的quantum组件还不成熟,对于网络连通性还有很多问题,网上也很少有成功的案例,大多数人使用的还是folsom+nova-network模 式。# n0 U0 ^  \- l; E( e
3 y/ [; B2 M2 k  N! r
到了Grizzly版本,quantum组件才比较稳定,可以正常使用,自己也花了很多时间研究,现在已可以成功部署多节点环境。以下是部署过程中遇到的 一些问题,包括Essex和Grizzly两个版本。国内网上关于这方面的资料很少,很多资料也都是国外网站上看到的。而且很多情况下日志错误信息相同, 但导致错误的原因却不尽相同,这时候就需要仔细分析其中的原理,才能准确定位。遇到错误并不可怕,我们可以通过对错误的排查加深对系统的理解,这样也是好 事。0 f) c1 x, J0 e" n" t

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

1 a% t: K  z! f3 [本文仅是针对部署过程中的一些错误信息进行总结梳理,并给予解决办法,这些情况是在我的环境里遇到的,并成功解决的,可能会因为环境的不同而有所差异,仅供参考。6 [9 U, h# R! p1 ~9 l

4 o7 H: k1 g" s1 E& ~1 x, x1、检查服务是否正常1 {5 U4 u0 F0 V8 r2 T* ]
0 }$ `  d0 d! R5 Y# `- _) l7 [- s" N
root@control:~# nova-manage service list: Y3 w1 n5 |/ d, A  \1 G) N

8 S9 m- p* c2 H2 C! A( KBinary           Host                                 Zone             Status     State Updated_At2 I$ n$ N; M8 R% Y

$ u; m% P! c+ a; t! t! Mnova-cert        control                              internal         enabled    :-)   2013-04-26 02:29:44
. [1 ]  @% m9 _6 }: u- e" R* {; ^4 `2 g) q1 x: q  F$ ]
nova-conductor   control                              internal         enabled    :-)   2013-04-26 02:29:42- x& E0 X: S) b

) T' g! @& V! F9 ]' n1 Znova-consoleauth control                              internal         enabled    :-)   2013-04-26 02:29:44
' B. l( u, _# O; A  t# |; X9 h1 v5 v  G4 l$ a( Q9 I
nova-scheduler   control                              internal         enabled    :-)   2013-04-26 02:29:473 @; F+ @* K( d' S5 I
+ Q) @3 d) B9 a1 n6 e
nova-compute     node-01                              nova             enabled    :-)   2013-04-26 02:29:46
# D: S$ K) q9 T% w
# g9 R1 z/ K6 l: jnova-compute     node-02                              nova             enabled    :-)   2013-04-26 02:29:464 J/ l- V3 i3 ?# t, z

" B7 a$ r* Y* U0 h+ o7 Dnova-compute     node-03                              nova             enabled    :-)   2013-04-26 02:29:42+ H3 }) o5 o- b' R# ^' j
复制代码
$ f0 w) z- l5 U8 }/ v3 V如果看到都是笑脸状态,说明nova的服务属于正常状态,如果出现XXX,请查看该服务的相关日志信息,在/var/log/nova/下查看,通过日志一般可以分析出错误的原因。  ]" b4 R( t# f6 q# K7 C

4 o9 Y  H- k0 |5 H# B% o5 a' f+ Q/ q4 \& v8 b4 @
2、libvirt错误
) Y6 f" ~, @/ d6 C& r+ A: f) x( A% hpython2.7/dist-packages/nova/virt/libvirt/connection.py”, line 338, in _connect
# A- r! ~, I8 ]7 _4 l: l+ O6 d2013-03-0917:05:42 TRACE nova return libvirt.openAuth(uri, auth, 0)9 |, w( A- d& k6 ~/ p
2013-03-09 17:05:42 TRACE nova File “/usr/lib/python2.7/dist-packages/libvirt.py”, line 102, in openAuth
: x, }% Y: _9 A8 c: R6 U# V; P( a$ S2013-03-09 17:05:42 TRACE nova if ret is None:raise libvirtError(‘virConnectOpenAuth() failed’)
# }7 q( u6 x! Q9 L* e2013-03-09 17:05:42 TRACE nova libvirtError: Failed to connect socket to ‘/var/run/libvirt/libvirt-sock’: No such file or directory7 q) Z0 P% w) |7 M) [! C6 Y
2013-03-09 22:05:41.909+0000: 12466: info : libvirt version: 0.9.8
" t# u. F8 o3 ^8 j$ _7 `8 e& z2013-03-09 22:05:41.909+0000: 12466: error : virNetServerMDNSStart:460 : internal error Failed to create mDNS client: Daemon not running. E  O( o. e" H/ e- d; x
复制代码
$ b- Y% f* K, G) Y解决方案:
2 {& }. U8 S9 y2 y% \. R出现这种错误首先要查看/var/log/libvirt/libvirtd.log日志信息,日志里会显示:libvirt-bin service will not start without dbus installed.
8 Z+ g9 L4 b  n我们再查看ps –ea|grep dbus,确认dbus is running,然后执行apt-get install lxc- k5 q( w# N  G1 j" k$ a3 P

. n* @  j# T/ q2 z5 Z6 L' f' ]3 X. K) y" P
3、Failed to add image% V" s, |* Q8 x  ?1 v% @5 Y
Error:3 R8 ^. }& A2 a* M9 \
Failed to add image. Got error:
The request returned 500 Internal Server Error
; a9 t! g2 ?, S) A! u; K复制代码, a) e$ H4 f4 [8 x& V$ h  `
6 n" r6 ?$ k3 s5 n7 Z7 J! B+ ]) N1 R; U

& u, U  l" v1 C& X! F$ i6 r6 z解决方案:" w$ |2 _! V+ A# d/ D0 [* t
环境变量问题,配置环境变量,在/etc/profile文件中新增:+ a5 o- V) q- l: T6 E/ r

* b' Z. T& |/ [
* I3 J+ f1 u% E4 K" pOS_AUTH_KEY=”openstack”
) E* b+ `% x0 _$ u2 p& sOS_AUTH_URL=”http://localhost:5000/v2.0/”; L9 J6 W$ z& N. E) ~! F
OS_PASSWORD=”openstack”
4 d4 W8 A6 ^* {  \OS_TENANT_NAME=”admin”
9 ?3 Z% C3 Q0 \8 ]+ zOS_USERNAME=”admin”6 V* k3 ~5 E+ F9 T. Z
复制代码
- F' C  e. {4 e* e然后执行source  /etc/profile即可!当然你也可以不在profile里配置环境变量,但是只能临时生效,重启服务器就很麻烦,所以建议你还是写在profile里,这样会省很多麻烦。! _2 q6 `, Q0 J" ?* n: d

6 J! m& l( Y1 @; F8 A
# P' l* Z7 O& o8 @+ U4、僵尸实例的产生
( F5 ~  P2 x' A3 j6 Z! y2 a2 D/ ^9 `僵尸实例一般是非法的关闭nova或者底层虚拟机,又或者在实例错误时删除不了的错误,注意用virsh list检查底层虚拟机是否还在运行,有的话停掉,然后直接进入数据库删除。
/ o+ P4 P" d( `9 Y2 {( {8 [Nova instance not found
' ~  B9 d- J9 E: c7 Q3 B% H3 i5 o* r! O, k5 D
Local file storage of the image files.
, ^6 M$ t( ?3 W+ f' [. N# D3 m# l$ Q8 B+ }
Error:. c+ J- C' S+ a! v
2013-03-09 17:58:08 TRACE nova raise exception.InstanceNotFound(instance_id=instance_name)6 G( A. _# Y& q' D/ G; w
2013-03-09 17:58:08 TRACE nova InstanceNotFound: Instance instance-00000002 could not be found.
! V& a' Q/ ^. C$ W5 @  A* s2013-03-09 17:58:08 TRACE nova9 y7 g, l& s7 ^4 _5 `
复制代码
2 A6 T- R; d- ]4 }解决方案:, C8 a1 r# J1 A0 D% y
删除数据库中的僵尸实例或将数据库删除重新创建:% v4 k3 b5 T7 }) K5 Y9 V
a、删除数据库:/ g: S: ~) x* ]; P$ z6 M" @* G8 u
$mysql –u root –p
, j2 p: \& H& e  t% r0 @: ^DROP DATABASE nova;" ^, r$ ?  I. L# i. N
( e  O: Q( {( d/ {
Recreate the DB:
# }: O5 S, Q/ H. U/ Q1 ZCREATE DATABASE nova; (strip formatting if you copy and paste any of this)
+ J  g9 m3 ]  C) l8 h7 [GRANT ALL PRIVILEGES ON nova.* TO ‘novadbadmin’@'%’ IDENTIFIED BY ‘<password>’;
: S9 M# z9 j  LQuit
1 d+ x. W/ a) o+ x; x# d: V; u
5 C+ Z  y: D  h8 H7 aResync DB3 N6 l! W- E8 I" @
复制代码' ~8 \" [( X/ b' S7 m  W
b、删除数据库中的实例:7 `- x4 e# |' h+ F# |; h/ G+ \# j
#!/bin/bash9 m; z8 L0 V8 u, A6 x9 V4 O( V
8 v7 W+ ]+ t( B) C
mysql -uroot -pmysql << _ESXU_
+ f) z8 ~7 J+ d/ S0 i! C- ?2 H9 d( H
use nova;
9 a# A9 e* U# I: l1 U5 t  t9 A2 c0 `; x# i$ B/ i
DELETE a FROM nova.security_group_instance_association
6 Q3 ]& }+ I$ e# o- m. W& o1 m2 Q* t& Y+ n5 D, I9 V6 i
AS a INNER JOIN nova.instances AS b
& K) j  K3 r- l8 Y* A, X
, l6 ]  h* f0 [. _ON a.instance_uuid=b.id where b.uuid='$1';9 N, [( Y3 R1 f+ D3 H

1 y0 K7 y0 j+ S4 TDELETE FROM nova.instance_info_caches WHERE instance_uuid='$1';
$ c4 V" t* T7 P5 |+ ?! W/ _
3 b! d9 d6 D; a, l& ?: a4 WDELETE FROM nova.instances WHERE uuid='$1';5 Z, B) W# \. T6 k
" n: }% M: c5 Z9 T6 [5 |0 v
_ESXU_
) _% h# D5 |. _: A* X1 t复制代码
3 g- L# l0 T: n- a/ ^( Q9 N% C* `将以上文件写入delete_insrance.sh中,然后执行sh delete_instrance.sh insrance_id;4 Z1 L) x8 _; f# M( [2 y9 D) ~
其中instrance_id可以通过nova list 查看。+ i6 s. x0 z! r$ p

# g& _: r, u* d# |9 `  Q$ q3 K3 i, V4 G+ x9 n4 ?. `7 p4 r
5、Keystone NoHandlers
/ A5 [/ K' W* y9 Q5 n+ J9 ^% R/ H0 S  F- K0 c6 X
Error  9 X! M1 a+ o' Y6 B- v
root@openstack-dev-r910:/home/brent/openstack# ./keystone_data.sh  
/ O+ |" @9 H8 Q  ?6 M$ GNo handlers could be found for logger “keystoneclient.client”  0 k3 r' ]& g5 Z; X6 D
Unable to authorize user    O4 j5 x& |$ k, f- r+ h: s1 u; A
No handlers could be found for logger “keystoneclient.client”  1 [6 Y6 c8 Y5 {# O3 D9 Q; A2 Y* Q  n
Unable to authorize user  
+ t/ g" [9 |0 k! V% zNo handlers could be found for logger “keystoneclient.client”  . C. \; C9 W+ B0 V# j8 k
Unable to authorize user  & l/ n) {  F0 `( w7 {9 \$ E; A- \
复制代码
. c- R" Y3 T- T+ v7 A4 L 9 D1 q# k, X  y
, |& H8 o9 z& p; \6 I  K
解决方案:5 c  O7 y4 J+ d1 {0 p
出现这种错误是大多数是由于keystone_data.sh有误,其中% b8 `# n6 F5 c2 v9 I
admin_token必须与/etc/keystone/keystone.conf中相同。然后确认keystone.conf中有如下配置:) o4 E/ P2 j7 o5 V' e+ ]
driver = keystone.catalog.backends.templated.TemplatedCatalog template_file = /etc/keystone/default_catalog.templates
; P$ r* F1 l4 G8 H, m" W
3 t; i* j3 U7 j* A& ^3 B  a6 Z3 m6 e. l( n8 a3 ~
6、nova-compute挂掉与时间同步的关系* m' E9 R$ T3 v8 j( b7 h
很多时候发现nova-compute挂掉,或者不正常了,通过nova-manage查看状态是XXX了。
" j+ @6 q, x+ X; S* S5 V2 `往往是nova-compute的主机时间和controller的主机时间不一致。 nova-compute是定时地往数据库中services这个表update时间的,这个时间是nova-compute的主机时间。
3 C- s: `/ u" P+ [1 mcontroller校验nova-compute的存活性是以controller的时间减去nova-compute的update时间,如果大于多少秒(具体数值代码里面有,好像是15秒)就判断nova-compute异常。, m2 H8 r+ G3 R  I7 {
这 个时候你用nova-manage查看nova-compute状态是XXX,如果创建虚拟机,查看nova-scheduler.log 就是提示找不到有效的host 其他服务节点类同,这是nova心跳机制问题。所以讲nova环境中各节点时间同步很重要。一定要确保时间同步!!4 j, c$ K# y7 |( M9 x0 v
如果在dashboard上看nova-compute状态,可能一会儿变红,一会儿变绿。那就严格同步时间,或者找到代码,把上面的那个15秒改大一点。
9 b, P4 n! |' S8 U; `4 I4 | : F4 {; i' p+ Z3 W6 X' X( Q
& j& Q8 b, `% T9 f! f
7、noVNC不能连接到实例/ k/ X: C- r- p
novnc的问题比较多,网上也有关于这方面的很多配置介绍,其实配置不复杂,只有四个参数,配置正确基本上没什么大问题,但是装的过程中还是遇到了不少的问题。
1 i1 D4 I5 r/ ^+ k# C' Fa、提示“Connection Refuesd”
- M- n6 Y- s! L# `$ ?' v可能是控制节点在收到vnc请求的时候,无法解析计算节点的主机名,从而无法和计算节点上的实例建立连接。0 S$ Y5 \* ~: e+ l5 D
另外可能是,当前浏览器不支持或者不能访问,将计算节点的ip和主机名的对应关系加入到控制节点的/etc/hosts文件中。% N0 v' Z" U6 `8 }) `( r4 S: A
b、提示“failed connect to server”
7 f" @, A. P6 y$ y出 现这种错误的情况比较多,有可能是配置文件的错误,我们的环境中遇到这个错误是因为网络源有更新,导致安装版本不一致,使组件无法正常使用,解决方法就是 使用本地源。另外需要特别说明的是使用novnc的功能需要浏览器支持Web Socket和HTML5.推荐使用谷歌。7 |/ _3 f" n$ h/ D: D% H
" K5 G9 r' u0 s& U' p

4 h1 N% y7 B0 H8、Unable to attach cinder volume to VM
+ U1 v2 ^' T& U6 z% ?' u     在测试openstack中的volume服务时把lvm挂载到虚拟机实例时失败,这其实不是cinder的错误,是iscsi挂载的问题。
) r6 o9 q8 Q& b% ?以下是计算节点nova-compute.log 的错误日志:3 X2 r* R; Q! j  {, d* K2 p
2012-07-24 14:33:08 TRACE nova.rpc.amqp ProcessExecutionError: Unexpected error while running command.
2 I. Y* j9 Z& H. s+ `- U0 i0 C* 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  b( A1 V8 J% [9 {# B7 a
2012-07-24 14:33:08 TRACE nova.rpc.amqp Exit code: 255, {1 c2 ~! k1 W
2012-07-24 14:33:08 TRACE nova.rpc.amqp Stdout: ”/ l7 f  `$ j+ v* {
2012-07-24 14:33:08 TRACE nova.rpc.amqp Stderr: ‘iscsiadm: No portal found.\n’
' x4 K' |3 z5 R/ O7 T# q% D6 ~! C' P( i复制代码
" K- g. }8 G8 T以上错误是没有找到iscsi服务端共享出的存储,查找了很多openstack 资料说要添加以下两个参数:6 g8 h7 n' i0 k/ j
iscsi_ip_prefix=192.168.80 #openstack环境内网段
! y" E3 U: w+ |  |- C: `iscsi_ip_address=192.168.80.22 # volume机器内网IP; R0 ^* \6 h7 S0 ]7 q
可是问题依然无法解决,后来发现只要在nova.conf配置文件中添加参数iscsi_helper=tgtadm 就挂载失败。
& k: X$ z& }+ B9 z6 A根据这个情况进行了测试查看日志才发现:如果使用参数 :iscsi_helper=tgtadm 时就必须使用 tgt 服务,反之使用iscsitarget服务再添加参数iscsi_helper=ietadm。
: L/ y5 s/ o, u我 测试环境的问题是tgt和iscsitarget服务都已安装并运行着(在安装nova-common时会把tgt服务也安装上,这个不小心还真不会发 现),在nova.conf配置中添加参数iscsi_helper=tgtadm ,查看端口3260 发现是iscsitarget服务占用,所以导致挂载失败,我们可以根据情况来使用哪个共享存储服务!!将tgt 和iscsi_helper=tgtadm、iscsitarget和iscsi_helper=ietadm保留一个即可。- J! B2 @1 i  D; g& {
+ r# j6 u- L4 F) J+ s
6 j8 n+ Q# I2 u9 D+ m
9、glance index报错:
6 o. k+ z5 i/ `# @! E( z+ D( uAuthorization 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)3 E& a5 Z* d- m  D3 B+ s; Q# h/ m
复制代码$ k0 [( n* O( j  ^- J( s% s* V
在 Grizzly 版,我测试 glance index 时候报错:
% @" N( v. [) I  x* |# lAuthorization 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)$ T$ l7 A" d2 H$ I
1 N2 P& s7 \: [% I
错误信息指出:glance 没有通过keystone验证,查看了 keystone 日志,报错如下:- L/ d% W# [; J4 ]. K
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 32 [. c8 K+ P+ O6 c9 u/ [4 [: A

3 p- i5 Z* G" H8 P8 W  ]在Grizzly 版中,keystone 默认验证方式是 PKI , 需要签名证书,之前的版本都是用的 UUID,改 keystone.conf:
# @1 [4 R# G. \6 Z# C% Xtoken_format = UUID7 h- w/ [1 J9 N& g4 I

- x8 e! J- p9 Q+ G& }2 w在试一次就没有错误了。
1 p% h; z& ?- R0 n% X- `* p; {
# S; n# G6 ?( h( a2 S/ G: P8 e9 G8 z$ D; h6 `1 I1 \0 X) r
10、镜像制作
4 G* F: z7 k1 w! C这里主要强调下windows的镜像制作,因为windows的涉及到加载驱动的问题,就比较麻烦。- p' j5 W' _: s
下载virtio 驱动,因为win默认不支持virtio驱动,而通过openstack管理虚拟机是需要virtio驱动的。需要两个virtio驱动,一个是硬盘的, 一个是网卡的,即:virtio-win-0.1-30.iso和virtio-win-1.1.16.vfd。这里主要强调两个地方:
: V9 B5 T4 e, r3 w% h: f4 n1、创建镜像:- D0 |8 H  ?% l2 n8 O( I
kvm -m 512 -boot d –drive  4 d. H! @8 ]7 _, H
  
- \! o8 @1 e( h; B2 yile=win2003server.img,cache=writeback,if=virtio,boot=on -fda virtio-win-1.1.16.vfd -cdrom w! T. G+ K! ^  e( J( c
复制代码
7 k# |5 N3 J9 [: y+ \3 `# e. b' ~3 v6 z/ u  w1 u' F

, _- i$ e" i6 U3 R
. A: D: a1 b, u  K" U  g
6 [! n8 A: m  K) z$ }- E. I2、引导系统 :
( ^0 I7 t0 u3 t" V$ skvm -m 1024 –drive file=win2003server.img,if=virtio,
( @- Q# Q+ j( d7 s  ?$ v' J' ]& C- R
2 u& M4 G5 L/ d# Iboot=on -cdrom virtio-win-0.1-30.iso -net nic,model=virtio -net user -boot c -nographic -vnc 8
6 I9 g5 d) n0 ~7 j+ j, W( f; H复制代码/ {7 O  N3 y" G+ C3 ?& Y
这 里需要注意的地方是if=virtio,boot=on –fda virtio-win-1.1.16.vfd和引导系统时使用的virtio-win-0.1-30.iso 这两个驱动分别是硬盘和网卡驱动。如果不加载这两个驱动安装时会发现找不到硬盘,并且用制作好的镜像生成实例也会发现网卡找不到驱动,所以在这里安装镜像 生成后需要重新引导镜像安装更新网卡驱动为virtio。
6 W1 g5 G) o0 n0 H5 G; ~7 z4 A" c$ v$ T5 ^( b
11、删除僵尸volume! H' O2 v, n; F5 x

9 s" g4 C. J' B& R$ Y( D" L0 ~4 Q; @  _: G+ ~3 q
如果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:23 , Processed in 0.066113 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

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