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

本文介绍了虚拟机在不同状态下的迁移及调整规格方法,包括冷迁移、热迁移、确认及回退调整等操作,并详细解释了操作过程中的注意事项。

声明:

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

新浪微博:@孔令贤HW

博客地址:http://blog.youkuaiyun.com/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,则很有可能是在计算节点出现异常。


迁移流程手绘图:



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


#修改成自己的ip openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 192.168.80.144 openstack-config --set /etc/nova/nova.conf DEFAULT use_neutron true openstack-config --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver openstack-config --set /etc/nova/nova.conf DEFAULT enabled_apis osapi_compute,metadata openstack-config --set /etc/nova/nova.conf DEFAULT transport_url rabbit://openstack:123456@manager.node openstack-config --set /etc/nova/nova.conf api auth_strategy keystone openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_url http://manager.node:5000/v3 openstack-config --set /etc/nova/nova.conf keystone_authtoken memcached_servers manager.node:11211 openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_type password openstack-config --set /etc/nova/nova.conf keystone_authtoken project_domain_name default openstack-config --set /etc/nova/nova.conf keystone_authtoken user_domain_name default openstack-config --set /etc/nova/nova.conf keystone_authtoken project_name service openstack-config --set /etc/nova/nova.conf keystone_authtoken username nova openstack-config --set /etc/nova/nova.conf keystone_authtoken password nv123456 openstack-config --set /etc/nova/nova.conf vnc enabled true openstack-config --set /etc/nova/nova.conf vnc server_listen 0.0.0.0 openstack-config --set /etc/nova/nova.conf vnc server_proxyclient_address '$my_ip' openstack-config --set /etc/nova/nova.conf vnc novncproxy_base_url http://manager.node:6080/vnc_auto.html openstack-config --set /etc/nova/nova.conf glance api_servers http://manager.node:9292 openstack-config --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp openstack-config --set /etc/nova/nova.conf placement region_name RegionOne openstack-config --set /etc/nova/nova.conf placement project_domain_name Default openstack-config --set /etc/nova/nova.conf placement project_name service openstack-config --set /etc/nova/nova.conf placement auth_type password openstack-config --set /etc/nova/nova.conf placement user_domain_name Default openstack-config --set /etc/nova/nova.conf placement auth_url http://manager.node:5000/v3 openstack-config --set /etc/nova/nova.conf placement username placement openstack-config --set /etc/nova/nova.conf placement password pm123456控制节点是manager.node,计算节点是master.node
最新发布
06-21
### 配置 OpenStack Nova 服务的相关参数 在 OpenStack 中,`openstack-config` 命令可以用来设置配置文件中的参数。以下是针对 `Nova` 服务的各个参数配置方法: #### 配置 `my_ip` 通过以下命令设置 Nova 的 IP 地址: ```bash openstack-config --set /etc/nova/nova.conf DEFAULT my_ip <your-ip-address> ``` 这将指定 Nova 使用的 IP 地址[^1]。 #### 集成 Neutron 启用 Neutron 并设置防火墙驱动程序: ```bash openstack-config --set /etc/nova/nova.conf DEFAULT use_neutron True openstack-config --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver ``` 上述命令启用了 Neutron,并禁用了防火墙功能[^3]。 #### 设置认证策略 启用的 API 和认证策略可以通过以下命令进行配置: ```bash openstack-config --set /etc/nova/nova.conf api enabled_apis osapi_compute,metadata openstack-config --set /etc/nova/nova.conf api auth_strategy keystone ``` 这确保了仅允许经过 Keystone 认证的用户访问 Nova API[^4]。 #### 消息队列配置 设置消息队列的传输 URL: ```bash openstack-config --set /etc/nova/nova.conf DEFAULT transport_url rabbit://<user>:<password>@<rabbitmq-host>:5672/ ``` 此命令定义了 RabbitMQ 的连接信息[^3]。 #### Keystone 认证令牌 配置 Keystone 认证令牌相关参数: ```bash openstack-config --set /etc/nova/nova.conf keystone_authtoken www_authenticate_uri http://<controller-ip>:5000/v3 openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_url http://<controller-ip>:5000/v3 openstack-config --set /etc/nova/nova.conf keystone_authtoken memcached_servers <controller-ip>:11211 openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_type password openstack-config --set /etc/nova/nova.conf keystone_authtoken project_domain_name Default openstack-config --set /etc/nova/nova.conf keystone_authtoken user_domain_name Default openstack-config --set /etc/nova/nova.conf keystone_authtoken project_name service openstack-config --set /etc/nova/nova.conf keystone_authtoken username nova openstack-config --set /etc/nova/nova.conf keystone_authtoken password <nova-password> ``` 这些参数确保了 Nova 能够正确地与 Keystone 进行身份验证[^4]。 #### VNC 设置 配置 VNC 相关参数以支持远程控制台访问: ```bash openstack-config --set /etc/nova/nova.conf vnc enabled True openstack-config --set /etc/nova/nova.conf vnc vncserver_listen 0.0.0.0 openstack-config --set /etc/nova/nova.conf vnc vncserver_proxyclient_address <compute-node-ip> openstack-config --set /etc/nova/nova.conf vnc novncproxy_base_url http://<controller-ip>:6080/vnc_auto.html ``` 这为计算节点上的虚拟机实例启用了 VNC 控制台访问[^1]。 #### Glance API 配置 设置 Glance API 的地址: ```bash openstack-config --set /etc/nova/nova.conf glance api_servers http://<controller-ip>:9292 ``` 此命令指定了 Glance API 的地址,以便 Nova 可以获取镜像信息。 #### 并发控制 配置并发控制参数以限制线程和进程数量: ```bash openstack-config --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp ``` 这设置了锁路径以避免多线程冲突[^2]。 #### Placement 服务配置 确保 Placement 服务被正确配置: ```bash openstack-config --set /etc/nova/nova.conf placement region_name RegionOne openstack-config --set /etc/nova/nova.conf placement project_domain_name Default openstack-config --set /etc/nova/nova.conf placement project_name service openstack-config --set /etc/nova/nova.conf placement auth_type password openstack-config --set /etc/nova/nova.conf placement auth_url http://<controller-ip>:5000/v3 openstack-config --set /etc/nova/nova.conf placement username placement openstack-config --set /etc/nova/nova.conf placement password <placement-password> ``` 这些参数确保了 Nova 能够与 Placement 服务交互以管理资源分配。 ### 示例代码 以下是一个完整的脚本示例,用于批量配置上述参数: ```bash #!/bin/bash # 定义变量 MY_IP="<your-ip-address>" RABBITMQ_USER="<user>" RABBITMQ_PASSWORD="<password>" RABBITMQ_HOST="<rabbitmq-host>" CONTROLLER_IP="<controller-ip>" NOVA_PASSWORD="<nova-password>" PLACEMENT_PASSWORD="<placement-password>" # 配置 my_ip openstack-config --set /etc/nova/nova.conf DEFAULT my_ip $MY_IP # 配置 Neutron openstack-config --set /etc/nova/nova.conf DEFAULT use_neutron True openstack-config --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver # 配置认证策略 openstack-config --set /etc/nova/nova.conf api enabled_apis osapi_compute,metadata openstack-config --set /etc/nova/nova.conf api auth_strategy keystone # 配置消息队列 openstack-config --set /etc/nova/nova.conf DEFAULT transport_url rabbit://$RABBITMQ_USER:$RABBITMQ_PASSWORD@$RABBITMQ_HOST:5672/ # 配置 Keystone 认证令牌 openstack-config --set /etc/nova/nova.conf keystone_authtoken www_authenticate_uri http://$CONTROLLER_IP:5000/v3 openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_url http://$CONTROLLER_IP:5000/v3 openstack-config --set /etc/nova/nova.conf keystone_authtoken memcached_servers $CONTROLLER_IP:11211 openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_type password openstack-config --set /etc/nova/nova.conf keystone_authtoken project_domain_name Default openstack-config --set /etc/nova/nova.conf keystone_authtoken user_domain_name Default openstack-config --set /etc/nova/nova.conf keystone_authtoken project_name service openstack-config --set /etc/nova/nova.conf keystone_authtoken username nova openstack-config --set /etc/nova/nova.conf keystone_authtoken password $NOVA_PASSWORD # 配置 VNC openstack-config --set /etc/nova/nova.conf vnc enabled True openstack-config --set /etc/nova/nova.conf vnc vncserver_listen 0.0.0.0 openstack-config --set /etc/nova/nova.conf vnc vncserver_proxyclient_address $MY_IP openstack-config --set /etc/nova/nova.conf vnc novncproxy_base_url http://$CONTROLLER_IP:6080/vnc_auto.html # 配置 Glance API openstack-config --set /etc/nova/nova.conf glance api_servers http://$CONTROLLER_IP:9292 # 配置并发控制 openstack-config --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp # 配置 Placement openstack-config --set /etc/nova/nova.conf placement region_name RegionOne openstack-config --set /etc/nova/nova.conf placement project_domain_name Default openstack-config --set /etc/nova/nova.conf placement project_name service openstack-config --set /etc/nova/nova.conf placement auth_type password openstack-config --set /etc/nova/nova.conf placement auth_url http://$CONTROLLER_IP:5000/v3 openstack-config --set /etc/nova/nova.conf placement username placement openstack-config --set /etc/nova/nova.conf placement password $PLACEMENT_PASSWORD ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值