|
|
将kvm管理的虚拟机迁移到openstack) w7 A# f: k h8 \ q/ w. D7 W
]( C; B; N; v' k% d, O( _; Y$ p说了这么多,这才是本文重点。具体步骤如下:
' N# B. V' J' [; L3 y2 L
7 n, ?+ M9 ~: k* A( ~a.备份kvm中的虚拟机成为镜像文件,在计算节点执行* A, e/ m* F8 g- x* p: s, l
" c+ y+ J& I! Y6 N6 Fqemu-img convert -f qcow2 -O qcow2 disk newdisk ( a. k5 X* w0 Q3 R/ M; d
! {4 Z4 X5 J7 U% D( |b.停止虚拟机
: z# m1 V* ~- g" n9 R0 C$ o
7 F1 k' k' k. c$ b& Uc.在计算节点创建nfs将上面打快照的newdisk共享到控制节点,主要要减少大型虚拟机在结算节点和控制节点之前的拷贝,虚拟机一般500g左右。mount好以后,控制节点就会误以为镜像文件已经在自己的控制节点上了,省去了将快照镜像导入glance的步骤。
% c/ r2 H) C- P* h
0 O; @6 \" I, }7 W q9 A3 h5 Pmount 192.168.0.2:/home/share/newdisk on /openstack/lib/glance/images, E6 O. t5 G2 S* ~1 x; Q. b
9 W& ^5 B- V- X; i- k! [5 Y9 G/ Z& od.修改openstack的数据库,修改数据库后,在新建虚拟机时才能在页面和openstack真正使用刚才假冒导入glance的虚拟机快照。细心同事写的脚本。在控制节点执行。
, C! s+ j$ B v; T9 m& {+ ?4 T9 {5 Q1 D9 u
#!/bin/sh
: m; A# K5 a! G& {7 D1 [
8 a" F4 q( Q7 o/ o9 _- e. d4 f* Riname=$1/ P, g. q2 S/ K$ a
* T i5 J1 b0 @5 R. b4 ^ J
filepath1="/tmp/$iname-1.sql"
9 ^$ z. r0 Z9 d+ m3 t4 M8 u9 N1 Z) n; l2 u, o
filepath2="/tmp/$iname-2.sql"8 h2 K% O0 e3 H, b& @
/ c$ c1 D) I3 T6 ] {: zmysql -uroot -ppasswd<<eof
" r. L! O( e* g6 ^5 v: O5 {( i. ~& Q8 b
use glance; x9 I6 b8 T; H8 ^8 v
, ^: d0 z4 V! n
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);
, Z, m8 k. g) V! r. Y) V7 E6 f0 U! c9 z0 T/ u8 h# ?6 Y2 G* a
load data local infile '$filepath2' into table image_locations(image_id,value,created_at,updated_at,deleted_at,deleted,meta_data);
) Z' Y' E3 z* l0 \9 l
: G; K# S' D) Y! x8 ?EOF% E# \/ _& v+ \7 H
- o+ J$ i4 n& D: G5 u+ G: t
执行import_mysql.sh 192.168.1.xxx_20161205
6 w2 ^6 G$ M% I6 ? ]; Y2 [ d. Z. \( t1 Y2 h1 S( G5 H$ g
inname-1.sql内容:8 r: G* D% v8 v: Z }
7 t8 [6 v5 x4 j) J: R) J' pe340ccc1-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
5 {) N8 r0 Q6 P; e" e- c- {: C4 t3 F) Q" y9 ]
inname-2.sql内容:
& t5 X4 B3 C, U n9 b5 Y L/ ]2 ~) j6 _; H
92b44daf-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 {}
6 M6 C2 A4 B6 z9 g
6 H7 X1 ^/ G4 R! o3 r& a' e0 ~e.修改计算节点openstack HAVANA代码,由于我们不想让glance把快照传来传去,假装了glance的已经导入的快照,但是glance还是有办法判断,注释下面的代码让glanceclient不再判断。记得注释完pythonc编译一下,然后重启service openstack-nova-compute 服务。5 D1 G2 i! d# X6 j5 d
5 |4 W5 v2 s9 s4 b: k) U
vi /usr/lib/python2.7/site-packages/glanceclient/common/http.py; u) a6 {. P6 |2 h! D
, [# \2 n: Z3 ?2 @- m7 S+ y8 u将501行-504行注释代码
5 e3 s% i3 \+ }. U* z5 Y0 U' n1 [4 ^/ |
501 #if self._checksum is not None and md5sum != self._checksum:
1 `! C$ L2 _2 v9 |9 L% z- K1 v$ w0 F
502 # raise IOError(errno.EPIPE,8 k2 g6 P. I; p1 ^
; M' _$ h) n _0 M4 H( v9 x. D7 N503 # 'Corrupted image. Checksum was %s '7 c$ T' O8 ?- ~0 p% t7 _
" ]* a: ~' y3 |0 r
504 # 'expected %s' % (md5sum, self._checksum)): J0 G- n ?& U/ C- b) Z
/ T; p2 h- x/ R1 i" }2 p) |8 ^f.到这一步,kvm到openstack Havana的快照镜像已经准备好了,只需要在建立虚拟机就可以了。当然具体建网络,subnet和openvswitch的port过程不说了。5 h! Q1 ?8 B0 x! C+ ^
* u) e! a L) S6 z9 ?5. 验证主机,一切ok,KVM虚拟机迁移到openstack 成功。, \( g! }) ], B, |; V# m
3 e+ _6 Z' z% y3 N</eof
* \ G/ _/ B* q9 c6 H9 ^# }% a
9 v. W6 {$ k: \- N# C, g( f<eof
( b4 s. V8 R7 D q& O8 t, B$ }+ T: j" F. K) H
</eof3 Q, t& i% L( J- M8 A
: k: Z i K2 j) R |
|