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

openstack常见错误

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2018-9-2 15:02:15 | 显示全部楼层 |阅读模式
以下主要为安装部署过程中遇到的一些问题,因为openstack版本问题,带来的组件差异导致不同的版本安装的方法也完全不一样。经过测试,目前已可成功部署Essex和Grizzly两个版本,其中间还有个版本是Folsom,这个版本没有部署成功,也没有花太多时间去研究,因为Folsom版本中使用的quantum组件还不成熟,对于网络连通性还有很多问题,网上也很少有成功的案例,大多数人使用的还是folsom+nova-network模式。
- I1 b6 c) d& i! b8 E6 s
- @' I6 g+ @0 a( j到了Grizzly版本,quantum组件才比较稳定,可以正常使用,自己也花了很多时间研究,现在已可以成功部署多节点环境。以下是部署过程中遇到的一些问题,包括Essex和Grizzly两个版本。国内网上关于这方面的资料很少,很多资料也都是国外网站上看到的。而且很多情况下日志错误信息相同,但导致错误的原因却不尽相同,这时候就需要仔细分析其中的原理,才能准确定位。遇到错误并不可怕,我们可以通过对错误的排查加深对系统的理解,这样也是好事。
+ B3 f1 t: f8 r8 v& s) Z4 {5 _, F5 @0 T! {$ J& ^
关于安装部署,网上有一些自动化的部署工具,如devstack和onestack,一键式部署。如果你是初学者,并不建议你使用这些工具,很明显,这样你学不到任何东西,不会有任何收获。如果没有问题可以暂时恭喜你一下,一旦中间环节出现错误信息,你可能一头雾水,根本不知道是哪里错了,加之后期的维护也是相当困难的。你可能需要花更多的时间去排查故障。因为你根本不了解中间经过了哪些环节,需要做哪些配置!这些工具大多数是为了快速部署开发环境所用,正真生产环境还需要我们一步一步来操作。这样有问题也可快速定位排查错误。
8 h& A0 {( w/ i; o8 k( M3 b3 s- K+ {
本文仅是针对部署过程中的一些错误信息进行总结梳理,并给予解决办法,这些情况是在我的环境里遇到的,并成功解决的,可能会因为环境的不同而有所差异,仅供参考。
: d  [# z! o0 z9 `4 ~! A7 Y
; E; H- @% x. a" ?1、检查服务是否正常:
0 X  f! y( o3 C3 [: e, I( G: c+ ]$ e* D- k2 p% S
root@control:~# nova-manage service list
3 b+ |" t! l; R$ y ! e  [# O, y: ~
Binary           Host                                 Zone             Status     State Updated_At* N7 G* N- z- {0 {, X3 S

0 d! E5 @( }- Z  h6 Unova-cert        control                              internal         enabled    :-)   2013-04-26 02:29:44* B: `8 k! B( u

9 l$ d0 g- \( D) W* f5 hnova-conductor   control                              internal         enabled    :-)   2013-04-26 02:29:42, Y3 ^7 D) C* z5 |6 H8 B
% s5 W3 h% I: L
nova-consoleauth control                              internal         enabled    :-)   2013-04-26 02:29:445 S8 W1 k% B+ k0 C& {1 P/ g- o; L

$ I$ X0 y" H4 ^# w% W& J3 ~nova-scheduler   control                              internal         enabled    :-)   2013-04-26 02:29:47
% s( S: P/ R: K1 J" c4 |2 N3 W ; u# C$ r9 P. f( c
nova-compute     node-01                              nova             enabled    :-)   2013-04-26 02:29:46* T! _/ {% s# O
5 F5 V' S/ d7 y/ l, B3 K5 k  J
nova-compute     node-02                              nova             enabled    :-)   2013-04-26 02:29:46# p" |# P) _8 ?
& [' H; B& S/ @: o$ u
nova-compute     node-03                              nova             enabled    :-)   2013-04-26 02:29:42
* d4 Z. j  j: Z. ?) B
8 r! U9 z  o( ~' J6 c
/ G& x; `# @) L如果看到都是笑脸状态,说明nova的服务属于正常状态,如果出现XXX,请查看该服务的相关日志信息,在/var/log/nova/下查看,通过日志一般可以分析出错误的原因。
* W1 s; c; o7 E+ r& s9 L$ k4 E$ h4 u- c& s* K4 r' J& a
2、libvirt错误  T( W7 ~/ }9 x( ~) o& L
) `2 ~9 P. B' V/ r

: N1 w2 D2 [: E* z6 Z) V9 `0 g( u* H/ V: U6 `
python2.7/dist-packages/nova/virt/libvirt/connection.py”, line 338, in _connect3 `6 @1 Y7 f2 B5 H1 _
2013-03-0917:05:42 TRACE nova return libvirt.openAuth(uri, auth, 0)
3 j" ^7 ]; Y. G2013-03-09 17:05:42 TRACE nova File “/usr/lib/python2.7/dist-packages/libvirt.py”, line 102, in openAuth6 i; r5 [; [; O6 g
2013-03-09 17:05:42 TRACE nova if ret is None:raise libvirtError(‘virConnectOpenAuth() failed’)
' `' g( e) B" V0 J# D7 H% G9 x2013-03-09 17:05:42 TRACE nova libvirtError: Failed to connect socket to ‘/var/run/libvirt/libvirt-sock’: No such file or directory2 I7 P! u* i" A
2013-03-09 22:05:41.909+0000: 12466: info : libvirt version: 0.9.88 ~5 N) Z0 C2 }! I; F! l$ @; m
2013-03-09 22:05:41.909+0000: 12466: error : virNetServerMDNSStart:460 : internal error Failed to create mDNS client: Daemon not running% {5 i, n  r1 ^+ X+ f  R
" G8 o# w: n, H, ]- Q& N

3 ^0 ^# {( ]# R' ^解决方案:% q3 b- L, `8 @% D7 {; n- W. Q# b: T
1 g7 m. s" w) c# m, H' @1 k. v9 G
出现这种错误首先要查看/var/log/libvirt/libvirtd.log日志信息,日志里会显示:libvirt-bin service will not start without dbus installed.1 E9 d. S9 B! N5 k1 J+ t

+ Q) G, m" c) @  }2 C: T我们再查看ps –ea|grep dbus,确认dbus is running,然后执行apt-get install lxc
0 S0 f4 N& Z& N9 L
" E' P3 q, s# `# r3、Failed to add image
3 H9 F* u. N% Y, h, V( F. _: o
, t! ~7 z- F! A4 z: VError:
$ Y) L  `  ]7 S$ ^& Y( Q; V7 kFailed to add image. Got error:
The request returned 500 Internal Server Error% g9 U# Q9 f  J
) b8 u$ u# x  j* g$ s  C% k7 w  C0 I
8 k4 Z; |" ]# O6 o, y* N: H5 E
解决方案:
4 u/ b8 W6 }, N" p4 t' N/ N4 r
* b1 r( K' t) U* V# D环境变量问题,配置环境变量,在/etc/profile文件中新增:
' @9 m2 C6 \8 K1 V6 U! a
; k! ?  W) J" z# X0 u; T0 kOS_AUTH_KEY=”openstack” - Y' l+ |" ^" o$ W
OS_AUTH_URL=”http://localhost:5000/v2.0/”
: M8 r/ E( j4 z- m! V- y; w" ZOS_PASSWORD=”openstack”9 _4 l8 Y% i. R
OS_TENANT_NAME=”admin” & |9 B  Z4 W& y6 U
OS_USERNAME=”admin”0 a5 P8 ]8 t3 b

* {: w0 s- M6 J
" a  r5 H: m/ m0 {) T# e然后执行source  /etc/profile即可!当然你也可以不在profile里配置环境变量,但是只能临时生效,重启服务器就很麻烦,所以建议你还是写在profile里,这样会省很多麻烦。* }# F" y- C; U* \) p

% `! g' F4 S& i; h! e* h9 M8 L4、僵尸实例的产生3 o9 w' D: M' b/ c. L8 L& @

. Q& r$ |3 ~9 C僵尸实例一般是非法的关闭nova或者底层虚拟机,又或者在实例错误时删除不了的错误,注意用virsh list检查底层虚拟机是否还在运行,有的话停掉,然后直接进入数据库删除。
8 x: w5 R% R1 {3 e
6 @3 f2 z9 s9 [1 L* Z; E9 ONova instance not found
! E! z- `- f9 x- q, T7 X' X " M3 P$ v4 w8 v
Local file storage of the image files.
! H% O  y  i0 x+ k: o0 t 2 D% `% N0 R$ [) ?( i
Error:+ V0 |$ i& q: z, F
2013-03-09 17:58:08 TRACE nova raise exception.InstanceNotFound(instance_id=instance_name)1 b9 R1 P. h& w. ]+ t
2013-03-09 17:58:08 TRACE nova InstanceNotFound: Instance instance-00000002 could not be found.
9 w5 o, ]$ ~7 B% C2013-03-09 17:58:08 TRACE nova
3 M! n7 k: d$ V, {( @' F" \
+ v7 T3 \& K' G6 R" x) s! z' c4 }( H" E2 b0 Q: [8 \. ^9 }
. n- z  ~2 }8 b
8 N: }7 `4 a- ^* x/ @
解决方案:
9 e  S! Q; Y0 T8 ]0 U2 }
3 T. e" F' G7 q  |7 ^. N删除数据库中的僵尸实例或将数据库删除重新创建:& N! C. {! k0 n4 {/ H) c5 c  c
0 L  K: U1 G0 K. h6 L
a、删除数据库:
8 n! }3 S* J5 j/ t" t$ F# E, U% A+ G7 {2 V; S0 p6 L
$mysql –u root –p
' y  T  a# k' b- j7 g( G( mDROP DATABASE nova;2 u% F/ ~  e. m

0 Q# O" f6 n* H" p  r, i) dRecreate the DB:
) p6 B$ F  r' u3 M; d- HCREATE DATABASE nova; (strip formatting if you copy and paste any of this)
0 s3 R6 u* K' a* q0 a) D& zGRANT ALL PRIVILEGES ON nova.* TO ‘novadbadmin’@'%’ IDENTIFIED BY ‘<password>’;; P2 d6 v+ g2 c( @% Z! v( |; G5 o
Quit
* g' p0 I5 q& V/ G" X5 N
! l. l8 |* ]6 S) \) LResync DB
9 m: u8 A* ^' N7 ^- l, m 3 V! l; Q, ]# l1 K& w( R9 D

0 x. y- y- e9 L7 nb、删除数据库中的实例:
" ^5 G* m1 s1 R, B8 U2 B: [) K2 j
" ?  G- e7 u  m#!/bin/bash
, y0 n$ U: [- g7 \/ j5 K4 [! M * Z- V3 G9 M( ~. y) D1 p, s
mysql -uroot -pmysql << _ESXU_( m( ]* L- V3 @  }! {0 s' K
+ y% X; S6 P7 n1 D/ V8 q) j+ F
use nova;
" }3 Z7 M% ~) g/ l
3 W  I% [& p; \" k* ]DELETE a FROM nova.security_group_instance_association ' l6 g* N5 s4 d( v
$ k- N1 m9 p; y# }. A0 ?1 ^
AS a INNER JOIN nova.instances AS b* `$ u# S, j! V( }. ~! v' ]- m
: G3 d0 X; J7 W% x
ON a.instance_uuid=b.id where b.uuid='$1';
1 H5 l0 v; j* z1 ~' M/ P
( n4 h+ S9 y* K# m) yDELETE FROM nova.instance_info_caches WHERE instance_uuid='$1';
: e( Y1 P4 A$ h% R, j8 y  q
. x  Z5 c( `/ zDELETE FROM nova.instances WHERE uuid='$1';
" O" w' T% S6 \& r# ^' N1 x0 o 6 k/ V: d( F+ ?+ C! p+ t
_ESXU_
7 k) s7 I+ \, N- h& y6 E 8 A0 I% D- g* @- u' e: [& ?# h7 e! a$ _

! n9 t1 p! i1 ?% ], X: |/ l将以上文件写入delete_insrance.sh中,然后执行sh delete_instrance.sh insrance_id;* _! r/ M6 `$ U1 C

; l, D1 [4 |; Z其中instrance_id可以通过nova list 查看。
! P% e3 K' ?: P1 I5 V; m
9 T  x. z- E: z0 h5、Keystone NoHandlers
' x5 ]8 k+ S1 i$ {0 N  q' B* F( i) S
" S, b' g9 q- M/ nError. d& @0 \0 ~! W% b  G$ a& l8 V) ^
root@openstack-dev-r910:/home/brent/openstack# ./keystone_data.sh
2 V( ~0 g6 S2 m2 fNo handlers could be found for logger “keystoneclient.client”$ Y  ]% S; M0 b- W. ~0 H
Unable to authorize user+ u! v" \2 J( h
No handlers could be found for logger “keystoneclient.client”
* q/ ?  R' o4 w% H/ PUnable to authorize user8 B% h) i! O8 B- _8 _
No handlers could be found for logger “keystoneclient.client”% m5 U: W, M* k# X# F
Unable to authorize user6 I6 E' R( V* E# f" D* O
" V2 k0 R6 j: k& l. p
" }9 k; r9 s( k% l; J5 e
解决方案:9 Y8 n2 X& C4 P! _8 j/ j

. [  L7 ?  E6 G- y: t出现这种错误是大多数是由于keystone_data.sh有误,其中8 O' v7 I7 J( K; d! R, ^

  G; I( l( C1 \# S% C' [admin_token必须与/etc/keystone/keystone.conf中相同。然后确认keystone.conf中有如下配置:0 T( g3 E9 \# t; ~
# h2 h/ D; h: T; n$ Y
driver = keystone.catalog.backends.templated.TemplatedCatalog template_file = /etc/keystone/default_catalog.templates( M. P7 Y0 l' f% J9 M/ K5 S
/ v6 d# j! W- R- _6 t
6、清空系统组件,重新安装:, {! B2 @1 k5 e6 U7 A. u# z  h  H( a

; {& ]: g8 z2 T/ v/ H! g#!/bin/bash
" J9 K' }, v% d/ Y4 {; P3 p! Cmysql -uroot -popenstack -e “drop database nova;”
) F1 V4 Q' W" m, S3 D0 w5 Mmysql -uroot -popenstack -e “drop database glance;”
% q; G* z6 f* Q! q. Q% y9 jmysql -uroot -popenstack -e “drop database keystone;”
; Q( z0 Z+ I0 G. ~' a8 Aapt-get purge nova-api nova-cert nova-common nova-compute
" i2 q0 k, q. p" F' lnova-compute-kvm nova-doc nova-network nova-objectstore' K* f9 a+ V  k' ^
nova-scheduler nova-vncproxy nova-volume python-nova python-novaclient+ F. G) B) z  v2 E: |
apt-get autoremove
! Z# t- j8 d, T7 C! m5 Y' rrm -rf /var/lib/glance
0 V* r  T$ U3 ^5 {rm -rf /var/lib/keystone/2 `9 x% {) M6 g# H
rm -rf /var/lib/nova/: ~5 J3 }: c; a: R# e! K5 M- A3 R
rm -rf /var/lib/mysql
7 `( J0 D: I% f, ]7 s- L5 [/ ]. ~
. G, r& z" {9 W- E
/ V8 a" q# W$ J) A- {5 M可通过执行上面的脚本,卸载已安装的组件并清空数据库。这样可以省去重装系统的麻烦!% v3 H) o/ [2 ]; c" f6 Z% H

% |! m* l4 M( K. q# @2 [/ x7、Access denied for user ‘keystone@localhost(using password:YES’)& a: x- s! n) w; S' J" C& a( v

' w) _# W0 |! v# keystone-manage db_sync
9 f' C. {+ s# t) M + ~) L- }& S* y2 G6 k  O
File “/usr/lib/python2.7/dist-packages/MySQLdb/connections.py”, line 187, in __init__; Y" [0 n6 [- M: C8 g
3 {# s- l: J5 f/ n
super(Connection, self).__init__(*args, **kwargs2)
/ M$ }8 B* s; s# Q* Hsqlalchemy.exc.OperationalError: (OperationalError) (1045, “Access denied for user ‘keystone’@'openstack1′ (using password: YES)”) None None
, I' f* e( {5 w. O
. @1 T' K, E- r( K" Z' l& T! B, E& h( e1 A; z
解决方案:: N1 O# R$ c+ Z# e1 M: P+ p* Y$ v
. Z# x' Y" s8 B3 L5 z& F
查看keystone.conf配置文件链接数据库是否有误,正确如下:
: T  q% o: {" T8 H0 a
- m3 Y; H( q' ?0 J1 n3 x[sql]( v+ ^4 f! d, C: k- ~

% h4 ^7 v( U! K' A connection = mysql://keystone:openstack@localhost:3306/keystone( X- u* S; y- x, s

1 f6 D( z8 j! E  Q7 B; N2 M! v+ `. ]/ X. o/ d; l! ^
8、nova-compute挂掉与时间同步的关系& E1 d. c+ m6 ]5 {

. C3 `( V5 {5 d9 J. b3 ?很多时候发现nova-compute挂掉,或者不正常了,通过nova-manage查看状态是XXX了。4 [% q3 }7 ^, W' D5 ^; n5 W

. x1 h  T: Q/ ^0 x# y+ }往往是nova-compute的主机时间和controller的主机时间不一致。 nova-compute是定时地往数据库中services这个表update时间的,这个时间是nova-compute的主机时间。( ~5 F0 u' q  W/ O1 O( F5 v
2 h$ _8 l6 f* y
controller校验nova-compute的存活性是以controller的时间减去nova-compute的update时间,如果大于多少秒(具体数值代码里面有,好像是15秒)就判断nova-compute异常。* i9 [# j: r8 ~) I' V, I! K5 n$ p
, F# R0 A1 k: |7 s  H+ }
这个时候你用nova-manage查看nova-compute状态是XXX,如果创建虚拟机,查看nova-scheduler.log 就是提示找不到有效的host 其他服务节点类同,这是nova心跳机制问题。所以讲nova环境中各节点时间同步很重要。一定要确保时间同步!!
& M; u, H. V* ^, Z" k7 R5 w3 C( M3 {* Z
如果在dashboard上看nova-compute状态,可能一会儿变红,一会儿变绿。那就严格同步时间,或者找到代码,把上面的那个15秒改大一点。% d! k$ J4 p& e

2 [. k& G5 s7 D5 x$ j# b' n% g9、noVNC不能连接到实例0 D; e; B9 m! I7 u& [
3 _- V6 d( J, f6 V
novnc的问题比较多,网上也有关于这方面的很多配置介绍,其实配置不复杂,只有四个参数,配置正确基本上没什么大问题,但是装的过程中还是遇到了不少的问题。4 w0 p, {) _6 J& u
$ N9 r3 A0 g7 [, B; F4 J
a、提示“Connection Refuesd”3 I. M; f# b3 q  F0 s0 Y5 {8 O

; L' f3 a/ m9 g. N: i可能是控制节点在收到vnc请求的时候,无法解析计算节点的主机名,从而无法和计算节点上的实例建立连接。
! P9 R! C3 A9 q  D) C7 W' K9 s1 _  n1 U# G2 C
另外可能是,当前浏览器不支持或者不能访问,将计算节点的ip和主机名的对应关系加入到控制节点的/etc/hosts文件中。
0 J" T  m; ?9 m* T: j; H: L1 }* b  q
b、提示“failed connect to server”9 A7 i  X$ y5 a, r7 o
4 ^5 @- h$ C( i3 b+ ]$ E
出现这种错误的情况比较多,有可能是配置文件的错误,我们的环境中遇到这个错误是因为网络源有更新,导致安装版本不一致,使组件无法正常使用,解决方法就是使用本地源。另外需要特别说明的是使用novnc的功能需要浏览器支持Web Socket和HTML5.推荐使用谷歌。* w# C: v7 z- g' }* r$ Q

; J" _/ }/ ~0 ~2 B* q1 f. W" c* ^' ]10、cinder错误,无法登录dashboard.9 |7 u1 J6 m! N# w* d3 A- ]/ v& W
* C6 Y" h; r% X6 e: v
出现如下错误:
2 S: k1 b; v1 u! V. b( b0 A
) M/ x9 x$ G& K, n/ S. _   
) r( I) O' r7 U2 Z+ y, o; yTypeError at /admin/ + D/ k! }6 Y$ E+ U; p
hasattr(): attribute name must be string2 M9 L+ W* E: I& b
9 f- F7 f8 \) E4 _
Request Method:   GET+ c" I  E0 y. z  @0 a1 y

# r6 s0 ~, `6 M/ T6 ]( N9 ARequest URL: http://192.168.80.21/horizon/admin/
: o" |4 A, l- _* }7 J; I% E$ N/ L
) ]# F4 n: w- `& h6 o! S& _# LDjango Version:   1.4.5
) |) k! P6 D# [ * a; {5 x9 A! S+ X7 y5 C* F
Exception Type:   TypeError5 q, C: D/ i3 O& K  u' W: L
. d' n& y3 d! \
Exception Value:
! W8 h6 s6 h, j, M- w
$ l7 }. v0 I) r1 i& _6 U; x+ ~hasattr(): attribute name must be string) F& K+ V3 o* L$ S# K2 g, }7 [

2 u% g. ^& r( E1 BException Location: /usr/lib/python2.7/dist-packages/cinderclient/client.py in __init__, line 78
3 Y+ V. t8 W) \, b0 Q
2 ]* z& U6 U4 o/ f5 WPython Executable:   /usr/bin/python# G" T. Z/ P  c5 I
" k# ?( q7 B5 J- C- O0 O! ^! N! Z
Python Version:   2.7.3
- b8 A& c& d0 K2 _  ] 6 ?( F" x, r8 L9 \. r% p3 ~
Python Path: 4 m# G( h' }4 e% w0 K
6 G! A7 Y0 }" u6 h
['/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../..',
7 c6 k; r; u& ]( s7 V- x. b9 E) P # K* W) T. H' H
'/usr/lib/python2.7',( e! r) H$ Y4 _0 n

2 p2 P' C( W9 A# S) k. ^1 T8 C' R '/usr/lib/python2.7/plat-linux2',
  T3 r) ?% D' d 2 ?+ L# v) x5 g1 }9 H0 n
'/usr/lib/python2.7/lib-tk',
  A: w1 d0 c5 K
) B4 M' ]% H5 S) G% @- a+ u  c8 W5 c '/usr/lib/python2.7/lib-old',7 U% B' C, w3 m& D3 c( k& l1 @# e7 n

7 V2 a# O. H* U. g4 ` '/usr/lib/python2.7/lib-dynload',
4 s  E  Y, i% G  m8 [8 n7 ]5 ]
$ q( K" E" Y/ S; E '/usr/local/lib/python2.7/dist-packages',* y: C8 k# w8 U, W
: Z# F' o0 v2 O9 g
'/usr/lib/python2.7/dist-packages',
& K& d( B  z9 ` + k) }- @7 [% X' E  \9 R
'/usr/share/openstack-dashboard/',
1 i2 x- S) W( U- @( b ; i4 @6 L5 G+ y2 I
'/usr/share/openstack-dashboard/openstack_dashboard']* y6 x4 p8 c$ i+ f( B

, ~( m  E2 q- a8 i) g5 L
" E" x8 O& W7 U: _ ( C5 _+ g8 p5 W3 e1 r9 Y2 r5 a$ R
Server time: Fri, 29 Mar 2013 12:51:09 +00001 Q0 v, e/ I6 E# |
  @! J7 E3 {1 ~8 k6 X& d) f

1 X! l/ f' n* {, @$ _解决方案
1 p* p1 I3 p( {( `0 ?8 a2 ?5 X) f/ I. a+ u4 I# `6 y# T2 u/ a
查看 apache2 的 error 日志,报如下错误:; q6 Z7 [5 Y9 j4 f

7 c9 @6 o. Q+ T2 F( D. b( v1 X5 C5 N
+ F- x* @' a% r$ j6 ]% GERROR:django.request:Internal Server Error: /horizon/admin/- `$ J9 r. g7 G& b; v( ?

7 T! H' e- b0 L; c$ p1 oTraceback (most recent call last):" F0 ^# ]& z) V+ S7 p: ]

' D1 |/ r9 j9 j' v7 X. |  File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py", line 111, in get_response
6 Y$ d( r  B0 _" n% c' v0 ^   O% R! d5 ]" t8 D$ |6 {/ l
    response = callback(request, *callback_args, **callback_kwargs)3 f# D: {: k- o

  b1 _+ d5 X( w. A2 v( }9 B  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 38, in dec
. V6 H' Y3 _7 B3 L% ?# ]6 I: T9 } 8 h# e( P) X% K
    return view_func(request, *args, **kwargs)
0 z/ }, \9 A7 y  A# V& N1 V& w
" ^# V" r, ?0 v& U  y  }  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 86, in dec, D! d3 d) K. D- F* Q

9 Q+ x- _$ B% A    return view_func(request, *args, **kwargs)4 G5 ]8 l- n8 H

$ B- K, z% l7 V1 z% x  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 54, in dec
; w. e" j0 W, C- n  ^" }- x) m' v
+ s. J3 E5 F2 B9 y$ c0 \    return view_func(request, *args, **kwargs)
. U- a- Z6 b- ]5 ~3 O" O3 ~ ' a& _$ u7 z( N$ V' s2 r' a* N" y
  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 38, in dec3 S. y  C# [+ h# M0 M4 P2 K! n

  w: Y. L7 u" [1 |/ Z    return view_func(request, *args, **kwargs)2 S- z: D. I" }/ T

+ L* D" O5 Q1 \1 e0 X  File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 86, in dec
% G9 c# x& e1 \' @$ w$ V' f
; i5 E" z6 ^+ b* `    return view_func(request, *args, **kwargs)& r- r" K2 |, O8 k5 s  t2 T
. N( Z8 K" ~% t1 Q
  File "/usr/lib/python2.7/dist-packages/django/views/generic/base.py", line 48, in view0 m& a) M- |5 C' C: \0 _3 x
1 H+ j7 G7 x% J2 Z# D! m
    return self.dispatch(request, *args, **kwargs)
) ]) J- h4 ]* p2 k # |/ w; I# h1 S& g
  File "/usr/lib/python2.7/dist-packages/django/views/generic/base.py", line 69, in dispatch2 f; l1 r& m  [# Y: k3 K
  f+ L, O% A* _7 V
    return handler(request, *args, **kwargs)
; }+ H7 n" b3 R " n- ^, q# n* l% F
  File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 155, in get
8 O$ r  T! O  h 8 A" ]8 r- |% \$ J/ N
    handled = self.construct_tables()
* y& }" @) h; y0 l7 n5 A
) T  e& y4 L7 u5 a  File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 146, in construct_tables
6 P4 |9 ]# Y8 R: s8 c! A
. n7 W1 L4 y% \& `/ L9 H    handled = self.handle_table(table)
2 u$ j( {# d  D7 E9 l6 B3 |5 j 5 b' h" a- C6 m. T9 _+ E: Q
  File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 118, in handle_table: [- t; n- G6 K( w, P% \: j$ D

+ Z; n( B) ?9 K% `; {. R6 A    data = self._get_data_dict()
, ?. j+ j; A0 W1 a
& E. h: k. r4 B9 }: ]& u  File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 182, in _get_data_dict6 p4 k1 J% o. D' R7 S% g* W

* E9 `! c% j$ ~- ]( k+ k& N! m    self._data = {self.table_class._meta.name: self.get_data()}% A5 z7 U3 b0 d* K
8 g2 t1 }* _" p; G
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/dashboards/admin/overview/views.py", line 41, in get_data
2 u1 x; W3 z3 T' s6 ?2 }! J
" B. h9 k+ u, u, U$ [/ v6 V    data = super(GlobalOverview, self).get_data()
! z4 h+ v& k, B: d# c' l) h) E9 C( U
( V7 A% S$ N$ Y8 y+ t" ?& ~  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/views.py", line 34, in get_data- W; C2 }; A8 _& X$ g4 E* N
; i! |% _$ C, Q5 ]/ k0 c* T
    self.usage.get_quotas()
% ^5 ?3 U$ E* g; L; I/ M. M! @% {2 Q7 g 9 C5 M8 h! Z3 B2 s) E7 }
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/base.py", line 115, in get_quotas  Z* j$ x1 d2 i3 G: U! z5 d9 o
! @7 G5 o6 P" i" N
    _("Unable to retrieve quota information."))( T( g# a1 |8 H# f& `6 A

- u; g+ ?( U4 r2 L# }# j  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/base.py", line 112, in get_quotas9 ]8 j+ d% T- @/ I8 b
$ p! T/ P6 W% k; r( ?9 }
    self.quotas = quotas.tenant_quota_usages(self.request)* S/ S7 r" S0 r8 s1 I$ ?
1 {8 T, e4 I/ m
  File "/usr/lib/python2.7/dist-packages/horizon/utils/memoized.py", line 33, in __call__  l( j; |" g& {

: b7 [" F, }7 I: h! `' H    value = self.func(*args)
* }0 }) x7 O+ ]* I: ]3 }! q9 P, k2 j % M% E* w6 y9 l. d
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/quotas.py", line 115, in tenant_quota_usages
8 {" G% I$ ?6 e) `7 }/ ~- f ' B! I: F6 L& J- e: s
    disabled_quotas=disabled_quotas):
/ V- a+ I. k. F. {: g+ q : \( @* E' n( N9 @) D( z# j2 A! X
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/quotas.py", line 98, in get_tenant_quota_data0 k# M2 [+ l& W- Q* J; D
1 H0 M( T' P' c8 ^" s/ e; u
    tenant_id=tenant_id); Y; `0 l; w# H( l7 n# i- k0 o- D

; @4 L& Y9 R7 w4 n* u3 [  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/quotas.py", line 80, in _get_quota_data
+ N6 C  ]: q+ w# c! X
5 l. T, R' |" _: C    quotasets.append(getattr(cinder, method_name)(request, tenant_id))+ A$ y* C* [) [- {1 k3 N9 E! n. l

6 F! j, |1 l% T' L# J/ e  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/api/cinder.py", line 123, in tenant_quota_get6 K& V" @/ m( p( A; T2 q4 w

. z# p, b9 ~" k) D: h- v- ~    c_client = cinderclient(request)
9 }& I* T! y5 D  i3 C 7 s7 Z" Q+ F1 z6 c
  File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/api/cinder.py", line 59, in cinderclient
* M! n3 I% V1 a9 Q3 P" u- O/ m
% N& Y) g( X# a3 G! i8 C    http_log_debug=settings.DEBUG)
" l% f. m2 I+ L! m" ]; F
# q1 y% O0 `6 Y9 q) G  File "/usr/lib/python2.7/dist-packages/cinderclient/v1/client.py", line 69, in __init__& s6 R1 s9 {: x

- z, Q+ Y0 k- Y    cacert=cacert)
& P, b: \  e6 f6 [: ^ & A# {4 k" i3 ?- ?3 r. \9 A
  File "/usr/lib/python2.7/dist-packages/cinderclient/client.py", line 78, in __init__
& b, v6 e' ?% E- T4 s
$ M" J8 W/ t( T' x" B4 d    if hasattr(requests, logging):
: Z+ `1 Q$ G; `( E" p' h
! p. Y! i2 [& G! D$ K- k: Z1 S- JTypeError: hasattr(): attribute name must be string
% d/ B4 J) v  w2 {# o
" J7 m! J6 y2 R4 m" L0 @& [$ a; y7 i, O3 o3 \/ Q$ O
错误信息中指出了 Cinderclient 的 client.py 中 78 行 hasattr() 方法的属性必须是一个字符串。
* N# c( D1 l, x0 i/ O/ V修改代码:
3 n% s: u3 j+ q' M
; u  q! X2 f, h/ C* N' n7 n
& \# k/ {& V4 W+ W
; \1 C  r) w9 j0 x# vim /usr/lib/python2.7/dist-packages/cinderclient/client.py! s- N1 J4 J$ R5 e( [% t& ^
& V( U! n& A/ e$ @1 K1 k
78 if hasattr(requests, logging): # 改为 : if hasattr(requests, 'logging'):
# R7 ^3 b! P9 _+ F4 U2 U: x- K+ e
$ C3 _( ]' `+ c( q 79 requests.logging.getLogger(requests.__name__).addHandler(ch)& J+ d4 I. a9 j$ e4 |4 S
/ ^& j0 @( `! a- R8 m( k

+ C( N& t* Y" D! P, _重新启动 apache2 :; N! c$ f! [* U* J

/ f/ f! R7 Y- L9 ?0 {. Y# T% u /etc/init.d/apache2 restart
' e0 V) L2 f8 x, A/ |# W3 s* v3 J/ a8 t# x0 u7 w1 x
这次访问 dashboard 没有报错,尝试创建 volume 也没有问题了。, x; d0 b* H9 ]* M- r# Z  F
6 i0 I$ F5 H- H! x. I! ?
11、Unable to attach cinder volume to VM+ i9 N8 \' N$ [0 S* i" A

) Q# K& ]0 }' F  S     在测试openstack中的volume服务时把lvm挂载到虚拟机实例时失败,这其实不是cinder的错误,是iscsi挂载的问题。
3 K3 u. U& ]+ A' ^- ]/ ~* E" a; t  U: v6 h1 E
以下是计算节点nova-compute.log 的错误日志:
; ?, o7 c8 C. ~" a7 K, n
# N: F( H" u( j6 v+ h2012-07-24 14:33:08 TRACE nova.rpc.amqp ProcessExecutionError: Unexpected error while running command.
) M( j* A. \4 }6 A2012-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
* {( q/ `# I- O! e1 ~2012-07-24 14:33:08 TRACE nova.rpc.amqp Exit code: 255
7 M  G. `/ _0 M0 X# _2012-07-24 14:33:08 TRACE nova.rpc.amqp Stdout: ”+ {% b- F$ k" N  P
2012-07-24 14:33:08 TRACE nova.rpc.amqp Stderr: ‘iscsiadm: No portal found.\n’
+ p8 M( P' _" j" ]- O$ f; E
8 \5 p& ^" K; ~! I
' i; q7 M! C! S2 z- }
  [5 v. m7 n, p  j* L以上错误是没有找到iscsi服务端共享出的存储,查找了很多openstack 资料说要添加以下两个参数:+ E( M; g0 P. p7 H4 [; H0 ?& _
, i! g) n% f: h' o$ E5 _
iscsi_ip_prefix=192.168.80 #openstack环境内网段6 g$ w! d8 B) D) K, C, m( i! H" M

% w2 B1 v9 k% Aiscsi_ip_address=192.168.80.22 # volume机器内网IP9 _9 U1 J/ P. U1 ^! c' A, j" E: x

8 w$ b' q4 n1 k8 H" R, O0 F- n6 [) y$ L; p6 G可是问题依然无法解决,后来发现只要在nova.conf配置文件中添加参数iscsi_helper=tgtadm 就挂载失败。( t: O3 `/ K# A8 R9 {. b

1 A+ Q# w3 I8 c6 Q2 A$ k- G根据这个情况进行了测试查看日志才发现:如果使用参数 :iscsi_helper=tgtadm 时就必须使用 tgt 服务,反之使用iscsitarget服务再添加参数iscsi_helper=ietadm。
! E! p- C  w' j' ]7 l' J% \6 e
1 @+ H1 Z2 t/ G/ l, v2 o( D7 X7 D我测试环境的问题是tgt和iscsitarget服务都已安装并运行着(在安装nova-common时会把tgt服务也安装上,这个不小心还真不会发现),在nova.conf配置中添加参数iscsi_helper=tgtadm ,查看端口3260 发现是iscsitarget服务占用,所以导致挂载失败,我们可以根据情况来使用哪个共享存储服务!!将tgt 和iscsi_helper=tgtadm、iscsitarget和iscsi_helper=ietadm保留一个即可。6 \) L% V# z- J2 v: R

, A2 R' r5 F' h  C/ T9 m; c12、glance index报错:
' f) B' S# [" `; u) s' v7 X- |3 L2 h8 h8 Z) V# u8 u
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)
- H* Z" L/ Y7 Z8 J4 D- o5 s
- j# d0 \; L( l
9 q) w+ Y, f9 t2 h2 h7 p  Z6 l# J; G 在 Grizzly 版,我测试 glance index 时候报错:
  J( x' d! G0 S( w! x  Z
7 B5 Z6 l0 g6 D) iAuthorization 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)
4 |+ T7 G. q9 \% l6 F1 ?" Y错误信息指出:glance 没有通过keystone验证,查看了 keystone 日志,报错如下:
. L; M7 b, m5 }2 B
" |: W7 _4 N7 n7 b& ]6 }4 s+ N& c2677 2013-03-04 12:40:58    ERROR [keystone.common.cms] Signing error: Error opening signer certificate /etc/keystone/ssl/certs/signing_cert.pem
+ P; i, b  Y9 a# R5 \7 C2678 139803495638688:error:02001002:system library:fopen:No such file or directory:bss_file.c:398:fopen('/etc/keystone/ssl/certs/signing_cert.pem','r')
+ ~/ J3 p6 |) r2 O2 @8 i' W9 Y2679 139803495638688:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:400:
9 C4 h' [. t6 x6 }7 e) r2680 unable to load certificate) ~! R8 W$ V" y2 h+ b+ \
2682 2013-03-04 12:40:58    ERROR [root] Command 'openssl' returned non-zero exit status 3
- ^# t1 i4 Q, ]) C/ W4 s2683 Traceback (most recent call last):
9 c; \1 d6 O- h8 E& K' g8 r2684   File "/usr/lib/python2.7/dist-packages/keystone/common/wsgi.py", line 231, in __call__
, N- Y" a% e+ U9 f+ O4 I- C& b2685     result = method(context, **params)& o9 X- ^6 v# {. D; u
2686   File "/usr/lib/python2.7/dist-packages/keystone/token/controllers.py", line 118, in authenticate# ?% o! ?" `3 a( Q# w3 b7 c) W8 ]
2687     CONF.signing.keyfile)
/ }4 p% X0 @2 ]$ z" Z8 p2688   File "/usr/lib/python2.7/dist-packages/keystone/common/cms.py", line 140, in cms_sign_token
3 `8 c7 x1 G) S; r9 @2689     output = cms_sign_text(text, signing_cert_file_name, signing_key_file_name)( S6 c; [: u- R# x5 l
2690   File "/usr/lib/python2.7/dist-packages/keystone/common/cms.py", line 135, in cms_sign_text
  l' @+ T1 X" @( A  L2691     raise subprocess.CalledProcessError(retcode, "openssl")
3 Z5 P# [3 @4 D2692 CalledProcessError: Command 'openssl' returned non-zero exit status 3
" V; _: ^. m& [. y) d# F在Grizzly 版中,keystone 默认验证方式是 PKI , 需要签名证书,之前的版本都是用的 UUID,改 keystone.conf:
! u* h& E" r) v% v  x( p
( F1 T0 |1 e$ h% n+ _token_format = UUID
$ j5 }0 J& P3 m6 @. O# X. s/ u% V4 _在试一次就没有错误了。! Z$ i5 B1 [: p

( l; ?, z. V0 J1 ]/ e( h$ p) o13、镜像制作
" c: Z: @& j( e+ c  i  U9 H  p% X9 Q9 K' m8 H+ x# ?3 i
这里主要强调下windows的镜像制作,因为windows的涉及到加载驱动的问题,就比较麻烦。" x$ S/ D4 u4 L4 p$ Z

; [9 R3 X3 Q  S. I下载virtio驱动,因为win默认不支持virtio驱动,而通过openstack管理虚拟机是需要virtio驱动的。需要两个virtio驱动,一个是硬盘的,一个是网卡的,即:virtio-win-0.1-30.iso和virtio-win-1.1.16.vfd。这里主要强调两个地方: 9 c5 @) Z1 U: a- }9 a

) T8 e( N6 U! |1 \) k0 H! V1、创建镜像:
1 a0 P  d8 x& \2 r+ d
+ ~' ]) |9 L  |7 d kvm -m 512 -boot d –drive% }& D; }# L; m& }  h: t

2 H7 V9 Z, N2 Tfile=win2003server.img,cache=writeback,if=virtio,boot=on -fda virtio-win-1.1.16.vfd -cdrom windows2003_x64.iso -vnc:10                   ! w% Z. {0 Z* J( c* n: C9 L
) t" ^+ a0 k  ~8 P
# ^" `+ R$ d  c& [4 }
2、引导系统 :# j4 c& F+ ?4 C. s( B

1 s( g0 x5 s0 T; @  S/ D. lkvm -m 1024 –drive file=win2003server.img,if=virtio,
1 c2 S- Z1 u" r; L1 j 5 U. o! N8 ], B6 K- L
boot=on -cdrom virtio-win-0.1-30.iso -net nic,model=virtio -net user -boot c -nographic -vnc 8- s+ X2 p( n3 z
8 L# m! Q3 Z! z9 ^$ N

0 z! d" L* L! V, r5 x这里需要注意的地方是if=virtio,boot=on –fda virtio-win-1.1.16.vfd和引导系统时使用的virtio-win-0.1-30.iso 这两个驱动分别是硬盘和网卡驱动。如果不加载这两个驱动安装时会发现找不到硬盘,并且用制作好的镜像生成实例也会发现网卡找不到驱动,所以在这里安装镜像生成后需要重新引导镜像安装更新网卡驱动为virtio。4 F1 o8 [& T: D- P# W

. ]6 M( h$ ?2 Z( }: d14、删除僵尸volume
2 j8 y; h; s; e3 v; M# X1 g$ Y- l; ?4 k) e, P* Z# x% V
如果cinder服务不正常,我们在创建volume时会产生一些僵尸volume,如果在horizon中无法删除的话,我们需要到服务器上去手动删除,( H* t' I$ r# A# m9 n5 M
+ O' Q$ h; ?6 W! r4 l5 C1 ?
命令:lvremove /dev/nova-volumes/volume-000002+ q/ z- s6 D0 K4 O! n4 u
0 [) m; U; \+ E0 G3 t) R$ C3 }  Z; |
注意这里一定要写完整的路径,不然无法删除,如果删除提示:
9 _5 b* }% A; d) w) W* W# k( o! B5 [! Q0 P
“Can't remove open logical volume“ 可尝试将相关服务stop掉,再尝试删除。删除完还需到数据库cinder的volumes表里清除相关记录。

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2018-9-2 22:29:09 | 显示全部楼层
以下主要为安装部署过程中遇到的一些问题,因为openstack版本问题,带来的组件差异导致不同的版本安装的方法也完全不一样。经过测试,目前已可成 功部署Essex和Grizzly两个版本,其中间还有个版本是Folsom,这个版本没有部署成功,也没有花太多时间去研究,因为Folsom版本中使 用的quantum组件还不成熟,对于网络连通性还有很多问题,网上也很少有成功的案例,大多数人使用的还是folsom+nova-network模 式。
+ B, `  J' F* g) c/ I7 A* S8 F$ F2 t9 ?
到了Grizzly版本,quantum组件才比较稳定,可以正常使用,自己也花了很多时间研究,现在已可以成功部署多节点环境。以下是部署过程中遇到的 一些问题,包括Essex和Grizzly两个版本。国内网上关于这方面的资料很少,很多资料也都是国外网站上看到的。而且很多情况下日志错误信息相同, 但导致错误的原因却不尽相同,这时候就需要仔细分析其中的原理,才能准确定位。遇到错误并不可怕,我们可以通过对错误的排查加深对系统的理解,这样也是好 事。
% l/ @* e% p* u) {  T! L: e! L3 p& {5 P% [1 m
关于安装部署,网上有一些自动化的部署工具,如devstack和onestack,一键式部署。如果你是初学者,并不建议你使用这些工具,很明显,这样 你学不到任何东西,不会有任何收获。如果没有问题可以暂时恭喜你一下,一旦中间环节出现错误信息,你可能一头雾水,根本不知道是哪里错了,加之后期的维护 也是相当困难的。你可能需要花更多的时间去排查故障。因为你根本不了解中间经过了哪些环节,需要做哪些配置!这些工具大多数是为了快速部署开发环境所用, 正真生产环境还需要我们一步一步来操作。这样有问题也可快速定位排查错误。* R* S+ T6 m! e( Q7 ~! \
6 f4 h; L7 x+ d% u9 l
本文仅是针对部署过程中的一些错误信息进行总结梳理,并给予解决办法,这些情况是在我的环境里遇到的,并成功解决的,可能会因为环境的不同而有所差异,仅供参考。' ^# d  t3 _* ]4 S# Q# c0 J2 a! M* q

2 @* R" ?# F3 d% g+ D) s& N+ A: P1、检查服务是否正常/ M$ }5 Y2 O0 N- P3 `7 i8 t' z
  N+ B9 U& X4 ?+ e
