找回密码
 注册
查看: 2344|回复: 3

openstack 疏散功能nova evacuate

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2021-8-30 17:33:16 | 显示全部楼层 |阅读模式
[root@controller1 ~]# nova help  evacuate5 Z. R/ I( q  V
usage: nova evacuate [--password <password>] <server> [<host>]
3 p$ P3 T3 K' w6 dEvacuate server from failed host.
& z0 ^, ]0 {& m  c6 HPositional arguments:: s# p+ m" o1 W/ l0 f" ]$ G
  <server>               Name or ID of server.
  z; s( P. @* t; x7 e  <host>                 Name or ID of the target host. If no host is! x0 h4 f' w8 X" A) G  G
                         specified, the scheduler will choose one.+ }8 L+ v. _( l4 s& b/ l9 \: V4 T
Optional arguments:- ?: v6 b, R  H* B
  --password <password>  Set the provided admin password on the evacuated
9 R$ E7 V$ f2 I! E, B, K                         server. Not applicable if the server is on shared% s( R& G, i6 E: x7 R
                         storage.- Y0 }9 b+ [: H

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2021-8-30 17:35:13 | 显示全部楼层
前提条件:% i9 s4 Z7 V1 U
openstack和ceph集成完成,保证虚拟机系统盘运行在ceph上
  p' b$ V6 r8 m  o7 g  }( I, y0 r- _
配置步骤:
8 x0 [# V, a* H$ U" P0 w1.在各个计算节点之间做root的ssh认证,可以相互免密登录
" b2 N$ c) m, w6 s9 F  I& \1 X/ i. p, X: \* G9 g
2.配置libvirtd服务修改配置' L" L( w; l0 u# P
8 \" U7 O- L6 L
# vim /etc/libvirt/libvirtd.conf, L% i. r7 S% C1 I$ x
9 @% R  w6 E; N  M  q2 i
listen_tls = 0
0 _0 W+ M/ m) rlisten_tcp = 1
. N' |5 u0 H- Z4 I0 Runix_sock_group = "root"
# x5 C# f' T( A; Gunix_sock_rw_perms = "0777"$ q4 F7 A! ~1 z% c9 k
auth_unix_ro = "none"
' c" ]) A0 ~; C% yauth_unix_rw = "none") Z0 ?" [6 Q1 b- T: @% c) \
log_filters="2:qemu_monitor_json 2:qemu_driver"
$ h: I% h7 H" F& J+ ^  h$ v  alog_outputs="2:file:/var/log/libvirt/libvirtd.log"2 z- m( L; w3 H4 n
tcp_port = "16509"! P2 Y$ @7 n" v7 k" B/ C  q
listen_addr = "0.0.0.0"
: p0 w! E% }2 c- {$ Pauth_tcp = "none"+ h: L3 d/ C% q$ L
修改配置
7 J. U+ K( V6 w% ]# D0 o8 `
+ `2 \" z3 n9 j6 P1 M$ Xvim /etc/sysconfig/libvirtd
. i" j3 V. B* r6 ]! V. r7 f
" V6 ?( o0 U% S& V8 z% PLIBVIRTD_ARGS="--listen"
# y5 q, ]$ D4 x: N#重启libvirtd服务
* g3 S9 i; y1 w4 O3 d
. h# F  T5 U' l, c3 w6 i# systemctl restart libvirtd
/ `8 v' O9 Q3 i5 ]% d$ V/ ]7 e3.执行热迁移. B$ j- z: L: D0 V' n
  K7 ~) e. M3 ~" ?% D8 a; b5 Q
# openstack server migrate 3aa7f750-0867-43e8-accb-d2262ab99932 --live compute01
# ^1 g3 h8 O1 ^. w4.疏散步骤
9 S6 w7 v" W6 R% Y. i, n4.1 主机查询) A3 G# n' p: H2 X

6 v6 b( ~; L: q4 h+ m/ f+ @# openstack host list
+ f6 R, o& ~, e6 A) T/ B[root@controller1 ~]# openstack host list . ]3 `7 n6 N$ j
+-------------+-------------+----------+. a" T4 k! S% n( p6 c$ K3 A; Z5 L
| Host Name   | Service     | Zone     |" d" i. d" r. b/ B
+-------------+-------------+----------+
8 j6 i/ S4 q2 G0 ^- a3 d| controller2 | scheduler   | internal |8 {4 d& {8 v! w
| controller3 | scheduler   | internal |
8 Y0 y" J* K+ m8 K: q2 m4 l- || controller1 | scheduler   | internal |6 f/ i/ q( M; m4 k0 x5 o* b7 J% O
| controller3 | conductor   | internal |
% Q) P3 u: J" [2 u. W| controller1 | conductor   | internal |
1 _  |7 B3 f6 H0 P2 ^: B( @) `4 K/ m) U| controller2 | conductor   | internal |
2 S: k0 X  {/ U# {| controller2 | consoleauth | internal |, ?0 Y1 o1 A& Q' P1 }, O4 N# [
| controller1 | consoleauth | internal |
$ u. \. i1 V8 M3 a| controller3 | consoleauth | internal |
* u' d( i! H" I: `+ m% D: {| compute02   | compute     | nova     |- o: X( P3 q9 y3 x4 r& a8 H
| compute03   | compute     | nova     |% Q9 f! p, R) Q; V  \
| compute01   | compute     | nova     |7 j4 x3 b6 ?# k- j5 n
+-------------+-------------+----------+
& e# M& ]" X# {! z; D) o8 R  T( w' T: J

5 F% ~" W, u2 P, Q1 j- x3 W9 H  A4.2 执行疏散" E% z1 T3 r3 s$ z( ?+ S

1 u8 o0 @; G4 ~- y! `一台计算节点的所有虚拟机疏散到另外一台计算节点
! t5 x3 ]. u2 ~, J
) b: D8 }* B1 _1 }  Q2 M# `  h- W* J! \2 @+ T! s9 j8 h

* G) J+ [4 y) q' l; @# nova host-evacuate --target_host compute02 compute01
! a+ M: ?9 t. F" L+ t  m0 t$ R) u一台计算节点上的一台虚拟机疏散到另外一台计算节点
- ]' F0 `/ n# `4 }1 B4 g% n- U. i7 j, `3 _
# nova evacuate 3aa7f750-0867-43e8-accb-d2262ab99932 compute026 T% g- X1 H+ y0 X8 D" J) e

: l- L( h8 G8 G" i+ @4 ~$ z9 f  L6 x( W4 Y! M" \
[root@controller1 ~]# openstack host list
1 b2 f' `& G( D. d5 r2 L. V% v+ ^+-------------+-------------+----------+
4 j+ ^) r1 M, {9 v9 M| Host Name   | Service     | Zone     |
3 @( R  W0 J9 P  v+-------------+-------------+----------+) ^9 L2 D% K% c; E9 w4 x! A: x4 o$ u
| controller2 | scheduler   | internal |
. x* J: d1 `1 ?  ^| controller3 | scheduler   | internal |
- [; e6 `, _7 e/ k5 m0 |; B' u| controller1 | scheduler   | internal |
' y3 `/ [! G7 w* J! s* g% d) n- V6 L| controller3 | conductor   | internal |
# }, `# A( E: S9 F  \* ^| controller1 | conductor   | internal |
$ \* U, X. \! ~| controller2 | conductor   | internal |
5 u* e# K! E9 o" l| controller2 | consoleauth | internal |
  i6 Z, r& X5 v" p. Y" a; ]| controller1 | consoleauth | internal |
1 e# J) D0 q8 V5 A9 J| controller3 | consoleauth | internal |2 y6 \! q2 r8 f
| compute03   | compute     | nova     |% q5 z$ {/ `9 a7 t4 ^+ C
| compute01   | compute     | nova     |
' N% K! k9 C: F* s$ A* k+-------------+-------------+----------+! Z9 ]) h9 C4 Z* T* j& b

: M  d0 A* @$ f: d6 H[root@controller1 ~]# nova host-evacuate --target_host compute02 compute018 O7 V! m3 J( m# d9 A
+--------------------------------------+-------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+. ^$ o/ @$ A! }4 n* @; o
| Server UUID                          | Evacuate Accepted | Error Message                                                                                                                                    |* ~6 C/ J7 H. |( w0 E
+--------------------------------------+-------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+* Q) r* N8 L" {* ~! B/ ^- d. N* i
| 590e3822-085b-4273-bce1-bf0e7a09b9f7 | False             | Error while evacuating instance: Compute service of compute01 is still in use. (HTTP 400) (Request-ID: req-a53b7625-8718-4fe9-9c90-ba67bc79c5bb) |
8 c& b5 W7 g8 y1 x/ x* {+--------------------------------------+-------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+/ A  x5 g" M% U% N
[root@controller1 ~]# nova host-evacuate --target_host compute02 compute03, \7 O/ a& |( F
+--------------------------------------+-------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
* v+ Z' v# f0 [6 O$ Z9 @/ u| Server UUID                          | Evacuate Accepted | Error Message                                                                                                                                    |' y) j: E  g8 w, i. j+ B4 Y4 ~
+--------------------------------------+-------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+" g& h) `- k) F3 s7 ^# n" U
| 347d5d2e-1516-41ef-b247-a42bc72e093c | False             | Error while evacuating instance: Compute service of compute03 is still in use. (HTTP 400) (Request-ID: req-d6940859-0d1f-4453-b6b7-16091b602b39) |
8 k( E/ U) x9 T/ r# F) ^4 V4 ~+--------------------------------------+-------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
3 A% K" _# k& J1 \( {
4 ?% h2 T9 }6 q1 v+ m+ `9 B9 y[root@controller1 ~]# nova list
9 @8 Q& g2 S) e+ [" m+--------------------------------------+----------+--------+------------+-------------+-------------------------------------+! b* k. V6 t8 a& o$ |/ J
| ID                                   | Name     | Status | Task State | Power State | Networks                            |* e# q- @% ^% S; J7 @+ C
+--------------------------------------+----------+--------+------------+-------------+-------------------------------------+
( ^: [: Y) [% T0 v" T| 7b01d71a-40d4-45fa-bf5c-97e676b2b9a2 | test1    | ACTIVE | -          | Running     | bridge=192.168.0.206, 192.168.0.233 |
# l* y+ m9 `& a4 R" Q& H| 590e3822-085b-4273-bce1-bf0e7a09b9f7 | zhangyj1 | ACTIVE | -          | Running     | bridge=192.168.0.223                |$ ~, ]0 t+ A/ H2 w
| 347d5d2e-1516-41ef-b247-a42bc72e093c | zhangyj2 | ACTIVE | -          | Running     | bridge=192.168.0.201                |
# j; g$ w# w2 q( w6 B; Y$ f7 b+--------------------------------------+----------+--------+------------+-------------+-------------------------------------+
, C  w3 s1 u+ P[root@controller1 ~]# nova evacuate  7b01d71a-40d4-45fa-bf5c-97e676b2b9a2 compute03
6 J$ y% k* J$ H) {/ R[root@controller1 ~]# nova list
& M. C  h* D! Q* g1 \+--------------------------------------+----------+--------+------------+-------------+-------------------------------------+8 e' l, Q7 a0 l6 b; W
| ID                                   | Name     | Status | Task State | Power State | Networks                            |7 C. B0 l) s/ R! B3 W
+--------------------------------------+----------+--------+------------+-------------+-------------------------------------+. Y+ q: Z1 `0 L
| 7b01d71a-40d4-45fa-bf5c-97e676b2b9a2 | test1    | ACTIVE | -          | Running     | bridge=192.168.0.206, 192.168.0.233 |
  U8 L& b0 R% E* k! U| 590e3822-085b-4273-bce1-bf0e7a09b9f7 | zhangyj1 | ACTIVE | -          | Running     | bridge=192.168.0.223                |. b( G3 Z# ]1 @* r
| 347d5d2e-1516-41ef-b247-a42bc72e093c | zhangyj2 | ACTIVE | -          | Running     | bridge=192.168.0.201                |' e) v2 E% ?6 X' I- i, T. h
+--------------------------------------+----------+--------+------------+-------------+-------------------------------------+
* ~" K# k' a" s% k. G6 v[root@controller1 ~]# nova show 7b01d71a-40d4-45fa-bf5c-97e676b2b9a2& Y1 S! @" I3 C  W
+--------------------------------------+----------------------------------------------------------------------------------+
( T  h. |3 c9 p" R| Property                             | Value                                                                            |
) x# c4 l0 o, y/ _" f' F% S* R; E+--------------------------------------+----------------------------------------------------------------------------------+. J6 m2 f9 F3 N3 c9 T
| OS-DCF:diskConfig                    | AUTO                                                                             |
; m, I* X1 L+ ~  N% @  t| OS-EXT-AZ:availability_zone          | nova                                                                             |
) r5 P# F6 N+ x' Q| OS-EXT-SRV-ATTR:host                 | compute03                                                                        |" K4 {. {( T+ [# }, v/ s, T
| OS-EXT-SRV-ATTR:hostname             | test1                                                                            |
- `; [, w' L. Q| OS-EXT-SRV-ATTR:hypervisor_hostname  | compute03                                                                        |
* b8 @3 A* k  N8 o) e0 E| OS-EXT-SRV-ATTR:instance_name        | instance-00000002                                                                |
8 ^- u9 B, a: M/ L  t| OS-EXT-SRV-ATTR:kernel_id            |                                                                                  |
6 Z: n) K6 G; d- _: Q6 J5 K| OS-EXT-SRV-ATTR:launch_index         | 0                                                                                |$ ~. B6 O  v) t& q+ o
| OS-EXT-SRV-ATTR:ramdisk_id           |                                                                                  |4 e5 g4 b7 j+ x
| OS-EXT-SRV-ATTR:reservation_id       | r-uqofhf0v                                                                       |
) x' J3 N/ @6 E9 k8 q| OS-EXT-SRV-ATTR:root_device_name     | /dev/vda                                                                         |
9 Q' z  V+ T6 X" w% ^| OS-EXT-SRV-ATTR:user_data            | -                                                                                |
7 ?% @) [+ X. ^- h( @& [0 {| OS-EXT-STS:power_state               | 1                                                                                |
! }% ~6 v/ s( j; a% K/ || OS-EXT-STS:task_state                | -                                                                                |5 m  v* X, K! e
| OS-EXT-STS:vm_state                  | active                                                                           |3 j) L8 N7 O: Y
| OS-SRV-USG:launched_at               | 2021-08-31T01:25:16.000000                                                       |
$ l6 ]- ]2 A  w! L' ]  [| OS-SRV-USG:terminated_at             | -                                                                                |, l# @2 u. J% z. }& u7 X
| accessIPv4                           |                                                                                  |4 Q% y! ^+ ^' H
| accessIPv6                           |                                                                                  |4 q, [- \/ W2 I6 R7 f3 P
| bridge network                       | 192.168.0.206, 192.168.0.233                                                     |
* C: j0 Q; Y0 D  \- j( W: V0 f| config_drive                         |                                                                                  |9 N6 p& X, h; d
| created                              | 2021-08-25T07:37:43Z                                                             |& F* \4 s5 C& @0 d; U
| description                          | -                                                                                |$ b4 o/ g9 `# B- F9 }
| flavor:disk                          | 10                                                                               |
$ X8 ?1 E1 g% \- E| flavor:ephemeral                     | 0                                                                                |3 P" z; s6 g, o5 e3 _
| flavor:extra_specs                   | {}                                                                               |
) ~: y3 W3 g3 |* g2 w| flavor:original_name                 | type-1c-1g-10g                                                                   |) I. t& w2 u/ O* W( C
| flavor:ram                           | 1024                                                                             |5 g6 z* h4 U  ~- M' A+ n2 l
| flavor:swap                          | 0                                                                                |# n) H  D3 R, O+ b; W
| flavor:vcpus                         | 1                                                                                |5 ^+ f  V2 U1 ]; e" w2 X. M; v. y
| hostId                               | 35bcc54020d6ae54aebe586983a9df9d8562a0201cea0c0d85e39455                         |, }- `  s" B7 t8 r; g
| host_status                          | UP                                                                               |5 |: A6 C. J* n- L
| id                                   | 7b01d71a-40d4-45fa-bf5c-97e676b2b9a2                                             |
2 G$ X9 b& C8 N: P% I| image                                | Attempt to boot from volume - no image supplied                                  |/ `" h9 v9 J+ \) }, A
| key_name                             | -                                                                                |
7 D1 l) m& g( y3 n9 I| locked                               | False                                                                            |
4 b1 g0 V2 d; N7 I5 {( \7 Z3 x! x| metadata                             | {}                                                                               |  e8 {; H- q) O  X" y
| name                                 | test1                                                                            |" A) u& f( j* A9 K1 ]7 l
| os-extended-volumes:volumes_attached | [{"id": "d385a405-529b-450e-98e7-44aad0d3e94a", "delete_on_termination": false}] |
9 l: E+ U8 K) j+ J| progress                             | 0                                                                                |
4 E2 W) W) d3 A/ @| security_groups                      | default                                                                          |% j3 w- s  b/ d& T' |1 W
| status                               | ACTIVE                                                                           |
4 L8 V' q& E" J( F- q- c| tags                                 | []                                                                               |' E! g8 X. O* m5 E, N6 h" b( V2 y
| tenant_id                            | 92a5a26fc14d418d881ade0ccbcffc59                                                 |9 b9 {4 r5 e8 Z2 M. S: O5 E
| updated                              | 2021-08-31T01:25:17Z                                                             |+ x' C1 @0 x9 F9 B- c, K9 r4 D
| user_id                              | b1ffbc1f84cf42c99a8e59fdaf7f1cf5                                                 |8 a3 l$ u" L* v5 {/ |
+--------------------------------------+----------------------------------------------------------------------------------+: B9 W5 r! @" Q; D. \! H* S2 n0 \
————————————————
8 L3 G2 e$ y8 R$ S' I5 J1 p6 N9 E9 I, q
2 D7 a) a" W, Z* u8 Q! C) k+ ]3 `6 o  S- V3 ?, J

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2021-8-30 17:35:43 | 显示全部楼层
一. 当实例所在的节点发生故障不可用时,可执行evacuate操作,在另外一个新节点rebuild该实例,实现高可用。
$ K7 M4 X. D2 {5 k/ h, a这可以是OpenStack计算节点HA的一种实现方案。
+ A& V  L: C! D- V) g1 |2 v
2 i, J" {, @$ G, K6 j2 ?+ Y二. API调用3 N3 {) P; p* Q8 ]3 C  j
nova.servers.evacuate(server=fm['id']), on_shared_storage=True: A1 _5 a# q3 h# R  O
1. on_shared_storage参数在2.14版本后废除,自动检查是否为共享存储。
9 c5 {" B6 Q( T% R; n1 Z    共享存储能够保证实例在另外新节点重建后数据不丢失3 O% p% K  {/ Y( {: @  ?" L/ Q
2. 可以设置目的主机host
. j  C! R1 A+ X2 S( B6 Q    如果不设置host,nova会通过scheduler选择一个新的主机(不会分到原主机,因为rebuild函数中过滤了原主机)5 u  T7 C' g$ D; |' d
3. 这个调用只是发送了evacuate操作命令,具体是否真正疏散成功,无法知道
% C$ m# g9 K. h/ T5 q- m) f
" B- F2 c7 J, i三. 源码分析
! ?! d+ Z" v6 r7 C5 f1 N& ~对应的是/nova/compute/api.py% v) O" r% s/ E8 E
@check_instance_state(vm_state=[vm_states.ACTIVE, vm_states.STOPPED,. x6 ]* R( K9 R, u# u8 q* v, w' x! k
                                vm_states.ERROR])
; a. W$ g+ a' K/ ~0 M) z& U. f* B- rdef evacuate(self, context, instance, host, on_shared_storage,; L) x& ~. J0 d+ o3 W8 H9 j
            admin_password=None)
8 J. y& W; M) a% W  }0 B+ ^1. 函数上方有装饰符 @check_instance_state
3 l+ I" H; s: G! Q: v+ n表示在执行evacuate方法前先执行check_instance_state:检测传入的instance的vm_state是否为ACTIVE、STOPPED或ERROR。如果不是这三种状态,不能执行evacuate方法。
" q! C, S/ K5 Y6 v0 K& x! C' Q( w* Q2 n% l4 X* J" H5 d/ u
2. 首先检测instance所在主机的状态是否为down,如果不是down(比如up),执行会出错。: L1 n# R( @0 T- L
LOG.debug('vm evacuation scheduled', instance=instance)
- u# ~5 m+ Z- n# 原实例所在主机, V( c0 x2 X8 ~/ s) Y, T
inst_host = instance.host, J9 j' M+ S( }4 b; _2 @' _! {  J4 N: Y4 k
service = objects.Service.get_by_compute_host(context, inst_host)+ v2 c! ~2 C: z2 N! ]5 W: |+ L
# 首先确保compute主机的状态为down
) b0 v% p4 P9 nif self.servicegroup_api.service_is_up(service):2 W' p8 K) w  i5 z) H
    LOG.error(_LE('Instance compute service state on %s '  ^# S% n, H& S" `1 p) u3 p1 f& h
                  'expected to be down, but it was up.'), inst_host)
0 J% q# g- H& }5 E. l( w) G$ j    raise exception.ComputeServiceInUse(host=inst_host), F& f0 d6 j, r- n9 W
; ?6 R$ o  }; _; |' q
3. 记录action执行操作3 C4 l( t. }( s" h# V7 J$ M1 q
# 实例的任务状态设置为REBUILDING7 M1 j+ m! S6 ?
instance.task_state = task_states.REBUILDING
( n+ |" P: U9 F/ ^2 jinstance.save(expected_task_state=[None])& x& @: ~2 q, S- u9 @
self._record_action_start(context, instance, instance_actions.EVACUATE)* l( F5 s4 I" |8 h

; _1 X6 L! o+ b/ O) S3 w+ U0 e4. 初始化迁移类
% F. c( L' Z3 O+ Fmigration = objects.Migration(context,) c: j* _( G7 m9 {/ ^! ~5 r. d8 j
                              source_compute=instance.host,& @% X' H( b3 D' X4 w, E
                              source_node=instance.node,' o+ y$ `3 i( z  i3 b" N
                              instance_uuid=instance_uuid,
- ?5 g1 H# ?7 w3 k2 H                              status='accepted',
0 V- X1 u  U& k6 C9 G" x                              migration_type='evacuation')% h  R6 I- m, l% o
5. 创建迁移(这里为什么要创建migration,并没有执行迁移)
0 i6 |% `0 u5 U# 如果提供了目的主机
. q- T; V( `1 T. V" {2 eif host:
9 j, a/ s) k/ J* x' i* \. H    migration.dest_compute = host* C- B3 d6 B, [; F% T
migration.create()
% F7 b" x1 ~. ^7 J' f8 V% m( a; C; V5 W- E9 \! }8 N
6. 发送消息通知实例的使用配额
2 |; G7 {$ e/ j; ^* L. dcompute_utils.notify_about_instance_usage(
; h; y. u# i) s& s    self.notifier, context, instance, "evacuate")
: j- z5 k- {' j8 m- g+ P
" d$ M; P  R# h. ]' E7. 最后执行task任务:rebuild_instance
( J$ J/ K, t" f* [. s所以evacuate的本质是在新节点上执行rebuild操作
/ B, m( g) M( Zreturn self.compute_task_api.rebuild_instance(context,
0 i3 @/ g/ S3 Z/ k5 m            instance=instance,
* U* B8 @+ U/ e" Q3 a& m, n            new_pass=admin_password,
& Y' g* I$ H. k8 Q: m            injected_files=None,
5 ~3 e: p+ D  V# u            image_ref=None,( [' J4 k3 z0 H0 v4 x1 D- `
            orig_image_ref=None,
- J8 Y/ z1 q. x. c' e; J            orig_sys_metadata=None,
& Q# F- X$ Q( E4 q  B% G            bdms=None,- T$ `3 N3 p* E. s$ R' l1 S$ X- M
            recreate=True,' b* \$ d. v$ q4 d4 A$ ~
            on_shared_storage=on_shared_storage,
, R8 `5 N. A! I! _0 W  P' T5 P/ k: P/ o! c            host=host)  H5 o% `( l$ w$ U/ H
深入分析rebuild_instance方法,通过各种rpc调用,最终具体执行的是/nova/conductor/manager.py
! m; ]" r; `8 O  z( J6 Zdef rebuild_instance(self, context, instance, orig_image_ref, image_ref,8 l0 A  T( e! @
                    injected_files, new_pass, orig_sys_metadata,$ _% W; o* m9 O
                    bdms, recreate, on_shared_storage,
9 K5 _8 f/ n% c+ V& }                    preserve_ephemeral=False, host=None):$ Y5 T( [( a* s% A( q1 F! j
(1)在选择新目的主机时先排除instance所在主机  j6 f3 I  }. x; F9 U
这样能确保不会在原主机上执行rebuild操作
6 ]/ D8 J7 i6 U; v# 排除原实例所在的主机,即不能在同一个主机里进行rebuild
, {& ~5 N' ]! y, M/ R, ^filter_properties = {'ignore_hosts': [instance.host]}4 j# D7 a2 i8 c) @# b: R& Q
hosts = self.scheduler_client.select_destinations(context,
. E: p* W4 _0 R3 _                                        request_spec,
& c% i0 y( M, L& s                                        filter_properties)
2 [/ h! i) a3 r1 M) A8 [- J! `(2)接下来会通过scheduler模块筛选出合适的新主机" s. ~9 ?7 F1 B3 D- m2 n$ I
(3)如果没有选出足够的合适新主机,则抛出异常& N6 S, _, _2 i5 z
except exception.NoValidHost as ex:2 B. t, \9 k) h: c2 ^; {; Z- Q
    with excutils.save_and_reraise_exception():
' u7 ^0 t' Z) N$ G' ~' j# o, f        self._set_vm_state_and_notify(context, instance.uuid,
, _. b/ B( E6 A/ B" Q            'rebuild_server',
) R' d; B! o. u            {'vm_state': instance.vm_state,3 Y& _! K9 b! o9 M+ P4 U+ |
            'task_state': None}, ex, request_spec)
/ ~& p$ h) j5 e* o7 @1 p2 W6 B, v/ Q        LOG.warning(_LW("No valid host found for rebuild"),
) I* D( n! ~0 m                    instance=instance)
6 O4 q# F& _6 k. u: U8 P  s) l不能选出合适的新主机,有可能是除了原节点外,其他节点都不可用(computer service status:disabled)或网络不通(computer service state:down),导致没有合适的新主机。
  y6 L/ q- A, t1 p1 Y4 R, A' i7 k5 a& N& i; O

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2021-8-30 17:36:52 | 显示全部楼层
前言: 因为机房服务器运行不稳定的原因导致计算节点挂掉,然后上面的Centos7虚拟机在迁移之后开机报错。这个解决方法同样适用于其它操作系统的虚拟机。基于镜像创建的虚拟机实例。
I/O error, can't read device /dev/vda 的报错信息
首先做疏散先把虚拟实例从宿主机上面疏散到其它主机,关闭云主机。

4 C) g+ O4 u% h  v
1.找到虚拟机的ID可以通过dashboard界面或者使用openstack server list命令,找到虚拟机的ID;然后查看虚拟机的详细信息。
比如:
nova show 8fa3d2eb-2401-48a9-850a-f800314c6950# 与这个命令相同功能的命令还有openstack server show ID
连接到所在的计算节点,实例名称确定是哪台主机。
注意要主机是开机状态才能看到
通过ID可以确定该虚拟机实例的数据目录,如果openstack没有对接存储的话那么在这个目录下就会存在数据文件,因为对接了ceph所以信息在libvirt.xml的文件里面。
cat /var/lib/nova/instances/8fa3d2eb-2401-48a9-850a-f800314c6950/libvirt.xml 里面就是它的vda的ID。
2.当找到这个磁盘的ID之后,在ceph集群里面去查看这个设备
rbd ls volumes | grep 8fa3d2eb-2401-48a9-850a-f800314c6950
3.取消它原来有的一些属性
# 查看卷rbd info volumes/0859147d-27aa-49a5-8373-7c515c4f3a02_disk#取消它原来有的一些属性;根据ceph的提示操作,因为有的属性linux不支持。rbd feature disable exclusive-lock object-map fast-diff  deep-flatten --image 8fa3d2eb-2401-48a9-850a-f800314c6950_disk -p volumes
4.把它映射到本地
rbd map 8fa3d2eb-2401-48a9-850a-f800314c6950_disk -p volumes# 如果映射不了执行下这个命令。rbd flatten volumes/8fa3d2eb-2401-48a9-850a-f800314c6950_disk
5.使用命令修复
# 有的可能修复不了就只能做好丢失数据的准备了xfs_repair -L /dev/rbd0p1可以ls /dev/rbd* 查看一下,rbd0p1表示的事一个启动分区。
6.取消映射
rbd unmap 8fa3d2eb-2401-48a9-850a-f800314c6950_disk -p volumes
这个时候再重新启动就正常了。! @! E$ Z: K7 J
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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