【OpenStack】Nova中的migrate/resize/live-migration

声明:

本博客欢迎转发,但请保留原作者信息!

新浪微博:@孔令贤HW

博客地址:http://blog.csdn.net/lynn_kong

内容系本人学习、研究和总结,如有雷同,实属荣幸!


更新记录:

2013.07.04  增加在线迁移虚拟机Postman请求样例


版本:master分支 2013.06.25

hypervisor:KVM
共享存储:无

1、migrate/resize

在虚拟机active和stopped状态下可以进行migrate/resize,resize与migrate的区别是在迁移的同时,改变虚拟机的flavor。
配置项 allow_resize_to_same_host 表示是否允许迁移到本机,默认是False。

迁移前:

  1. root@controller231:~# nova show rebuild-test2  
  2. +-------------------------------------+-------------------------------------------------------------------+  
  3. | Property                            | Value                                                             |  
  4. +-------------------------------------+-------------------------------------------------------------------+  
  5. | status                              | ACTIVE                                                     |  
  6. | updated                             | 2013-06-24T09:23:53Z                                              |  
  7. | OS-EXT-STS:task_state               | None                                                              |  
  8. | OS-EXT-SRV-ATTR:host                | controller231                                                     |  
  9. | key_name                            | mykey                                                             |  
  10. | image                               | Ubuntu 12.04 cloudimg i386 (1f7f5763-33a1-4282-92b3-53366bf7c695) |  
  11. | hostId                              | 083729f2f8f664fffd4cffb8c3e76615d7abc1e11efc993528dd88b9          |  
  12. | OS-EXT-STS:vm_state                 | resized                                                           |  
  13. | OS-EXT-SRV-ATTR:instance_name       | instance-0000000e                                                 |  
  14. | OS-EXT-SRV-ATTR:hypervisor_hostname | controller231.openstack.org                                       |  
  15. | flavor                              | m1.small (2)                                                      |  
  16. | id                                  | 03774415-d9ce-4b34-b012-6891d248b767                              |  
  17. | security_groups                     | [{u'name': u'default'}]                                           |  
  18. | user_id                             | f882feb345064e7d9392440a0f397c25                                  |  
  19. | name                                | rebuild-test2                                                     |  
  20. | created                             | 2013-06-24T08:14:38Z                                              |  
  21. | tenant_id                           | 6fbe9263116a4b68818cf1edce16bc4f                                  |  
  22. | OS-DCF:diskConfig                   | MANUAL                                                            |  
  23. | metadata                            | {}                                                                |  
  24. | accessIPv4                          |                                                                   |  
  25. | accessIPv6                          |                                                                   |  
  26. | testnet01 network                   | 10.1.1.20, 192.150.73.3                                           |  
  27. | progress                            | 0                                                                 |  
  28. | OS-EXT-STS:power_state              | 1                                                                 |  
  29. | OS-EXT-AZ:availability_zone         | nova                                                              |  
  30. | config_drive                        |                                                                   |  
  31. +-------------------------------------+-------------------------------------------------------------------+  
迁移:

  1. root@controller231:/etc/init.d# nova migrate rebuild-test2  
