- 积分
- 16840
在线时间 小时
最后登录1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?开始注册
x
以下主要为安装部署过程中遇到的一些问题,因为openstack版本问题,带来的组件差异导致不同的版本安装的方法也完全不一样。经过测试,目前已可成功部署Essex和Grizzly两个版本,其中间还有个版本是Folsom,这个版本没有部署成功,也没有花太多时间去研究,因为Folsom版本中使用的quantum组件还不成熟,对于网络连通性还有很多问题,网上也很少有成功的案例,大多数人使用的还是folsom+nova-network模式。
) _7 K+ p4 T9 X
' y5 y5 j- R+ f; ?, m, _3 ?到了Grizzly版本,quantum组件才比较稳定,可以正常使用,自己也花了很多时间研究,现在已可以成功部署多节点环境。以下是部署过程中遇到的一些问题,包括Essex和Grizzly两个版本。国内网上关于这方面的资料很少,很多资料也都是国外网站上看到的。而且很多情况下日志错误信息相同,但导致错误的原因却不尽相同,这时候就需要仔细分析其中的原理,才能准确定位。遇到错误并不可怕,我们可以通过对错误的排查加深对系统的理解,这样也是好事。
/ t! ]8 r0 [/ H u' ]) C a: o: C k0 s# X1 u ?/ ]1 t4 N. u9 s
关于安装部署,网上有一些自动化的部署工具,如devstack和onestack,一键式部署。如果你是初学者,并不建议你使用这些工具,很明显,这样你学不到任何东西,不会有任何收获。如果没有问题可以暂时恭喜你一下,一旦中间环节出现错误信息,你可能一头雾水,根本不知道是哪里错了,加之后期的维护也是相当困难的。你可能需要花更多的时间去排查故障。因为你根本不了解中间经过了哪些环节,需要做哪些配置!这些工具大多数是为了快速部署开发环境所用,正真生产环境还需要我们一步一步来操作。这样有问题也可快速定位排查错误。2 M" C4 D8 |8 L- W1 ~* y o8 c
" A, y: Z, x( z8 \; E. @4 ?) i
本文仅是针对部署过程中的一些错误信息进行总结梳理,并给予解决办法,这些情况是在我的环境里遇到的,并成功解决的,可能会因为环境的不同而有所差异,仅供参考。
! G2 ~1 L6 g6 R: `9 A6 a! i8 O1 h' t
! o, U# I, Y4 }/ e6 o; r3 {8 x1、检查服务是否正常:
' Q; K+ m, Q& d! u9 x( S' E: J- i7 P- o# E8 D8 K8 S; ^
root@control:~# nova-manage service list+ x7 y1 R" S+ |% B+ T# ?: i
* G/ F0 E2 C4 Q
Binary Host Zone Status State Updated_At/ ^7 v8 f& J9 d% _+ h7 Z; a
" x! @6 k: ~, K7 ^3 m5 }# ^+ pnova-cert control internal enabled :-) 2013-04-26 02:29:44+ Q" f9 d J. N$ d E
9 @3 s* } u6 a; s' E
nova-conductor control internal enabled :-) 2013-04-26 02:29:42/ o2 _! E, q* H% a. I+ j
% M( ~ T9 _+ y
nova-consoleauth control internal enabled :-) 2013-04-26 02:29:44" T, y7 e T9 Q5 b0 H" {/ z* s
6 J* Q) }* E, W7 `* _6 l9 ^2 n; H" `
nova-scheduler control internal enabled :-) 2013-04-26 02:29:47% p- z1 s% f/ m1 H2 t
0 m. h' J# r1 p- B7 v' a2 f* Lnova-compute node-01 nova enabled :-) 2013-04-26 02:29:46
4 r8 }2 n6 G- ]! Q" i; }8 U8 ~/ l
( T4 j1 y8 R) O' }nova-compute node-02 nova enabled :-) 2013-04-26 02:29:466 `- S! n& `# S6 ?: `7 f3 F7 @
) X+ T8 P# b9 m- K, d% D" m- W9 F$ Cnova-compute node-03 nova enabled :-) 2013-04-26 02:29:42* I. M- z. v$ C2 V
# n* E* P$ a5 v4 W. l* p: U6 ?$ z7 B J
如果看到都是笑脸状态,说明nova的服务属于正常状态,如果出现XXX,请查看该服务的相关日志信息,在/var/log/nova/下查看,通过日志一般可以分析出错误的原因。
+ `: R* R; ]! [/ |, e
7 c+ \ o1 M9 \: o( p! d2、libvirt错误
; D8 u4 p% k+ u% G/ f* s1 [2 ~
" l% G" C7 \9 U$ X / E4 @# B; f1 p x! r
4 |! e' M) S+ r
python2.7/dist-packages/nova/virt/libvirt/connection.py”, line 338, in _connect
- K0 f& }2 @+ l' y: k2013-03-0917:05:42 TRACE nova return libvirt.openAuth(uri, auth, 0)$ Q, o& f& K0 {+ H Y' t& Y
2013-03-09 17:05:42 TRACE nova File “/usr/lib/python2.7/dist-packages/libvirt.py”, line 102, in openAuth6 n1 @/ A' @: C& g( A
2013-03-09 17:05:42 TRACE nova if ret is None:raise libvirtError(‘virConnectOpenAuth() failed’)
$ s I' x | G" H2013-03-09 17:05:42 TRACE nova libvirtError: Failed to connect socket to ‘/var/run/libvirt/libvirt-sock’: No such file or directory+ W8 ]; u1 W! v) @' P
2013-03-09 22:05:41.909+0000: 12466: info : libvirt version: 0.9.8
0 o1 ]6 _. v2 i7 P( X2013-03-09 22:05:41.909+0000: 12466: error : virNetServerMDNSStart:460 : internal error Failed to create mDNS client: Daemon not running
% _3 x" B* x/ ^* P7 Z z ' y4 y% m! J5 ]6 G1 ]0 d: D, y7 t: `
. f! f' _; ?3 P) z h解决方案:
! t2 n2 `# B9 |
4 h! j+ ]3 T% X% L出现这种错误首先要查看/var/log/libvirt/libvirtd.log日志信息,日志里会显示:libvirt-bin service will not start without dbus installed.8 X, Y H& Q# Z2 f, m
A' X- d) E: E9 j9 Z
我们再查看ps –ea|grep dbus,确认dbus is running,然后执行apt-get install lxc |& D, z. [1 y r) z% f: p" T4 x
& Z2 b, V0 {2 {' O8 |; C3、Failed to add image
$ c7 _4 Z$ |# X' {; e& N
. q7 }/ F6 t% X& G2 I0 x- ?9 E6 FError:6 b) R: Y9 y( p
Failed to add image. Got error:
The request returned 500 Internal Server Error
( q- ~9 L& Y6 V$ x$ H$ X
1 k; e$ A) |. y, f0 m: H- y' Y2 O3 n8 r% X
解决方案:3 A$ Q! r( w2 v. p/ w
) _5 k& }: R, ?4 w$ t! d
环境变量问题,配置环境变量,在/etc/profile文件中新增:! i7 p7 i7 X- U& C2 N
7 V+ _! h9 u# t. U
OS_AUTH_KEY=”openstack” $ A6 ?0 w' Z1 ]3 G: u
OS_AUTH_URL=”http://localhost:5000/v2.0/”
; ^- V7 q3 o6 p& oOS_PASSWORD=”openstack”
. [- I! p" e4 Z; F; ?OS_TENANT_NAME=”admin”
. H, M+ \) l V; x1 zOS_USERNAME=”admin”
/ F1 {/ Q: m, U
2 `4 \1 u; l" c/ K, X
$ X' x3 e1 y: [$ ~然后执行source /etc/profile即可!当然你也可以不在profile里配置环境变量,但是只能临时生效,重启服务器就很麻烦,所以建议你还是写在profile里,这样会省很多麻烦。
4 r _0 _0 T* d" ^
6 K8 a1 A+ X7 `% k; e; U$ u5 V4、僵尸实例的产生4 [: C: Y; X$ |& |( X' @, N
# {5 ~, s( W% R4 C) f9 B* z僵尸实例一般是非法的关闭nova或者底层虚拟机,又或者在实例错误时删除不了的错误,注意用virsh list检查底层虚拟机是否还在运行,有的话停掉,然后直接进入数据库删除。
4 I2 g8 `5 F5 V8 T7 O, _# D$ q6 L' Y& v
Nova instance not found! e$ o8 ]& C" E" g5 K) ~
8 A7 [' b7 q- t" \
Local file storage of the image files. e* ]/ X! P @, J' k; v
" d6 o2 }5 @4 k+ p) |0 R& \ LError:
0 e# P" e# ~9 {2 K+ ]2013-03-09 17:58:08 TRACE nova raise exception.InstanceNotFound(instance_id=instance_name)
6 g& H% A1 V; _/ j2013-03-09 17:58:08 TRACE nova InstanceNotFound: Instance instance-00000002 could not be found.3 u h/ N O2 A/ S0 @
2013-03-09 17:58:08 TRACE nova! z/ b3 X# X# I; v5 w* M8 V$ F" k
* q1 g. ]3 t) k+ r2 }$ g) W- O) @) S
& e& G8 G. Y' P8 v
6 q+ j( F; Y, o( M9 H+ z" d解决方案:4 @- V" h% w% ]7 z2 p8 g
% \& m# f/ J' D( G1 G0 o删除数据库中的僵尸实例或将数据库删除重新创建:3 S" V- ~ s7 Z' K) L2 C
! d+ ^( f4 X! t9 Y8 C8 G# ?! }a、删除数据库:
4 w+ b3 B4 l( F% G4 w2 h
' y L6 w% c6 \/ i& x$mysql –u root –p+ M$ k1 M1 c3 b. @/ c8 b: j3 \6 B1 z
DROP DATABASE nova;
) y; R9 ~: [/ q; _, H
2 W9 [6 N d* XRecreate the DB:
! |+ U6 _2 A3 _- \' L& J, CCREATE DATABASE nova; (strip formatting if you copy and paste any of this)
A$ j) J M, E3 }' a% M7 k; e! P- sGRANT ALL PRIVILEGES ON nova.* TO ‘novadbadmin’@'%’ IDENTIFIED BY ‘<password>’;
* F' ?, ?0 W# D* [! RQuit9 t+ G$ ~1 H( T' e+ _
9 R' N1 C1 f) o# q/ j
Resync DB5 Z$ q) c/ J- `/ l# O% N
; a1 @- N- l/ K- M/ \
' R1 x7 g$ N# e( Xb、删除数据库中的实例:
x# w! H4 }' t- ~# F4 b+ d9 o9 ?# e
#!/bin/bash
+ \" q* S! m k 4 L# ?/ z% J* u) R
mysql -uroot -pmysql << _ESXU_0 Y+ S, C/ H, |2 w+ f
/ y. E: O1 a/ [
use nova;
6 E$ q" x2 M( y' ^ " W+ O& X2 ]; o. j' A; _
DELETE a FROM nova.security_group_instance_association ' b& U% p3 d5 \: O$ A! H
$ _) i8 [6 y' L& Q8 g5 P, MAS a INNER JOIN nova.instances AS b. Q+ H2 c6 v5 C, R4 o
- X- \! G: ?: M: `$ ]ON a.instance_uuid=b.id where b.uuid='$1';
8 L8 t0 u) u: `5 r8 z# q ; B& \; [8 k% ?! p
DELETE FROM nova.instance_info_caches WHERE instance_uuid='$1';( N. s' f+ B* W' r [" e* o
. B' S4 j4 ^( S; ]
DELETE FROM nova.instances WHERE uuid='$1';
$ U: A0 o; Z8 a& E3 J/ Q! K & f: T# @- n: n/ M0 S3 E
_ESXU_
+ f, T% r( F2 J9 Z, i ( p" j8 ?6 b) w
; t, ^$ D: U* F& s) h
将以上文件写入delete_insrance.sh中,然后执行sh delete_instrance.sh insrance_id;
# U. L; g; F, c# p+ r) T
. q g) m$ U, |$ G5 f其中instrance_id可以通过nova list 查看。
' _) a4 l; p7 U5 w* F% q _$ M3 o7 O6 _7 ]! b( Q) }
5、Keystone NoHandlers' `' U. Q4 o. l; H5 ?( v
$ N! k9 \& ?8 x) M; a4 pError+ ^# ~) _( r; g' _+ B: G' p
root@openstack-dev-r910:/home/brent/openstack# ./keystone_data.sh1 u; C8 `' l% ]5 c' k0 Q
No handlers could be found for logger “keystoneclient.client”
+ X+ U0 r5 T7 i) }1 `$ [Unable to authorize user* }6 s3 \/ }! ^
No handlers could be found for logger “keystoneclient.client”( }$ L1 n7 ]1 W F) s5 @4 O
Unable to authorize user8 }" e- }1 b; E4 k6 x
No handlers could be found for logger “keystoneclient.client”# `# A& k7 b( F& @
Unable to authorize user' K" k8 n! Q, C# b& h7 j! V
, a4 @& ?8 V, _5 X, `8 i
/ F8 w# L' _; P
解决方案:
; G/ n9 G0 m- B5 B% X! m+ J+ J- ]+ c; T; G; A8 g
出现这种错误是大多数是由于keystone_data.sh有误,其中
1 u6 L2 R: o" H) I6 D( y, Y4 ]" p5 U( S. E5 M, j3 c& S
admin_token必须与/etc/keystone/keystone.conf中相同。然后确认keystone.conf中有如下配置:+ I! B9 N4 u0 X4 u; V* f
" \$ [* V# i1 Z! B8 ^& F
driver = keystone.catalog.backends.templated.TemplatedCatalog template_file = /etc/keystone/default_catalog.templates
9 C2 Y4 D8 H+ v" p/ v O' P1 \0 c( d3 d$ \( g
6、清空系统组件,重新安装:2 y4 F3 u3 s6 J& k
0 G q+ ^. E2 s# V0 T#!/bin/bash
- |; c# x" y+ P' E4 k$ B4 ]3 V9 `mysql -uroot -popenstack -e “drop database nova;”
) V+ u% s8 x1 Cmysql -uroot -popenstack -e “drop database glance;”
8 @$ H7 c8 y: A' \2 `$ Dmysql -uroot -popenstack -e “drop database keystone;”* M! l1 ?5 t8 z' f M
apt-get purge nova-api nova-cert nova-common nova-compute: O' y! p, N# Y5 y9 p* j
nova-compute-kvm nova-doc nova-network nova-objectstore
8 t! A. U+ s" d5 @8 ]# Unova-scheduler nova-vncproxy nova-volume python-nova python-novaclient
S; P. y1 N$ L# [ D2 {apt-get autoremove
9 L4 D0 m% p3 G" J% drm -rf /var/lib/glance2 Y0 {3 Y! c6 [% A0 U
rm -rf /var/lib/keystone/+ ~ @/ ]8 b" f7 w6 G
rm -rf /var/lib/nova/
2 _5 Y* ^ C6 Jrm -rf /var/lib/mysql( M( o; Y* l1 w5 J% N' X1 c1 q
- g, f8 F P+ w, h4 m' N
9 I( E/ D. o" F5 G \2 v
可通过执行上面的脚本,卸载已安装的组件并清空数据库。这样可以省去重装系统的麻烦!! t7 U1 z3 ]- l3 D$ H' Z4 Y
6 v8 ~8 V' K4 s1 z O
7、Access denied for user ‘keystone@localhost(using password:YES’)
* y& o+ k0 k. @- Y5 t; [2 C. `
( H! {. K9 h! E, J) ]4 c/ w# keystone-manage db_sync
8 m, ?; ?- V6 ?6 j( S
& f) p8 h9 t0 I* @% i3 IFile “/usr/lib/python2.7/dist-packages/MySQLdb/connections.py”, line 187, in __init__/ Y$ d/ r+ {2 D# @& b' M- [
. h2 ?5 M8 I4 |5 a0 `% Gsuper(Connection, self).__init__(*args, **kwargs2)
" H! J) E" O1 k6 x5 N% W- ysqlalchemy.exc.OperationalError: (OperationalError) (1045, “Access denied for user ‘keystone’@'openstack1′ (using password: YES)”) None None; t* F+ Q# @! o# ]! x9 }2 n
3 s1 P: n( f/ a0 i% Q. b
+ s9 P) ?3 y2 @# n a解决方案:- g# n: v% K* h, m! Q4 g
( C& F0 x* @, ?, M1 h
查看keystone.conf配置文件链接数据库是否有误,正确如下:
8 y8 i! e# R$ w+ D
' G" I g6 e2 |6 R" V[sql]
8 U0 a% F4 Z& D7 \ , K% O. X4 }! b+ X4 f( e# p J
connection = mysql://keystone:openstack@localhost:3306/keystone
+ u: c' `9 E& a' e8 q F
( ]1 K$ g: ~" c: [4 `! S t' h
% P# i& n' x3 W8、nova-compute挂掉与时间同步的关系
! G$ b9 S9 A& O' _% L- B# J2 P& L- _3 ?9 n6 `$ `: c2 n3 N/ D+ k
很多时候发现nova-compute挂掉,或者不正常了,通过nova-manage查看状态是XXX了。
4 R% w% L/ _1 ?5 g4 x4 B, m4 ~' V' l; d1 p
往往是nova-compute的主机时间和controller的主机时间不一致。 nova-compute是定时地往数据库中services这个表update时间的,这个时间是nova-compute的主机时间。- s, z7 d' L# c* ~
% I9 m5 B# Y7 r) o0 |' Q0 I" [
controller校验nova-compute的存活性是以controller的时间减去nova-compute的update时间,如果大于多少秒(具体数值代码里面有,好像是15秒)就判断nova-compute异常。- E# c2 t1 i$ N
) Z& n: h5 e$ f7 t# Z+ s" c- f' ~
这个时候你用nova-manage查看nova-compute状态是XXX,如果创建虚拟机,查看nova-scheduler.log 就是提示找不到有效的host 其他服务节点类同,这是nova心跳机制问题。所以讲nova环境中各节点时间同步很重要。一定要确保时间同步!!
( ^7 h1 Y! N# M" t$ Y
2 B2 i; C7 t- x9 W- d y如果在dashboard上看nova-compute状态,可能一会儿变红,一会儿变绿。那就严格同步时间,或者找到代码,把上面的那个15秒改大一点。
: \/ {, }8 {3 R8 s' @. w0 J+ ^
8 j l3 K, L, H; y9、noVNC不能连接到实例
3 T ^# j1 H8 _% P& q
9 m+ R# |( p/ @2 b: O0 h" N! lnovnc的问题比较多,网上也有关于这方面的很多配置介绍,其实配置不复杂,只有四个参数,配置正确基本上没什么大问题,但是装的过程中还是遇到了不少的问题。
t# h. j/ b, ~% w
' c5 S. @3 j: ?7 ra、提示“Connection Refuesd”
" Q6 J4 H0 K1 d8 v7 O, n
' O2 Y* w: }5 v/ J* Y8 Q6 _6 z' ~$ r可能是控制节点在收到vnc请求的时候,无法解析计算节点的主机名,从而无法和计算节点上的实例建立连接。+ x! e% i2 P7 Z
( f5 Y. a7 {# u. e+ q! ]
另外可能是,当前浏览器不支持或者不能访问,将计算节点的ip和主机名的对应关系加入到控制节点的/etc/hosts文件中。
: n; R3 w3 y. w- h
$ K$ C T# O. B1 b" E [% d* Sb、提示“failed connect to server”2 ] {3 L# K( z$ K- P
8 i0 z/ T3 B; K: B
出现这种错误的情况比较多,有可能是配置文件的错误,我们的环境中遇到这个错误是因为网络源有更新,导致安装版本不一致,使组件无法正常使用,解决方法就是使用本地源。另外需要特别说明的是使用novnc的功能需要浏览器支持Web Socket和HTML5.推荐使用谷歌。! y( I+ m+ ]2 w! v5 w u* x
' _. u1 h" O: j! M10、cinder错误,无法登录dashboard.
1 g4 ^) @8 O5 _! m5 s6 z! p" c$ Y0 e/ u. L1 ]4 G# `& m9 n
出现如下错误:
( k' {+ T# ?" n* D3 h. k1 W: X+ U! D2 }
2 d9 j* ~5 z5 e( b2 [+ R
TypeError at /admin/
8 ]: F3 W' `9 j* \* ahasattr(): attribute name must be string0 t$ ]. j4 F% @3 y) ~ N
/ d' l- G3 [- N; i! _
Request Method: GET. C( L/ l& K! S
* Q5 H: w! i6 b: v
Request URL: http://192.168.80.21/horizon/admin/: m+ u2 F# c9 C8 i5 R5 u2 B
$ L& ^- C9 }% u, r- N5 U
Django Version: 1.4.5$ t- Z* L2 q ^
, m. L* ^ X8 L; W
Exception Type: TypeError
' n5 O9 j! p7 L, o; ?* U7 v7 f
- W2 m" i; D u! p& xException Value:
0 i1 ]# m0 Q; b' V; X( ? - r5 y) e, R# k' B# `& Y6 [# Z
hasattr(): attribute name must be string9 G. I: T3 Q, I, B6 Z
- j0 x8 \7 Q/ d. j9 v
Exception Location: /usr/lib/python2.7/dist-packages/cinderclient/client.py in __init__, line 78
: K0 L& e# c* w, U5 [
+ f/ {" ]+ v) G' ^Python Executable: /usr/bin/python( x& M$ j0 }0 m3 V
4 H& s' @6 G7 z# A; n0 k
Python Version: 2.7.3# U S W ]6 R, h) |, h
, G; p# i4 a9 r6 g# j) u
Python Path:
- P5 S& L0 {4 o6 ~" V
8 \1 e. }$ m# L# a/ c: f7 U8 }4 d `: D['/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../..',1 J% |* g4 T+ w: v9 B
* \3 H% Y: L; f2 W8 x( C( l- G '/usr/lib/python2.7',, U, H3 k; Y1 s
" t$ U$ h3 w+ O s '/usr/lib/python2.7/plat-linux2',
0 y8 [, {) D& x# m- } ; S& {" Y% ?, t, j. X+ `( D+ n
'/usr/lib/python2.7/lib-tk',
! J5 w, E2 L/ E7 B/ S! A- f* d
7 f( I) U! |' J0 _2 R8 A/ w '/usr/lib/python2.7/lib-old',+ Y4 N, r6 z: u
5 i, p' Z [ ^# `4 @# l
'/usr/lib/python2.7/lib-dynload',9 y0 ^) |4 h5 V4 E
8 \8 @1 r0 A8 J2 y '/usr/local/lib/python2.7/dist-packages',
: x" R0 G7 @1 k0 [4 h; V
6 s/ |- |0 G- D( }* w1 }* Q5 _4 H '/usr/lib/python2.7/dist-packages',) R( O: K8 o1 D# ?
, K# k6 f' A$ Y! u. [, F) H5 e '/usr/share/openstack-dashboard/',
% A* `! [1 o# Q3 j& g1 C" m2 }
0 _7 z I2 V4 O; G; _ '/usr/share/openstack-dashboard/openstack_dashboard']4 H0 u2 |6 ~* l0 f c' P7 s
9 v" A" H/ ]; m" q/ }# }" o
6 X3 J1 u4 J P7 |8 V
' x y0 O# m' M ?5 H' T* Y( _
Server time: Fri, 29 Mar 2013 12:51:09 +0000
6 [! e* Z3 Q% }8 L ~4 j: X
/ l$ z) @% A @% Q0 T% r
* }+ O+ N8 q! R3 P$ q+ _5 [解决方案
# I7 m) `9 w" \
# W2 R- N5 i& i. e) E7 n$ G查看 apache2 的 error 日志,报如下错误:5 k3 e! h5 T+ g+ r: F; D8 l( C- h
3 y$ g1 H) G; b, z8 g
1 y5 r+ I! p! v& R
ERROR:django.request:Internal Server Error: /horizon/admin/- ^& Y( e( `1 g+ P
. R; p/ H# e3 ^ oTraceback (most recent call last):, T j% [- K. ?9 P$ T1 n+ ~, [/ g
& @9 X h2 P1 |5 W8 r; x8 ?6 J
File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py", line 111, in get_response
* W4 e. A$ d2 f' D4 n$ E- |8 K " {2 I( s) {, Z0 O' ^
response = callback(request, *callback_args, **callback_kwargs)
U3 j4 ~' X9 S4 s/ z, p* F3 W
% H- K* M& g3 |/ @ }% H0 u+ D5 C* F File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 38, in dec9 ]: y: y! D0 K: }: j3 B
$ T: Q0 Y$ ^/ V0 Q' ? w$ u* ~
return view_func(request, *args, **kwargs); w! G; b3 w+ }; P
0 M9 L5 L# }( c, D) k: e
File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 86, in dec! q1 G! P4 w' L/ e, i- [
6 h7 I0 K0 \3 D* {' |( W/ T2 o3 a0 p return view_func(request, *args, **kwargs)! e6 E2 \* N3 s* c a7 p+ w% T
' H" K9 Q0 A# t4 s2 U. k# e File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 54, in dec
+ f9 r0 `1 w( P
5 j' y5 d9 d1 _! Z7 y* f. s! G return view_func(request, *args, **kwargs)
# N. L8 Y" } L( \( l* C 4 p. `3 s2 `5 d1 K, F. d
File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 38, in dec+ Z* B0 M! M" d; ~4 z3 M# E( H
7 P+ `/ c. j7 H; t4 Y, ]; r
return view_func(request, *args, **kwargs); Z$ }4 e* i$ X0 h" A9 X
4 C0 e3 K3 h, W6 N: i f1 v7 r' u2 G( n
File "/usr/lib/python2.7/dist-packages/horizon/decorators.py", line 86, in dec7 m) Z/ X V5 p% O# u" U7 v; M3 x
! h. s( @# e. n5 \7 \; ~ return view_func(request, *args, **kwargs)
( [: g1 [ M( U6 |4 g( K7 E ; g9 t+ a0 l! v* }- T3 [
File "/usr/lib/python2.7/dist-packages/django/views/generic/base.py", line 48, in view
; B; { y; F3 l1 y8 }
3 U: ]1 W( P* Q& d8 [0 F return self.dispatch(request, *args, **kwargs)8 B1 |- l3 v' _( u& w
5 ]8 n) B5 w, i, B5 Z
File "/usr/lib/python2.7/dist-packages/django/views/generic/base.py", line 69, in dispatch, x/ o& ?: |8 E& K4 M( J* m# G
0 {2 c: V; k1 I: V. G* _ return handler(request, *args, **kwargs)
' G! n8 o- x9 W% G6 s$ r' m
" @8 i6 s+ C8 G# o7 A File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 155, in get% s w2 m5 F0 d/ d) g0 A
: ]' H; O3 |5 r9 v# K handled = self.construct_tables()1 v% C+ g" O, q2 r- q% G4 `: ^
2 b6 `& E$ R7 d( h" d File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 146, in construct_tables
) v) D& F! C1 \0 ]
' [5 O L, q: H handled = self.handle_table(table): J: w( `4 ^, |, \( h' ^
) _" i2 l* U( T8 j- L, _% L File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 118, in handle_table
, o' v: ]5 M, S, c9 D8 W1 O! K( q
! ?% y9 g7 N0 V data = self._get_data_dict()9 x) L: }# }) _0 O
2 F' @1 x1 ^/ F8 M File "/usr/lib/python2.7/dist-packages/horizon/tables/views.py", line 182, in _get_data_dict" H+ ]7 o1 P) b/ l% k( [2 _
' h, S; Q# c' K, V self._data = {self.table_class._meta.name: self.get_data()}$ p3 w* R6 c2 V# P
$ p& ~. V( J- @' s8 l File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/dashboards/admin/overview/views.py", line 41, in get_data) ~1 }8 p$ e. I% |, e* Z
' Y5 ]( D8 ~0 n% O# G' A data = super(GlobalOverview, self).get_data()- F- D: K/ K1 p4 H1 p7 @
6 _2 E5 \# N/ l% x File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/views.py", line 34, in get_data9 _; W; r1 s' s( q9 t
8 V1 X2 l; i0 g6 k( b self.usage.get_quotas()
$ h1 B, Q+ k% |3 C2 K, n! }" V9 a2 y " l3 X, w& Q; B* A8 y
File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/base.py", line 115, in get_quotas. V6 i9 N9 M4 F
. c n' e* E! ^, ^5 F- V) E
_("Unable to retrieve quota information."))$ U8 T( M0 u1 Q9 k1 }
4 N! G4 D' s. y4 s# [% y
File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/base.py", line 112, in get_quotas( j1 n. U5 z" f& D* `
* ^6 \" ]4 b2 e- P- a) ^
self.quotas = quotas.tenant_quota_usages(self.request)
% M% H$ ], e$ m; L! O4 l8 S$ O
& R3 ~4 B6 {4 f: a# R+ X# F9 ] File "/usr/lib/python2.7/dist-packages/horizon/utils/memoized.py", line 33, in __call__# t8 a# J$ P L1 m' P3 \& l3 }
4 G2 t8 |" h, v) ~8 M6 M
value = self.func(*args)/ n- m# b/ @9 p$ s
2 S" C. v7 c& |8 U, c File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/quotas.py", line 115, in tenant_quota_usages
6 G* j7 J/ N3 ~: e3 o; x9 ? $ c9 q9 a% _* b. g$ W6 N4 f/ }6 g( g
disabled_quotas=disabled_quotas):
# g: H4 q/ O! M' S' P ; k( m$ S! d& M. \+ |
File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/quotas.py", line 98, in get_tenant_quota_data8 e7 G5 ^, `, g& Y7 @+ y) I
# E- l% o6 t; R8 j- g7 S6 I1 V
tenant_id=tenant_id)+ H( W q6 S$ ~$ t* W
( Y# g0 U- U2 w) m3 ]+ g5 C" T File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/usage/quotas.py", line 80, in _get_quota_data: P# j1 `* n6 ?9 X p$ E0 i
0 n3 P) N1 u# d. d, } quotasets.append(getattr(cinder, method_name)(request, tenant_id)); v! ]/ `5 \7 L0 G. ]2 y: z
+ l/ S, ]) Y1 c& i
File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/api/cinder.py", line 123, in tenant_quota_get! Z1 ] q" I- S& N' Y8 U3 H: `
7 T( v3 n7 y4 X+ S c_client = cinderclient(request)
/ m) K2 r7 s. n " }5 d; m5 V( J- H! s2 O6 M% X
File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/api/cinder.py", line 59, in cinderclient0 V$ o2 Q5 k ^
' B) L& s& l7 x5 k8 H7 \6 O, b
http_log_debug=settings.DEBUG)4 I% R! E# I* C9 @2 \! z. u% A0 X
7 a9 h( \5 V" Q$ q- z$ a; v H File "/usr/lib/python2.7/dist-packages/cinderclient/v1/client.py", line 69, in __init__3 P* d( f3 J: @, l8 ]" ~
$ E3 c+ {8 n: |9 U- E! W( }$ z4 U cacert=cacert) p9 w, |7 I( a% o( J
h: i# y6 [1 w f( @8 y
File "/usr/lib/python2.7/dist-packages/cinderclient/client.py", line 78, in __init__
" {1 k9 I8 w" i; R3 N$ C5 M2 i 8 F1 B( Z7 b) v7 |( \9 e$ ]
if hasattr(requests, logging):
' j, X6 K. S% c1 A) V
; h1 y& |% d& ]: T: v; E! A7 u, GTypeError: hasattr(): attribute name must be string
* z& [ }: h* i+ K: Z% K
- x# T; l( r6 @3 m( X2 Q; R( M. n N% c
错误信息中指出了 Cinderclient 的 client.py 中 78 行 hasattr() 方法的属性必须是一个字符串。& N8 |: f) h B t! C
修改代码:
7 E5 d, P8 q) v8 K- h5 B2 Q
' M" S2 M" c+ l0 j. X- z& w ! m2 H( T. `7 ^6 G6 \- R0 |
4 H% h3 q4 R+ A. m# vim /usr/lib/python2.7/dist-packages/cinderclient/client.py
! S7 H3 [# q0 B2 | u' R6 H; V
. L% y t6 ^" {8 e( a5 D4 Q 78 if hasattr(requests, logging): # 改为 : if hasattr(requests, 'logging'):
( d& A5 l/ C' s2 h* ?6 K
, P& }1 }* f; `9 U h* p1 [8 { 79 requests.logging.getLogger(requests.__name__).addHandler(ch)2 z/ p' D# M3 h' f9 i8 _
# N! C* u9 \0 S8 _+ ~0 x6 \
) _5 N _; U6 i0 u% G9 ?' q4 [ C2 g重新启动 apache2 :
1 x& ~5 M. y, u$ Z" Z' ?' d; J; F6 N2 |$ u( \
/etc/init.d/apache2 restart
' ] a- S6 L5 u6 d9 N w! k' s
7 G9 A) e7 ?2 _- K) _ R [: S: X这次访问 dashboard 没有报错,尝试创建 volume 也没有问题了。+ N% M- I% H# q- n, ?
9 S! M" x3 a7 W7 T11、Unable to attach cinder volume to VM
, r8 P% o ]+ Q1 g) s# s
( G: |9 {% b: }( d8 N( Q" A, C% Z 在测试openstack中的volume服务时把lvm挂载到虚拟机实例时失败,这其实不是cinder的错误,是iscsi挂载的问题。8 c; V: ^1 ^) t
9 B- j6 X9 T1 `# ]# F9 t% N以下是计算节点nova-compute.log 的错误日志:
9 U7 H% e L8 j" F5 M4 v$ H2 G6 {' c0 U
2012-07-24 14:33:08 TRACE nova.rpc.amqp ProcessExecutionError: Unexpected error while running command.4 v$ @: I% f. Z: J' m9 M
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
; N% j& |! m- [6 w& |2012-07-24 14:33:08 TRACE nova.rpc.amqp Exit code: 255
9 @& O6 V" `# e2012-07-24 14:33:08 TRACE nova.rpc.amqp Stdout: ”
* }: z/ |' V m1 N' w" X2012-07-24 14:33:08 TRACE nova.rpc.amqp Stderr: ‘iscsiadm: No portal found.\n’) u# T0 ]/ h& M4 a) J
0 T, C2 N" v8 K( s
; w/ m+ D, I% E. U; D! J+ I( e. P8 c
以上错误是没有找到iscsi服务端共享出的存储,查找了很多openstack 资料说要添加以下两个参数:
5 c2 C% d: l# w7 a3 i. G/ }
% Y% i" o2 t- T. G) i/ _, Piscsi_ip_prefix=192.168.80 #openstack环境内网段) M2 T* ~% s: y$ `" ?) a4 w6 P
! G: C& `- F% a
iscsi_ip_address=192.168.80.22 # volume机器内网IP' z2 G" l" D4 A6 ?# _. q$ z7 e4 a
9 B. a$ r4 h' s# s9 O$ _6 X可是问题依然无法解决,后来发现只要在nova.conf配置文件中添加参数iscsi_helper=tgtadm 就挂载失败。
- ~3 s. C& N3 y0 ~8 W' H; |1 @
根据这个情况进行了测试查看日志才发现:如果使用参数 :iscsi_helper=tgtadm 时就必须使用 tgt 服务,反之使用iscsitarget服务再添加参数iscsi_helper=ietadm。
s. l( i1 V/ V7 ~4 c6 A, G7 L7 U" K' s. U- n) g
我测试环境的问题是tgt和iscsitarget服务都已安装并运行着(在安装nova-common时会把tgt服务也安装上,这个不小心还真不会发现),在nova.conf配置中添加参数iscsi_helper=tgtadm ,查看端口3260 发现是iscsitarget服务占用,所以导致挂载失败,我们可以根据情况来使用哪个共享存储服务!!将tgt 和iscsi_helper=tgtadm、iscsitarget和iscsi_helper=ietadm保留一个即可。
- K) m4 v6 F# R6 h0 m+ V# z7 F
/ p" A, X0 c2 t4 O12、glance index报错:/ \2 ]- [' ?, }! ?0 D- L$ C
8 L" Q8 s- I( D( }% qAuthorization 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)
# P* X& U. r* m- L3 O2 e : s+ w7 Z$ L6 `/ U/ d7 C
+ M3 g% C* x& B 在 Grizzly 版,我测试 glance index 时候报错:
8 P- z) G* z; i0 Y$ Q8 d4 F$ M7 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)
+ j- _% `+ Z4 F. O错误信息指出:glance 没有通过keystone验证,查看了 keystone 日志,报错如下:
+ B8 w0 B( T. r) [8 c& I6 x4 j6 ?* J
2677 2013-03-04 12:40:58 ERROR [keystone.common.cms] Signing error: Error opening signer certificate /etc/keystone/ssl/certs/signing_cert.pem
, ~$ R/ |6 d& S7 U1 a2678 139803495638688:error:02001002:system library:fopen:No such file or directory:bss_file.c:398:fopen('/etc/keystone/ssl/certs/signing_cert.pem','r')
6 o/ I1 ]$ U4 F2679 139803495638688:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:400:% {# w* k8 ]) C; d2 b& u4 _
2680 unable to load certificate
* r0 N4 O$ Z1 G; @! m2682 2013-03-04 12:40:58 ERROR [root] Command 'openssl' returned non-zero exit status 3
; n/ e& n( }! y$ M* ~, I2683 Traceback (most recent call last):
+ p- N' l3 E4 ~5 N. u7 X h2684 File "/usr/lib/python2.7/dist-packages/keystone/common/wsgi.py", line 231, in __call__+ p6 R: }" A" g0 O! c
2685 result = method(context, **params)* o1 W8 c1 f3 K, B5 B
2686 File "/usr/lib/python2.7/dist-packages/keystone/token/controllers.py", line 118, in authenticate
9 i% l U) q/ M8 `8 I2687 CONF.signing.keyfile)
& H `# S' }, I! `2688 File "/usr/lib/python2.7/dist-packages/keystone/common/cms.py", line 140, in cms_sign_token
: D) Q* L8 ^1 j2689 output = cms_sign_text(text, signing_cert_file_name, signing_key_file_name)
k; t7 B8 a7 s. _9 i4 U+ a2690 File "/usr/lib/python2.7/dist-packages/keystone/common/cms.py", line 135, in cms_sign_text
: D8 _6 g8 T$ Q* ~* J: D5 n5 ]2691 raise subprocess.CalledProcessError(retcode, "openssl")
( t( g0 z% a' G6 J0 J( U2692 CalledProcessError: Command 'openssl' returned non-zero exit status 3! w: p# ]! | i+ r! ]
在Grizzly 版中,keystone 默认验证方式是 PKI , 需要签名证书,之前的版本都是用的 UUID,改 keystone.conf:
5 m& p% ], z" K' n% a& l$ [9 P6 M' _4 {* c5 d; p3 t1 s$ E
token_format = UUID
3 f1 l: p8 l5 n9 y8 y在试一次就没有错误了。/ j! c' U1 x8 `6 L( C) i" u) g# Q7 y, f
, K$ w/ Y/ Y ?2 s. U" J( f# |2 w
13、镜像制作9 ^6 w+ f/ P. b( R0 o% l7 F B
/ D7 u. S1 i5 k( a7 N, @这里主要强调下windows的镜像制作,因为windows的涉及到加载驱动的问题,就比较麻烦。' I7 B. @( I5 g' g% W. x$ Q1 h2 k
5 h) ]8 L" O! L下载virtio驱动,因为win默认不支持virtio驱动,而通过openstack管理虚拟机是需要virtio驱动的。需要两个virtio驱动,一个是硬盘的,一个是网卡的,即:virtio-win-0.1-30.iso和virtio-win-1.1.16.vfd。这里主要强调两个地方:
% x2 ^# H5 T7 a( @- c
' e' r- U# f p8 c* K( I$ o! R/ }- h1、创建镜像: 4 M4 N& U2 Y* B9 C
% K- {$ |; M5 m3 O# {$ i3 r$ L kvm -m 512 -boot d –drive" g: R' L# y9 ?- f/ |
6 |5 `$ E8 `! rfile=win2003server.img,cache=writeback,if=virtio,boot=on -fda virtio-win-1.1.16.vfd -cdrom windows2003_x64.iso -vnc:10
5 b8 e) E" P* w% Z5 a$ K . [4 F4 ~7 ?8 y4 [, y `$ l( H3 F$ J
3 E$ `$ Y8 {! M( |' {1 C
2、引导系统 :/ j8 h l# u n6 Q
* B4 g& q, R0 J0 Jkvm -m 1024 –drive file=win2003server.img,if=virtio,
: E) a, @* Q$ X I" f1 m2 D : C M7 k) f6 x; \% k
boot=on -cdrom virtio-win-0.1-30.iso -net nic,model=virtio -net user -boot c -nographic -vnc 8
: \% \6 f @1 K% S, K
3 g: x, @ ?7 l
8 Q0 E: i2 }* l# {; s" L+ T. \; C9 G这里需要注意的地方是if=virtio,boot=on –fda virtio-win-1.1.16.vfd和引导系统时使用的virtio-win-0.1-30.iso 这两个驱动分别是硬盘和网卡驱动。如果不加载这两个驱动安装时会发现找不到硬盘,并且用制作好的镜像生成实例也会发现网卡找不到驱动,所以在这里安装镜像生成后需要重新引导镜像安装更新网卡驱动为virtio。
; @" ^8 j/ J, ~# a. F5 e7 U! f/ i& J$ o6 U: I3 J$ f: z
14、删除僵尸volume
* y4 E8 ]+ R+ q" G7 j& J( B) B
% |2 ?8 k# ]7 j+ n7 k9 |如果cinder服务不正常,我们在创建volume时会产生一些僵尸volume,如果在horizon中无法删除的话,我们需要到服务器上去手动删除,7 j9 y8 E: o( A5 E( B3 G
2 N8 Q: a3 d, h命令:lvremove /dev/nova-volumes/volume-000002
) U5 D0 U2 ^2 i( d; _2 h) e) L3 G$ t- N
注意这里一定要写完整的路径,不然无法删除,如果删除提示:
0 j0 w# n! q0 C# \0 H; r8 v8 k
5 E8 \8 T D3 ~' p6 z“Can't remove open logical volume“ 可尝试将相关服务stop掉,再尝试删除。删除完还需到数据库cinder的volumes表里清除相关记录。 |
|