root@control:~# nova-manage service list" V" z  g3 S  G4 v9 s
: `7 K0 i9 p; p
Binary           Host                                 Zone             Status     State Updated_At
% t% B0 ^/ e  n0 k$ X( d* Y  {  a- v8 g
nova-cert        control                              internal         enabled    :-)   2013-04-26 02:29:44& I% s, g! j$ f8 \2 r( V# Z+ x" f. M

# z$ r* G* L$ _. {: Snova-conductor   control                              internal         enabled    :-)   2013-04-26 02:29:42
8 _3 k8 w  R4 v. i0 _+ s$ V; u8 H( k/ {4 }/ W2 |! J* y- s+ Y
nova-consoleauth control                              internal         enabled    :-)   2013-04-26 02:29:44
: o8 M" q1 c5 p
0 O& u% U' R" G7 nnova-scheduler   control                              internal         enabled    :-)   2013-04-26 02:29:47
* ^% k( ?& ]2 k% K2 ~; s9 M
0 S% F8 c+ W8 m& _! ?+ i% Wnova-compute     node-01                              nova             enabled    :-)   2013-04-26 02:29:46
' G6 `6 j4 u3 L) s$ h2 T2 G
; p1 W* q* v' b1 w7 w3 g& Snova-compute     node-02                              nova             enabled    :-)   2013-04-26 02:29:46- d6 W. t: S( z/ G- V! l

