将设为首页浏览此站
开启辅助访问 天气与日历 收藏本站联系我们切换到窄版

易陆发现论坛

 找回密码
 开始注册
查看: 2372|回复: 1
收起左侧

使用命令迁移虚机 nova live-migration

[复制链接]
发表于 2018-12-2 00:56:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?开始注册

x
# nova live-migration --block-migrate d8db2011-217b-433d-aa80-06230203a834 compute2 //控制节点执行迁移1 U. u) I+ K) q4 m" w- I+ }; z

: B- g# n6 a# J& T2 }2 p/ M# ftail -f /var/log/nova/nova-compute.log //当前计算节点日志
& A) h& F: n6 ]: [
8 u& w: S+ G: J* x2016-02-17 11:31:15.179 11959 ERROR nova.virt.libvirt.driver [-] [instance: d8db2011-217b-433d-aa80-06230203a834]
) q1 e& C! F! \1 t# K  z  Live Migration failure: operation failed: Failed to connect to remote libvirt URI qemu+tcp://compute2/system:
3 q6 k5 Q% L7 \  Q. j  unable to connect to server at 'compute2:16509': Connection refused5 @1 M  |) S$ r# v
/ L/ o# E& M0 L! p9 J
# B) \6 o3 z. W. c  L# g, c" u
tail -f /var/log/nova/nova-compute.log //目标计算节点日志" ?4 R7 f0 f& z2 P; h% w
2016-02-17 11:31:14.250 46026 WARNING nova.virt.disk.vfs.guestfs [req-fa8c2e70-9679-493d-b0ba-170a9a0343d5 None]
  ?/ b1 V* |# d0 n: t  Failed to close augeas aug_close: do_aug_close: you must call 'aug-init' first to initialize Augeas
. ?6 d; Q9 [2 W& f$ k  k2016-02-17 11:31:15.442 46026 WARNING nova.virt.libvirt.driver [-] [instance: d8db2011-217b-433d-aa80-06230203a834]
5 M1 S* \3 @2 o  During wait destroy, instance disappeared.
2 y0 A6 b5 f# Z, C* a& c2016-02-17 11:31:16.056 46026 INFO nova.virt.libvirt.driver [req-fa8c2e70-9679-493d-b0ba-170a9a0343d5 None] 2 Z1 I7 @/ v* u2 H9 ~
  [instance: d8db2011-217b-433d-aa80-06230203a834] Deleting instance files /var/lib/nova/instances/d8db2011-217b-433d-aa80-06230203a834_del) {6 D5 q) I7 \0 j' a- f
2016-02-17 11:31:16.057 46026 INFO nova.virt.libvirt.driver [req-fa8c2e70-9679-493d-b0ba-170a9a0343d5 None] ' E3 I: h) U! n- b$ p6 e) U
  [instance: d8db2011-217b-433d-aa80-06230203a834] Deletion of /var/lib/nova/instances/d8db2011-217b-433d-aa80-06, G. @7 C* y; p* ~" _; d
9 L* f& W; L0 l; y
 楼主| 发表于 2021-9-10 16:49:47 | 显示全部楼层
热迁移! p8 A' Z$ N3 y, |. H+ H1 @* J" n

