|
|
将kvm管理的虚拟机迁移到openstack# }( [5 c0 T/ Z" z# R
" K( s, V7 e9 t说了这么多,这才是本文重点。具体步骤如下:
# w$ Y- |. e& L. a v$ u! @" B5 y! @; K2 W
a.备份kvm中的虚拟机成为镜像文件,在计算节点执行
. d5 _6 l [9 E2 i- r- i( T9 \: }7 [7 g% R6 m
qemu-img convert -f qcow2 -O qcow2 disk newdisk
& c+ n! d) r1 u7 |
1 X u# c7 D* O/ t# }b.停止虚拟机/ j' }) U8 o3 i7 H: r7 `
, e3 {3 `' P, A( j% L9 X
c.在计算节点创建nfs将上面打快照的newdisk共享到控制节点,主要要减少大型虚拟机在结算节点和控制节点之前的拷贝,虚拟机一般500g左右。mount好以后,控制节点就会误以为镜像文件已经在自己的控制节点上了,省去了将快照镜像导入glance的步骤。) ~/ x$ ], C9 R& n9 R( r
6 z0 u8 M2 p4 ?mount 192.168.0.2:/home/share/newdisk on /openstack/lib/glance/images$ _8 O9 ^" Z4 n
3 B! U/ Y$ [3 h. w! `4 W) j3 o& fd.修改openstack的数据库,修改数据库后,在新建虚拟机时才能在页面和openstack真正使用刚才假冒导入glance的虚拟机快照。细心同事写的脚本。在控制节点执行。2 k2 J) h7 l/ P7 D0 t8 e) V
& I! a* ~( ~4 w* \
#!/bin/sh
! x+ i, k0 g; F, _+ _
# p+ e" s- n0 `$ Siname=$1
c. Z) W+ \8 G Q, Q+ {- y' ^6 e# d3 ~1 i0 R" r$ c4 @& i
filepath1="/tmp/$iname-1.sql"! c3 w2 A4 W0 n6 Y/ \
; L9 q F( S- d3 J0 Nfilepath2="/tmp/$iname-2.sql"- h |* ]8 M2 E. x, V' D' K) H
; ] H$ d9 i: S1 [8 Kmysql -uroot -ppasswd<<eof
4 O% v% X2 Z; k' b' n) R: L# K6 K+ ~& C2 C
use glance;& N5 N* d% b, x7 e3 x0 \
$ K' p+ @9 `' X* w6 J
load data local infile '$filepath1' into table images(id,name,size,status,is_public,created_at,updated_at,deleted_at,deleted,disk_format,container_format,checksum,owner,min_disk,min_ram,protected);# ~' U: V/ z) Z( }( U9 t
1 B( z" k" d6 ]' F/ x9 N6 P) fload data local infile '$filepath2' into table image_locations(image_id,value,created_at,updated_at,deleted_at,deleted,meta_data);5 _: m, V7 Q% |1 F
1 z. T' S- d: A* P/ _0 I1 eEOF
- ]6 I4 F) m: ?7 U% } s
N9 J, x/ m$ ~3 w3 g8 \' Z+ }/ e执行import_mysql.sh 192.168.1.xxx_20161205
1 K0 k0 d5 B5 C4 R+ z$ P$ E$ Z+ z5 m! D
inname-1.sql内容:# c1 I1 r P# h& T
: r0 I2 u( `+ m$ n( A/ S+ _
e340ccc1-dd65-4163-822f-348d5711313f 172.21.0.41_20161205 97956003840 active 0 2016-12-02 18:10:04 2016-12-02 19:36:10 N 0 qcow2 ovf e30b8b94918aad131cf4618a8efc3d78 f3267153b73d4bf09bed91eb289e26ec 0 0 0
& m( D) W5 G5 c. I' j1 m$ [2 C5 y0 t& D) V( c
inname-2.sql内容:) B+ t+ K9 k, p* ~! c! Y
" {2 |* N7 b& {8 R. q92b44daf-a529-469d-b428-dca8bc39fe4c file:///openstack/lib/glance/images/92b44daf-a529-469d-b428-dca8bc39fe4c 2016-12-02 17:59:30 2016-12-02 17:59:30 N 0 {}
8 M2 S. W: W' X7 `: u/ w5 H' ]; K+ Z G1 E; F0 c
e.修改计算节点openstack HAVANA代码,由于我们不想让glance把快照传来传去,假装了glance的已经导入的快照,但是glance还是有办法判断,注释下面的代码让glanceclient不再判断。记得注释完pythonc编译一下,然后重启service openstack-nova-compute 服务。
$ _" C0 V+ U# v0 p) D' r" x+ v% V; B' f
vi /usr/lib/python2.7/site-packages/glanceclient/common/http.py( ?- R8 s$ ~* `3 l# G
3 `4 v" J2 N3 }5 ?6 Q5 m将501行-504行注释代码' m, E. @+ c. ]0 @0 S% i( h9 q
# s- v- E$ ^4 W& o$ m2 ?8 v501 #if self._checksum is not None and md5sum != self._checksum:* o8 g4 q8 ~, I+ ^: f5 x3 j A
+ |5 `3 {2 \- i$ I& K
502 # raise IOError(errno.EPIPE,
A6 z9 ^3 c; y& t+ l$ _, l& D) [- Z( D& p( b9 x, b, L* I# }, S1 L
503 # 'Corrupted image. Checksum was %s '
- V7 w2 m& w$ O" L& X4 S @5 E0 `6 T9 N4 H0 X' H* S9 d
504 # 'expected %s' % (md5sum, self._checksum))
6 ^; t) Z$ t0 Y! u$ d2 \: D$ a8 p% G1 c$ _0 g; c
f.到这一步,kvm到openstack Havana的快照镜像已经准备好了,只需要在建立虚拟机就可以了。当然具体建网络,subnet和openvswitch的port过程不说了。
! q W- W9 K5 t7 m( H5 |: W1 V, y# G1 N
5. 验证主机,一切ok,KVM虚拟机迁移到openstack 成功。3 b# C1 {2 @) K0 b8 S( f
+ c! x& a! O# u/ z* r
</eof
9 P4 Y8 n' ~; g( t* F6 G- r9 u/ ~1 s5 F
<eof
7 a0 U! i: `4 z$ ^. X2 p9 `/ m/ m$ a% `
</eof
; }3 n# q m; J0 J( g, M
* o0 R- s% t; d5 W |
|