# M; J# N& q4 Z  L3 `: Onova-compute     node-03                              nova             enabled    :-)   2013-04-26 02:29:42% c2 `+ R) A+ i* |- Q
复制代码
2 ~& V4 K9 D# W. R  l7 f' L如果看到都是笑脸状态,说明nova的服务属于正常状态,如果出现XXX,请查看该服务的相关日志信息,在/var/log/nova/下查看,通过日志一般可以分析出错误的原因。5 p8 j+ F4 w' m/ B8 m
! P. z& n# g  p  E, e* Z- ]  X+ n1 D9 j
$ d- u9 M9 j- q. y- R' R! t4 ]
2、libvirt错误5 F( |6 k" A4 `7 ]8 v: H- C& ~- {
python2.7/dist-packages/nova/virt/libvirt/connection.py”, line 338, in _connect2 c) l; X- ?" p# F2 _/ S7 X
2013-03-0917:05:42 TRACE nova return libvirt.openAuth(uri, auth, 0)
# g  ~# \2 X' h( p; ]# h2013-03-09 17:05:42 TRACE nova File “/usr/lib/python2.7/dist-packages/libvirt.py”, line 102, in openAuth
' q* d0 s( d1 U0 Q# I+ r2013-03-09 17:05:42 TRACE nova if ret is None:raise libvirtError(‘virConnectOpenAuth() failed’)3 X) `5 l  x% j" L
2013-03-09 17:05:42 TRACE nova libvirtError: Failed to connect socket to ‘/var/run/libvirt/libvirt-sock’: No such file or directory. {3 Q; U& O( @* y
2013-03-09 22:05:41.909+0000: 12466: info : libvirt version: 0.9.80 u) A2 o3 C0 q; x% P
2013-03-09 22:05:41.909+0000: 12466: error : virNetServerMDNSStart:460 : internal error Failed to create mDNS client: Daemon not running) ^" e/ l2 S! n5 @. h4 W
复制代码
% z: O  j% G" R, P) _解决方案:+ E" ~0 g/ O3 j" z! h! }
出现这种错误首先要查看/var/log/libvirt/libvirtd.log日志信息,日志里会显示:libvirt-bin service will not start without dbus installed.) B% k6 @6 Z3 m* }
我们再查看ps –ea|grep dbus,确认dbus is running,然后执行apt-get install lxc/ \8 I- w. q$ u: [, r
& ]5 t2 N, d1 c