迁移后:

  1. root@controller231:/etc/init.d# nova show rebuild-test2  
  2. +-------------------------------------+-------------------------------------------------------------------+  
  3. | Property                            | Value                                                             |  
  4. +-------------------------------------+-------------------------------------------------------------------+  
  5. | status                              | VERIFY_RESIZE                                                     |  
  6. | updated                             | 2013-06-25T03:34:43Z                                              |  
  7. | OS-EXT-STS:task_state               | None                                                              |  
  8. | OS-EXT-SRV-ATTR:host                | compute233                                                        |  
  9. | key_name                            | mykey                                                             |  
  10. | image                               | Ubuntu 12.04 cloudimg i386 (1f7f5763-33a1-4282-92b3-53366bf7c695) |  
  11. | hostId                              | cb0c6e82948e76d2bc0c0a6bb906cdd2d2bcc6e99f0741e2ae05b7cc          |  
  12. | OS-EXT-STS:vm_state                 | resized                                                           |  
  13. | OS-EXT-SRV-ATTR:instance_name       | instance-0000000e                                                 |  
  14. | OS-EXT-SRV-ATTR:hypervisor_hostname | compute233.openstack.org                                          |  
  15. | flavor                              | m1.small (2)                                                      |  
  16. | id                                  | 03774415-d9ce-4b34-b012-6891d248b767                              |  
  17. | security_groups                     | [{u'name': u'default'}]                                           |  
  18. | user_id                             | f882feb345064e7d9392440a0f397c25                                  |  
  19. | name                                | rebuild-test2                                                     |  
  20. | created                             | 2013-06-24T08:14:38Z                                              |  
  21. | tenant_id                           | 6fbe9263116a4b68818cf1edce16bc4f                                  |  
  22. | OS-DCF:diskConfig                   | MANUAL                                                            |  
  23. | metadata                            | {}                                                                |  
  24. | accessIPv4                          |                                                                   |  
  25. | accessIPv6                          |                                                                   |  
  26. | testnet01 network                   | 10.1.1.20, 192.150.73.3                                           |  
  27. | progress                            | 0                                                                 |  
  28. | OS-EXT-STS:power_state              | 1                                                                 |  
  29. | OS-EXT-AZ:availability_zone         | nova                                                              |  
  30. | config_drive                        |                                                                   |  
  31. +-------------------------------------+-------------------------------------------------------------------+  
迁移之后,会在数据库中新增migration表记录,同时会增加instance_system_metadata表记录,记录老的flavor和新的flavor,如果是resize,也会更新instances表中虚拟机的flavor信息。

对于resize,还有两个相关操作:confirm_resize和revert_resize,两个操作都是在虚拟机状态为resized下的操作。前者是resize的确认,后者是回退。也就是说,在做完migrate/resize操作后,给用户提供了后悔的机会,比如用户可能对新规格的虚拟机性能不满意,不愿意花冤枉钱,于是可以调用revert_resize,是虚拟机回退到之前的状态(包括虚拟机所在的主机和虚拟机的规格)。还需要注意,会有这样的情况,用户做完了resize/migrate,然后没有确认也没有回退(因为可能resize操作并不收费,所以用户想着能体验多长时间就用多长时间)。此时,OpenStack提供了循环任务的机制处理这种情况,当系统中配置项 resize_confirm_window 大于0时,计算节点会自动将在本机中状态为resized,时间超过resize_confirm_window的虚拟机进行确认。

在做migrate/resize前还应注意,计算节点间是需要配置nova用户无密码访问的;同时,migrate/resize操作支持共享存储。


2、os-migrateLive

migrate操作会先将虚拟机停掉,也就是所谓的“冷迁移”,而os-migrateLive是“热迁移”,虚拟机不会停机。
live-migration是在虚拟机active状态下的操作,且不允许热迁移到本机。

live-migration允许用户指定block_migration参数,表示是否进行块迁移。有几种情况:
1、block_migration=True,但系统使用了共享存储,抛异常;
2、block_migration=False,但系统没有使用共享存储且虚拟机没有使用后端系统卷,抛异常;

注意事项:
1、需要配置计算节点的/etc/hosts文件,使相互之间能够用主机名访问。
2、如果在virt driver层失败,虚拟机状态会重置为active,所以当调用live-migration后,但查询虚拟机发现没有发生迁移,且状态仍是active,则很有可能是在计算节点出现异常。


迁移流程手绘图:

【OpenStack】Nova中的migrate/resize/live-migration_第1张图片

我的环境中,ssh登录虚拟机,在虚拟机内不停的发送ping请求,在线迁移过程中,会有10s左右的停顿现象,然后恢复正常,与虚拟机的ssh连接没有中断。迁移虚拟机:

【OpenStack】Nova中的migrate/resize/live-migration_第2张图片

你可能感兴趣的:(【OpenStack】Nova中的migrate/resize/live-migration)