0 ?6 r0 F; A! s! @. l热迁移(Live Migration,又叫动态迁移、实时迁移),即虚拟机保存/恢复(Save/Restore):将整个虚拟机的运行状态完整保存下来,同时可以快速的恢复到原有硬件平台甚至是不同硬件平台上。恢复以后,虚拟机仍旧平滑运行,用户不会察觉到任何差异。
6 O- x8 J& x7 z/ F% A: y$ M& Z. p6 ~( E# m
openstack热迁移, K, @( [! p6 D4 k3 V7 }) V

/ `* i  Z+ l* m' A7 f. oOpenStack有两种在线迁移类型:live migration和block migration。Livemigration需要实例保存在NFS共享存储中,这种迁移主要是实例的内存状态的迁移,速度应该会很快。Block migration除了实例内存状态要迁移外,还得迁移磁盘文件,速度会慢些,但是它不要求实例存储在共享文件系统中。
2 h2 S$ `. q- T* NFS允许一个系统在网络上与他人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件。6 I4 s1 R: z& \( x1 u

6 d( N7 {5 ^6 \3 [; R( A) |( z7 c* a$ _2 f# E
Live Migration 的实现
" H; {: p3 l) Z6 g) F
8 l9 J4 q/ j) D1 P3 G; i8 l- T1.机器:
% J, p. F4 ~6 U3 g$ Tjovi-controller 是控制节点 192.168.3.10. r) \+ C6 `! |( p0 x$ [3 l/ v" V- R
jovi-compute1 是计算节点 192.168.3.12# I- |! o' N& ^& b
jovi-compute3 是计算节点 192.168.3.14
$ K9 U* ^( U8 i8 c6 i实验阶段,为了避免不必要的麻烦,请用命令service ufw stop关闭各个节点的防火墙,同时修改/etc/hosts文件,确定节点之间能互相ping通主机名。利用id nova命令查看下控制节点nova的uid和gid,并记录,在两个计算节点同样利用id nova查看uid和gid是否和控制节点保持一致,如果不一致则利用usermod -u 控制节点的uid nova和gropumod -g 控制节点的gid nova 两条命令进行修改,同时在所有计算节点运行如下命令,保证所有nova相关文件使用新的uid和gid$ c( K- A3 D! o+ G
[root@vmcom1-mn ~]#service nova-api stop
' P3 m3 F7 n) ]" z1 O" I[root@vmcom1-mn ~]#service libvirt-bin stop
7 r. R( o( ^& h. K5 X& F[root@vmcom1-mn ~]#find / -uid 106 -exec chown nova {} \; # note the 106 here is the old nova uid before the change" z( g& F  b  J# G, {$ N
[root@vmcom1-mn ~]# find / -gid 107 -exec chgrp nova {} \; #note the 107 here is the old nova uid before the change+ v# }2 s2 D& }* f1 j# \
[root@vmcom1-mn ~]#service nova-api restart; `6 B: e& B4 b, \0 j6 z+ |
[root@vmcom1-mn ~]#service libvirt-bin restart
$ C' W/ f( }4 m% u
' `7 t3 {9 ]( ?. Q2.修改各个节点的nova.conf
$ G: R4 `. `9 d& d0 p' H% I5 kvncserver_proxyclient_address=本机ip; D$ K/ c! @4 i& q% X1 x
vncserver_listen=0.0.0.0
. L/ i. G0 r6 h4 M$ [' ~
. e# h7 P! K  {5 l9 N3.控制节点,配置nfs
* z; I9 h1 w7 \" e
" O( ]% a4 ?# Sapt-get install nfs-kernel-server portmap: d, b$ R* L& \
在/etc/exports中加入/var/lib/nova/instances *(rw,sync,fsid=0,no_root_squash)
$ b8 g. K, A# x/ C- K3 {/ |' O( u重新启动nfs服务,portmap服务
7 \5 G% b7 y; o" L- ]' w- p- [
" P/ e# n, Y9 r: }9 f7 C. P4.计算节点,配置nfs和挂载
7 X- U, Y( v3 \9 s$ m/ m9 a. s2 Y
9 d0 t3 V4 Q$ M0 ^' d. \! N  `: uapt-get install nfs-common portmap5 x0 a2 q8 ^, ~' [
chmod o+x /var/lib/nova/instances,确保节点有执行和查找目录的权限' F9 s2 P7 @# s4 {3 d# g( _
在计算节点的/etc/fstab的目录中加入
3 {% W) m; C& s/ r$ I. c; ^2 X控制节点ip:/var/lib/nova/instances /var/lib/nova/instances nfs defaults 0 0
6 E% B) l5 r; v2 }/ [* F挂载目录,执行9 ^! C/ P5 ~/ q/ t! j: D
mount -a -v. P2 L$ t: V& W+ U/ ?* A) a6 c6 h$ x
df -k 查看已挂在目录,可以在最后看到远程控制节点的目录已被挂在) v- }! h) {. }" `$ h) A: A
+ e+ ^+ x4 |" [( @
5.修改计算节点的相关的四个配置文件,可以手工如下修改
/ f( H7 X0 Y" X$ t# j
- @& K. g; f( f8 Y$ c附修改脚本:
- d; [& F3 ]- |" k* {: r5 V: Osed -i '/vncserver_proxyclient_address/d' /etc/nova/nova.conf
3 U; f9 @1 j1 @. d3 Osed -i '/vncserver_listen/d' /etc/nova/nova.conf1 b" E$ z- r+ k8 ~
sed -i '$a\vncserver_listen=0.0.0.0' /etc/nova/nova.conf* r, x( o& i7 d. ?  B# P/ Y
sed -i 's/#listen_tls = 0/listen_tls = 0/g' /etc/libvirt/libvirtd.conf/ d9 }# l' J; ^# K4 q0 B6 }; t
sed -i 's/#listen_tcp = 1/listen_tcp = 1/g' /etc/libvirt/libvirtd.conf
% j, `- G6 f; K: ]8 Gsed -i '$a\auth_tcp="none"' /etc/libvirt/libvirtd.conf' q% p: `+ K5 M, Z: [
sed -i 's/env libvirtd_opts="-d "/env libvirtd_opts="-d -l"/g' /etc/init/libvirt-bin.conf
4 Y$ ]. s9 b& x6 M; q! osed -i 's/libvirtd_opts=" -d"/libvirtd_opts=" -d -l"/g' /etc/default/libvirt-bin! u9 _3 K8 t, i  E6 f0 L
sed -i 's/#vnc_listen = “0.0.0.0″/vnc_listen = “0.0.0.0″/g' /etc/libvirt/qemu.conf2 b" B3 k7 Z( K% o8 C" E; V1 `
sed -i 's/#user = "root"/user = "root"/g' /etc/libvirt/qemu.conf% N2 w: J( l2 c5 j6 [; ~7 n
sed -i 's/#group = "root"/group = "root"/g' /etc/libvirt/qemu.conf
7 ?+ S- }7 T8 T2 f' D+ |4 i( K+ Y
5 o8 h5 T, B; f- V0 f4 U0 b5 y' z4 e& }6 h5 Y; k7 |6 j+ C
6.重新启动libvirt-bin
3 r, y5 H. A, q* F. F$ O  f+ o7 K& _9 H: _9 j
service libvirt-bin restart  C9 |6 |9 Q0 J. u  ^
确定进程已启动。2 b7 m  j9 v# h' H
ps -ef | grep libvirt
. R7 ]  A' p6 q- _3 v  e; ?6 w确定有libvirtd -d -l进程存在) y( B2 @$ U- g
root 5277 1 004:06 ? 00:00:01/usr/sbin/libvirtd -d -l! L: Z8 M) V4 C+ _; c

( ]6 \' Y& ~) p: ^, @3 f7.重新启动nova-compute服务,portmap服务
, y6 M  |' n" @' h' N
. z( |# ^; u1 N. `/ }0 u/ Iservice nova-compute restart  L" ]2 D5 x" C; N% T& X, r/ E6 d
service portmap restart
. j, x$ Z: e9 N4 C
) `7 p5 n/ q9 s9 b) D0 @8.测试
' _( O( b6 Y, d/ h4 E$ i3 `/ I. c. r% C
root@jovi-controller:~# nova list 查看实例
8 n/ ~9 Q5 {! Jroot@jovi-controller:~# nova show 11fd9622-a948-4cdb-94d0-d8f2558cf179 查看需要迁移的实例7 q/ B4 W% b, A# q2 v9 ~* o
root@jovi-controller:~# nova-manage service list查看可用的计算节点+ K2 G3 k2 {9 m5 P( h/ W
root@jovi-controller:~# nova-manage service describe_resource compute-node2查看目标节点资源
3 M# L2 _6 W# B7 M2 Yroot@jovi-controller:~#nova live-migration 11fd9622-a948-4cdb-94d0-d8f2558cf179 jovi-compute3 迁移成功,应该没有输出。( g6 A4 R% B& ~! Q- m

+ f; W+ n# T* w- i2 G相关问题的总结:
$ C, n( v4 {8 ?9 H" T' U3 t, l+ o' j
部署过程中曾遇到两个导致无法迁移成功的错误,一个是在日志文件中发现cpu info incapable,另外一个问题是在日志文件中发现failed to connect remote host uri,经过与最后实验成功的环境相对照,发现实际上导致这两个问题的最终原因是计算节点的计算资源不匹配,例如之前失败的情况是compute1节点 cpu 4核心,8g内存,compute3节点 cpu 2核心,内存4g,所以提示出现上述错误。& t  ~( }& I' X* h3 A  B- \1 Y+ m! F
& F, g2 T. d  P2 ]: d
本质是因为在openstack源码中,有一段针对热迁移时节点计算资源检测的函数,该函数的作用检测迁移的源节点和目的节点的计算资源是否匹配,从而判断能否承载实例的运行。& w2 l$ x$ m$ {4 A0 p3 Y
2 m8 R8 s' W+ @5 w7 z
因此后来将两个计算节点都调整为双核,4g内存,按之前方案配置后,即可成功实现迁移。
; M# T) t) K# m- n1 Y: @) }6 w4 }+ M5 d' W
另外网上的部署方案都提到了要修改nova.conf中vncserver_proxyclient_address=127.0.0.1,笔者经过测试,这这种方法只适用于单网卡的计算节点,多网卡情况下应该注意填写的是与控制节点以及其他计算节点互联网口的ip,这样dashboard中的vnc才可以成功运行,否则会提示faild to connect to server错误。
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

如有购买积分卡请联系497906712

QQ|返回首页|Archiver|手机版|小黑屋|易陆发现 点击这里给我发消息

GMT+8, 2021-12-2 08:05 , Processed in 0.040503 second(s), 21 queries .

Powered by LR.LINUX.cloud bbs168x X3.2 Licensed

© 2012-2022 Comsenz Inc.

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