! v2 O# l+ ]% a# a/ e, D3、Failed to add image: i# r9 {. Y$ f1 b/ b- t$ u- x6 h
Error:% P7 n5 H4 @1 b3 c" |2 |  F
Failed to add image. Got error:
The request returned 500 Internal Server Error
0 j* w/ f3 l- g3 |- I. H2 z复制代码
; E5 i0 G; K2 q% X9 u. [
' E3 |& {5 F; w3 H, q  P) S5 A' U2 N4 @. p& n  F0 i
解决方案:0 T6 h* c* b# \5 I! O
环境变量问题,配置环境变量,在/etc/profile文件中新增:9 {8 U- K) t  k$ |: \

9 B" D' `, K, r5 {' |2 S. ?
1 l+ F) T$ [* B) H& O: uOS_AUTH_KEY=”openstack” ) Q5 `1 a% m& n& m! E
OS_AUTH_URL=”http://localhost:5000/v2.0/”: H9 w; D- z4 r1 M
OS_PASSWORD=”openstack”; f" e* ?0 I( g0 J" }5 J% m
OS_TENANT_NAME=”admin”
1 T' w) |- b: x6 L+ S4 AOS_USERNAME=”admin”
0 T7 V/ |) F( x1 ~6 N复制代码& I% ?) O; @4 k. p
然后执行source  /etc/profile即可!当然你也可以不在profile里配置环境变量,但是只能临时生效,重启服务器就很麻烦,所以建议你还是写在profile里,这样会省很多麻烦。9 U$ [  ^4 F1 y8 {1 e- ?
( `3 ~1 @- x) Y$ X0 V+ k6 V1 Q# u

; w; J+ R! x( s0 P4、僵尸实例的产生4 {' _* S* k; A- P8 w
僵尸实例一般是非法的关闭nova或者底层虚拟机,又或者在实例错误时删除不了的错误,注意用virsh list检查底层虚拟机是否还在运行,有的话停掉,然后直接进入数据库删除。3 O+ i7 d/ U1 `
Nova instance not found0 G) L* ~/ w/ V

: x+ J5 n" [( j) S! LLocal file storage of the image files.
$ l2 U- B1 G( ~: y* I3 k
5 _6 A% }: m0 N5 IError:$ \( ]) G; N7 b4 ]8 x/ ]! b
2013-03-09 17:58:08 TRACE nova raise exception.InstanceNotFound(instance_id=instance_name)
9 s% H: C4 q1 }  d1 i2013-03-09 17:58:08 TRACE nova InstanceNotFound: Instance instance-00000002 could not be found.
& |8 u1 a$ Y% g0 N: @# G! Y. Y: s$ R2013-03-09 17:58:08 TRACE nova5 ?8 y+ M9 F5 t- V
复制代码
) x$ U1 u: o4 ~) s8 G6 v, L6 U解决方案:7 N% t# K7 R+ _7 l7 k2 X1 X
删除数据库中的僵尸实例或将数据库删除重新创建:
- `  H: A4 I0 f9 x% va、删除数据库:/ [2 q/ P+ E2 z+ y6 m
$mysql –u root –p
( }/ x4 O# I3 w3 x1 X  \3 n3 Z" L8 z" wDROP DATABASE nova;, ?3 W, V, T$ p* N/ J4 U

+ m; Z( b9 Y% @; n- F" I$ ZRecreate the DB:
' @. ~/ F& p+ V8 k' X2 k* kCREATE DATABASE nova; (strip formatting if you copy and paste any of this)
+ h9 F& x# \5 x* WGRANT ALL PRIVILEGES ON nova.* TO ‘novadbadmin’@'%’ IDENTIFIED BY ‘<password>’;
5 U, Y# I/ J* a, z5 oQuit
! ?5 \2 g6 `+ G: i4 O. G; j& k# p0 M* ^4 B. W/ B5 z9 `
Resync DB
) [8 M. g2 E0 R9 b3 ]% F复制代码
4 a9 j9 E& u, ]) `8 r5 lb、删除数据库中的实例:
5 }- P$ e  }- y8 t8 \- ~#!/bin/bash, s3 |" H7 P6 }& i  \1 O# ~
8 U+ l/ A5 ?" ^9 o, K9 W
mysql -uroot -pmysql << _ESXU_- e& [; R- r2 H1 b$ t

! x# I& x6 \; p! h) K- xuse nova;' M5 O( J; X0 B: e2 L* H' E
6 i6 T& k! j! s% \0 v
DELETE a FROM nova.security_group_instance_association
7 S3 q  b" A1 A6 K2 ]- M+ Y+ M) m% a3 X* N  Q
AS a INNER JOIN nova.instances AS b
( ]0 g" C3 d9 ~1 b6 L  Y4 J, N
* f- F! k) T+ D; b& Y4 k" j* |$ fON a.instance_uuid=b.id where b.uuid='$1';5 F: |$ W3 W- K% ~) n" I( q
! O- x1 v+ p1 X5 u8 q  \7 f' P) C
DELETE FROM nova.instance_info_caches WHERE instance_uuid='$1';
: O/ H% d% c( J) a
- s  Z" w! Q$ D, |- f" Q+ R3 fDELETE FROM nova.instances WHERE uuid='$1';
/ X0 ]+ B0 I$ U
! H& u+ T  b5 h9 |4 }_ESXU_
3 C8 l  o2 d. `: f' i; c+ g复制代码
+ G, X  k0 ~0 w% H将以上文件写入delete_insrance.sh中,然后执行sh delete_instrance.sh insrance_id;6 D: ~: d6 K5 N3 U, j& n3 h
其中instrance_id可以通过nova list 查看。
  y% ?; V* T6 I1 z
! }9 }/ q+ u; ^- r" o
2 G3 m1 N0 ^- Q7 z0 a5、Keystone NoHandlers$ {! n7 N  K; ~  v; K
0 |% z6 j, C# g( k2 ?2 e
Error  
- c1 {0 H  |# z; u" @root@openstack-dev-r910:/home/brent/openstack# ./keystone_data.sh  9 \1 O) L. s) }  [' {+ P
No handlers could be found for logger “keystoneclient.client”  
. V" U; S3 w8 S% r6 GUnable to authorize user  
( ?# L; _& e9 k8 o0 {No handlers could be found for logger “keystoneclient.client”  3 S' t( l, e+ k# k
Unable to authorize user  
/ L4 h% d0 a4 N# x1 ?3 INo handlers could be found for logger “keystoneclient.client”  ! E: B' v* T) J
Unable to authorize user  
1 x& p# u7 R; d! ^. f复制代码
& d2 ]  p! T9 d9 @
( w+ @, r2 J8 M" o  W4 U- W/ k: J- s4 U  O! Y3 P
解决方案:2 G: v6 N' ~9 j" r7 t: I( a
出现这种错误是大多数是由于keystone_data.sh有误,其中9 g9 b0 s0 u+ A1 h; l3 K1 o) a  ~
admin_token必须与/etc/keystone/keystone.conf中相同。然后确认keystone.conf中有如下配置:+ j3 _7 t& W0 h$ e0 j( Q2 K6 _  @
driver = keystone.catalog.backends.templated.TemplatedCatalog template_file = /etc/keystone/default_catalog.templates. e! \" g& Z8 x" D; u
/ n" x5 t5 z! _/ V& n
+ h$ s- `1 ~- r/ S" Q
6、nova-compute挂掉与时间同步的关系
* F+ }& B9 i/ c# ?+ ~2 ^, l很多时候发现nova-compute挂掉,或者不正常了,通过nova-manage查看状态是XXX了。
0 Y, s! h+ @; M/ V5 o# w, E往往是nova-compute的主机时间和controller的主机时间不一致。 nova-compute是定时地往数据库中services这个表update时间的,这个时间是nova-compute的主机时间。0 I5 `" Y+ J3 u. _$ F
controller校验nova-compute的存活性是以controller的时间减去nova-compute的update时间,如果大于多少秒(具体数值代码里面有,好像是15秒)就判断nova-compute异常。$ t3 f$ }/ j1 l" a
这 个时候你用nova-manage查看nova-compute状态是XXX,如果创建虚拟机,查看nova-scheduler.log 就是提示找不到有效的host 其他服务节点类同,这是nova心跳机制问题。所以讲nova环境中各节点时间同步很重要。一定要确保时间同步!!
  M) Y$ E% [+ N如果在dashboard上看nova-compute状态,可能一会儿变红,一会儿变绿。那就严格同步时间,或者找到代码,把上面的那个15秒改大一点。8 T0 m  i4 \' k* ?  O" o7 \

' x, [) U  ~4 n! j  J' y5 v! C6 U
7、noVNC不能连接到实例
! i# ?. O7 z" Rnovnc的问题比较多,网上也有关于这方面的很多配置介绍,其实配置不复杂,只有四个参数,配置正确基本上没什么大问题,但是装的过程中还是遇到了不少的问题。& p: K. k# D' n2 P
a、提示“Connection Refuesd”( _6 l) H) [# L1 Q1 j* y# O2 p$ V
可能是控制节点在收到vnc请求的时候,无法解析计算节点的主机名,从而无法和计算节点上的实例建立连接。
' x8 i7 {& z; M- X4 @1 R6 S0 S8 j另外可能是,当前浏览器不支持或者不能访问,将计算节点的ip和主机名的对应关系加入到控制节点的/etc/hosts文件中。
$ ?/ u  \# |9 {" |1 I% b1 B2 wb、提示“failed connect to server”+ D1 Q5 y8 r8 t. o$ p; m# `
出 现这种错误的情况比较多,有可能是配置文件的错误,我们的环境中遇到这个错误是因为网络源有更新,导致安装版本不一致,使组件无法正常使用,解决方法就是 使用本地源。另外需要特别说明的是使用novnc的功能需要浏览器支持Web Socket和HTML5.推荐使用谷歌。3 X/ K; E/ k, Z) ^1 r4 M  U

$ ]  P0 M# s/ Y, Y* [2 L  M4 {7 @$ w1 i% g0 W/ @! E+ i
8、Unable to attach cinder volume to VM
1 e* G6 ^% V, f% O) F     在测试openstack中的volume服务时把lvm挂载到虚拟机实例时失败,这其实不是cinder的错误,是iscsi挂载的问题。' p; a  r- s+ i6 V% n( f; V
以下是计算节点nova-compute.log 的错误日志:
  G7 M! k* u. l$ f9 c& O. }2012-07-24 14:33:08 TRACE nova.rpc.amqp ProcessExecutionError: Unexpected error while running command.
* |/ I3 c" K# g: k2012-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
" b7 h/ s' D& I9 `* X2012-07-24 14:33:08 TRACE nova.rpc.amqp Exit code: 2555 E, `2 o+ ]! u+ y
2012-07-24 14:33:08 TRACE nova.rpc.amqp Stdout: ”1 N' W6 t9 o6 E
2012-07-24 14:33:08 TRACE nova.rpc.amqp Stderr: ‘iscsiadm: No portal found.\n’5 W% M: ?0 I. G+ |9 t# ^( k5 I
复制代码
1 i3 \& \2 g% j+ c* t* q2 S以上错误是没有找到iscsi服务端共享出的存储,查找了很多openstack 资料说要添加以下两个参数:
/ \$ [: K3 l( S8 O: K# @, }" Ciscsi_ip_prefix=192.168.80 #openstack环境内网段
% m& |  P5 L; y% e3 F6 D7 Jiscsi_ip_address=192.168.80.22 # volume机器内网IP2 V6 B9 C3 e/ q1 M" i
可是问题依然无法解决,后来发现只要在nova.conf配置文件中添加参数iscsi_helper=tgtadm 就挂载失败。
) @3 @" j' c7 `. h, n, t根据这个情况进行了测试查看日志才发现:如果使用参数 :iscsi_helper=tgtadm 时就必须使用 tgt 服务,反之使用iscsitarget服务再添加参数iscsi_helper=ietadm。
. r0 Z9 X# n0 m1 v我 测试环境的问题是tgt和iscsitarget服务都已安装并运行着(在安装nova-common时会把tgt服务也安装上,这个不小心还真不会发 现),在nova.conf配置中添加参数iscsi_helper=tgtadm ,查看端口3260 发现是iscsitarget服务占用,所以导致挂载失败,我们可以根据情况来使用哪个共享存储服务!!将tgt 和iscsi_helper=tgtadm、iscsitarget和iscsi_helper=ietadm保留一个即可。8 X. O- n7 V7 v! s

  U. n( n# D* T1 q8 j  H; S$ R4 [" Y
2 h" y8 {1 M% N4 o0 @9、glance index报错:4 C( `$ a5 k1 r. N" J, S+ a. i
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)) J) z0 ~7 g% |1 z3 f# q
复制代码
% B8 f% Z* |4 B" L, A  m在 Grizzly 版,我测试 glance index 时候报错:2 s7 T* e( e6 f6 V+ c. q  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)
' u: g! t2 B) `5 x# d8 \) k. v! W) i3 j
错误信息指出:glance 没有通过keystone验证,查看了 keystone 日志,报错如下:* |9 e- y+ N1 a; n4 |
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 3
: D; g% `9 s7 k9 i" s2 @4 k  u0 f1 I/ a6 G
在Grizzly 版中,keystone 默认验证方式是 PKI , 需要签名证书,之前的版本都是用的 UUID,改 keystone.conf:
! |9 @# k) ^- Y$ `" p7 X, vtoken_format = UUID5 A# S' p! @& a2 F

/ o7 C+ `( v- r$ I' I; p0 t3 w在试一次就没有错误了。
- J5 \, V: Y8 T& I. t ) R3 n# O6 S; T) e

' V0 Z( P1 U/ _& S+ p8 o/ i; p) ?1 @! V10、镜像制作
5 R5 R% B# j7 U1 {, d* S; R% F, A" b这里主要强调下windows的镜像制作,因为windows的涉及到加载驱动的问题,就比较麻烦。
9 G" n1 _5 \/ O3 g% M; q下载virtio 驱动,因为win默认不支持virtio驱动,而通过openstack管理虚拟机是需要virtio驱动的。需要两个virtio驱动,一个是硬盘的, 一个是网卡的,即:virtio-win-0.1-30.iso和virtio-win-1.1.16.vfd。这里主要强调两个地方:+ _8 x1 N* V4 @* R! j
1、创建镜像:9 \, `2 K4 w6 Q  H4 S
kvm -m 512 -boot d –drive  % ~4 [4 M2 M4 D. V2 f5 n
  # c. d# O2 ?5 D
ile=win2003server.img,cache=writeback,if=virtio,boot=on -fda virtio-win-1.1.16.vfd -cdrom w# C/ D" l: f9 V) n
复制代码
3 {/ Z8 @& c: V
* v2 k; q( {* X
8 }, G, ?3 b, B( _
1 `! {1 ~0 [4 O/ w: q  \4 p% G  v  Q, v, x, {) y
2、引导系统 :
1 P3 x, B) }7 ]" o7 ikvm -m 1024 –drive file=win2003server.img,if=virtio,
2 d5 A# y' D3 Q4 z& V8 [' P) H2 T0 t2 e3 r6 u/ p3 t% T& h
boot=on -cdrom virtio-win-0.1-30.iso -net nic,model=virtio -net user -boot c -nographic -vnc 8
4 U/ ]+ g" T) Z复制代码
* K% }0 E. H- Z. l这 里需要注意的地方是if=virtio,boot=on –fda virtio-win-1.1.16.vfd和引导系统时使用的virtio-win-0.1-30.iso 这两个驱动分别是硬盘和网卡驱动。如果不加载这两个驱动安装时会发现找不到硬盘,并且用制作好的镜像生成实例也会发现网卡找不到驱动,所以在这里安装镜像 生成后需要重新引导镜像安装更新网卡驱动为virtio。% n+ j. T, R* r9 D* h

( ]3 `0 d6 I) s3 S( M11、删除僵尸volume: E, n9 E# ]0 C7 L9 W% H) j
9 y8 Z% U* U+ Y/ |; \

5 v. O9 f8 V6 u如果cinder服务不正常,我们在创建volume时会产生一些僵尸 volume,如果在horizon中无法删除的话,我们需要到服务器上去手动删除,命令:lvremove /dev/nova-volumes/volume-000002注意这里一定要写完整的路径,不然无法删除,如果删除提示:“Can't remove open logical volume“ 可尝试将相关服务stop掉,再尝试删除。删除完还需到数据库cinder的volumes表里清除相关记录。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 02:47 , Processed in 0.018179 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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