페이스북에 질문 하면 답변 안해준다고 하니 메일링으로 쏩니다 ^^ NFS 볼륨으로 구축한 Openstack Juno 버전에서 Live Migration 을 실행해보니 Shared 볼륨이 아니라서 마이그레이션을 할 수 없다는 에러가 발생 하여 관련 소스를 좀 열어 봤습니다. 혹시나 해서 Grizzly, Icehouse, Juno 를 모두 비교 해보고 있는데 Juno 는 소스가 많이 바뀌었네요 /usr/lib/python2.7/dist-packages/nova/virt/libvirt/driver.py" # Grizzly 2885 # Checking shared storage connectivity 2886 # if block migration, instances_paths should not be on shared storage. 2887 source = CONF.host 2888 filename = dest_check_data["filename"] 2889 block_migration = dest_check_data["block_migration"] 2890 is_volume_backed = dest_check_data.get('is_volume_backed', False) 2891 2892 shared = self._check_shared_storage_test_file(filename) 2893 2894 if block_migration: 2895 if shared: 2896 reason = _("Block migration can not be used " 2897 "with shared storage.") 2898 raise exception.InvalidLocalStorage(reason=reason, path=source) 2899 self._assert_dest_node_has_enough_disk(ctxt, instance_ref, 2900 dest_check_data['disk_available_mb'], 2901 dest_check_data['disk_over_commit']) 2902 2903 elif not shared and not is_volume_backed: 2904 reason = _("Live migration can not be used " 2905 "without shared storage.") 2906 raise exception.InvalidSharedStorage(reason=reason, path=source) 2907 dest_check_data.update({"is_shared_storage": shared}) 2908 return dest_check_data 2909 # Icehouse 4279 # Checking shared storage connectivity 4280 # if block migration, instances_paths should not be on shared storage. 4281 source = CONF.host 4282 filename = dest_check_data["filename"] 4283 block_migration = dest_check_data["block_migration"] 4284 is_volume_backed = dest_check_data.get('is_volume_backed', False) 4285 has_local_disks = bool( 4286 jsonutils.loads(self.get_instance_disk_info(instance['name']))) 4287 4288 shared = self._check_shared_storage_test_file(filename) 4289 4290 if block_migration: 4291 if shared: 4292 reason = _("Block migration can not be used " 4293 "with shared storage.") 4294 raise exception.InvalidLocalStorage(reason=reason, path=source) 4295 self._assert_dest_node_has_enough_disk(context, instance, 4296 dest_check_data['disk_available_mb'], 4297 dest_check_data['disk_over_commit']) 4298 4299 elif not shared and (not is_volume_backed or has_local_disks): 4300 reason = _("Live migration can not be used " 4301 "without shared storage.") 4302 raise exception.InvalidSharedStorage(reason=reason, path=source) 4303 dest_check_data.update({"is_shared_storage": shared}) # Juno 5031 # Checking shared storage connectivity 5032 # if block migration, instances_paths should not be on shared storage. 5033 source = CONF.host 5034 5035 dest_check_data.update({'is_shared_instance_path': 5036 self._check_shared_storage_test_file( 5037 dest_check_data['filename'])}) 5038 5039 dest_check_data.update({'is_shared_block_storage': 5040 self._is_shared_block_storage(instance, dest_check_data)}) 5041 5042 if dest_check_data['block_migration']: 5043 if (dest_check_data['is_shared_block_storage'] or 5044 dest_check_data['is_shared_instance_path']): 5045 reason = _("Block migration can not be used " 5046 "with shared storage.") 5047 raise exception.InvalidLocalStorage(reason=reason, path=source) 5048 self._assert_dest_node_has_enough_disk(context, instance, 5049 dest_check_data['disk_available_mb'], 5050 dest_check_data['disk_over_commit']) 5051 5052 elif not (dest_check_data['is_shared_block_storage'] or 5053 dest_check_data['is_shared_instance_path']): 5054 reason = _("Live migration can not be used " 5055 "without shared storage.") 5056 raise exception.InvalidSharedStorage(reason=reason, path=source) 현재 Juno 버전에서 Exception 이 발생하는곳이 마지막 줄에서 걸린 것으로 확인 됩니다. 혹시 dest_check_data['is_shared_block_storage'] 의 값을 어디서 가져와서 if 구문을 처리하는지 아시는분 계시나요 ? [1등] [http://massmail.group.kt.com/NameCardImage/MailNameCard/NameCardTemplate/con...] 김정석 [http://massmail.group.kt.com/NameCardImage/MailNameCard/NameCardTemplate/con...] 과장Cloud운영기술팀 Cloud담당 기술서비스본부 [http://massmail.group.kt.com/NameCardImage/MailNameCard/NameCardTemplate/con...] [http://massmail.group.kt.com/NameCardImage/MailNameCard/NameCardTemplate/con...] 010-2864-2631 / ironman.kim@kt.com<mailto:ironman.kim@kt.com> 이 메일은 지정된 수취인만을 위해 작성되었으며, 중요한 정보나 저작권을 포함하고 있을 수 있습니다. 어떠한 권한 없이, 본 문서에 포함된 정보의 전부 또는 일부를 무단으로 제3자에게 공개, 배포, 복사 또는 사용하는 것을 엄격히 금지합니다. 만약, 본 메일이 잘못 전송된 경우, 발신인 또는 당사에 알려주시고, 본 메일을 즉시 삭제하여 주시기 바랍니다. This E-mail may contain confidential information and/or copyright material. This email is intended for the use of the addressee only. If you receive this email by mistake, please either delete it without reproducing, distributing or retaining copies thereof or notify the sender immediately.
안녕하세요. 5040 라인에 답이 있네요.. self._is_shared_block_storage(instance, dest_check_data)}) 위 메소드를 들어가보면 백엔드를 쓰는데 conf 의 [ libvirt ] 에서 images_type 이 rbd 가 아니면 is_shared_block_storage 값이 모두 false 네요. Qcow2, Lvm, Ploop 타입은 false, Rbd 만 True 결국 Ceph 의 rbd 타입이 아니면 is_shared_block_storage 값은 false 입니다. block migration 옵션 안주고 하실려면 소스 수정하세요.. -----Original Message----- From: "김정석(Cloud운영기술팀)"<ironman.kim@kt.com> To: "openstack-ko@lists.openstack.org"<openstack-ko@lists.openstack.org>; Cc: "송덕한(Cloud운영기술팀)"<ascacults@kt.com>; "안선희(차세대Cloud개발팀)"<sunhee.ahn@kt.com>; "최성삼(Cloud운영기술팀)"<choi.sungsam@kt.com>; Sent: 2015-03-06 (금) 16:08:03 Subject: [openstack-ko] live migration 관련 질문 페이스북에 질문 하면 답변 안해준다고 하니 메일링으로 쏩니다 ^^ NFS 볼륨으로 구축한 Openstack Juno 버전에서 Live Migration 을 실행해보니 Shared 볼륨이 아니라서 마이그레이션을 할 수 없다는 에러가 발생 하여 관련 소스를 좀 열어 봤습니다. 혹시나 해서 Grizzly, Icehouse, Juno 를 모두 비교 해보고 있는데 Juno 는 소스가 많이 바뀌었네요 /usr/lib/python2.7/dist-packages/nova/virt/libvirt/driver.py" # Grizzly 2885 # Checking shared storage connectivity 2886 # if block migration, instances_paths should not be on shared storage. 2887 source = CONF.host 2888 filename = dest_check_data["filename"] 2889 block_migration = dest_check_data["block_migration"] 2890 is_volume_backed = dest_check_data.get('is_volume_backed', False) 2891 2892 shared = self._check_shared_storage_test_file(filename) 2893 2894 if block_migration: 2895 if shared: 2896 reason = _("Block migration can not be used " 2897 "with shared storage.") 2898 raise exception.InvalidLocalStorage(reason=reason, path=source) 2899 self._assert_dest_node_has_enough_disk(ctxt, instance_ref, 2900 dest_check_data['disk_available_mb'], 2901 dest_check_data['disk_over_commit']) 2902 2903 elif not shared and not is_volume_backed: 2904 reason = _("Live migration can not be used " 2905 "without shared storage.") 2906 raise exception.InvalidSharedStorage(reason=reason, path=source) 2907 dest_check_data.update({"is_shared_storage": shared}) 2908 return dest_check_data 2909 # Icehouse 4279 # Checking shared storage connectivity 4280 # if block migration, instances_paths should not be on shared storage. 4281 source = CONF.host 4282 filename = dest_check_data["filename"] 4283 block_migration = dest_check_data["block_migration"] 4284 is_volume_backed = dest_check_data.get('is_volume_backed', False) 4285 has_local_disks = bool( 4286 jsonutils.loads(self.get_instance_disk_info(instance['name']))) 4287 4288 shared = self._check_shared_storage_test_file(filename) 4289 4290 if block_migration: 4291 if shared: 4292 reason = _("Block migration can not be used " 4293 "with shared storage.") 4294 raise exception.InvalidLocalStorage(reason=reason, path=source) 4295 self._assert_dest_node_has_enough_disk(context, instance, 4296 dest_check_data['disk_available_mb'], 4297 dest_check_data['disk_over_commit']) 4298 4299 elif not shared and (not is_volume_backed or has_local_disks): 4300 reason = _("Live migration can not be used " 4301 "without shared storage.") 4302 raise exception.InvalidSharedStorage(reason=reason, path=source) 4303 dest_check_data.update({"is_shared_storage": shared}) # Juno 5031 # Checking shared storage connectivity 5032 # if block migration, instances_paths should not be on shared storage. 5033 source = CONF.host 5034 5035 dest_check_data.update({'is_shared_instance_path': 5036 self._check_shared_storage_test_file( 5037 dest_check_data['filename'])}) 5038 5039 dest_check_data.update({'is_shared_block_storage': 5040 self._is_shared_block_storage(instance, dest_check_data)}) 5041 5042 if dest_check_data['block_migration']: 5043 if (dest_check_data['is_shared_block_storage'] or 5044 dest_check_data['is_shared_instance_path']): 5045 reason = _("Block migration can not be used " 5046 "with shared storage.") 5047 raise exception.InvalidLocalStorage(reason=reason, path=source) 5048 self._assert_dest_node_has_enough_disk(context, instance, 5049 dest_check_data['disk_available_mb'], 5050 dest_check_data['disk_over_commit']) 5051 5052 elif not (dest_check_data['is_shared_block_storage'] or 5053 dest_check_data['is_shared_instance_path']): 5054 reason = _("Live migration can not be used " 5055 "without shared storage.") 5056 raise exception.InvalidSharedStorage(reason=reason, path=source) 현재 Juno 버전에서 Exception 이 발생하는곳이 마지막 줄에서 걸린 것으로 확인 됩니다. 혹시 dest_check_data['is_shared_block_storage'] 의 값을 어디서 가져와서 if 구문을 처리하는지 아시는분 계시나요 ? 김정석 과장Cloud운영기술팀 Cloud담당 기술서비스본부 010-2864-2631 / ironman.kim@kt.com 이 메일은 지정된 수취인만을 위해 작성되었으며, 중요한 정보나 저작권을 포함하고 있을 수 있습니다. 어떠한 권한 없이, 본 문서에 포함된 정보의 전부 또는 일부를 무단으로 제3자에게 공개, 배포, 복사 또는 사용하는 것을 엄격히 금지합니다. 만약, 본 메일이 잘못 전송된 경우, 발신인 또는 당사에 알려주시고, 본 메일을 즉시 삭제하여 주시기 바랍니다. This E-mail may contain confidential information and/or copyright material. This email is intended for the use of the addressee only. If you receive this email by mistake, please either delete it without reproducing, distributing or retaining copies thereof or notify the sender immediately.
안녕하세요. 5040 라인에 답이 있네요.. self._is_shared_block_storage(instance, dest_check_data)}) 위 메소드를 들어가보면 백엔드를 쓰는데 conf 의 [ libvirt ] 에서 images_type 이 rbd 가 아니면 is_shared_block_storage 값이 모두 false 네요. Qcow2, Lvm, Ploop 타입은 false, Rbd 만 True 결국 Ceph 의 rbd 타입이 아니면 is_shared_block_storage 값은 false 입니다. block migration 옵션 안주고 하실려면 소스 수정하세요.. -----Original Message----- From: "김정석(Cloud운영기술팀)"<ironman.kim@kt.com> To: "openstack-ko@lists.openstack.org"<openstack-ko@lists.openstack.org>; Cc: "송덕한(Cloud운영기술팀)"<ascacults@kt.com>; "안선희(차세대Cloud개발팀)"<sunhee.ahn@kt.com>; "최성삼(Cloud운영기술팀)"<choi.sungsam@kt.com>; Sent: 2015-03-06 (금) 16:08:03 Subject: [openstack-ko] live migration 관련 질문 페이스북에 질문 하면 답변 안해준다고 하니 메일링으로 쏩니다 ^^ NFS 볼륨으로 구축한 Openstack Juno버전에서 Live Migration 을 실행해보니 Shared볼륨이 아니라서 마이그레이션을 할 수 없다는 에러가 발생 하여 관련 소스를 좀 열어 봤습니다. 혹시나 해서 Grizzly, Icehouse, Juno 를 모두 비교 해보고 있는데 Juno는 소스가 많이 바뀌었네요 /usr/lib/python2.7/dist-packages/nova/virt/libvirt/driver.py" # Grizzly 2885 # Checking shared storage connectivity 2886 # if block migration, instances_paths should not be on shared storage. 2887 source = CONF.host 2888 filename = dest_check_data["filename"] 2889 block_migration = dest_check_data["block_migration"] 2890 is_volume_backed = dest_check_data.get('is_volume_backed', False) 2891 2892 shared = self._check_shared_storage_test_file(filename) 2893 2894 if block_migration: 2895 if shared: 2896 reason = _("Block migration can not be used " 2897 "with shared storage.") 2898 raise exception.InvalidLocalStorage(reason=reason, path=source) 2899 self._assert_dest_node_has_enough_disk(ctxt, instance_ref, 2900 dest_check_data['disk_available_mb'], 2901 dest_check_data['disk_over_commit']) 2902 2903 elif not shared and not is_volume_backed: 2904 reason = _("Live migration can not be used " 2905 "without shared storage.") 2906 raise exception.InvalidSharedStorage(reason=reason, path=source) 2907 dest_check_data.update({"is_shared_storage": shared}) 2908 return dest_check_data 2909 # Icehouse 4279 # Checking shared storage connectivity 4280 # if block migration, instances_paths should not be on shared storage. 4281 source = CONF.host 4282 filename = dest_check_data["filename"] 4283 block_migration = dest_check_data["block_migration"] 4284 is_volume_backed = dest_check_data.get('is_volume_backed', False) 4285 has_local_disks = bool( 4286 jsonutils.loads(self.get_instance_disk_info(instance['name']))) 4287 4288 shared = self._check_shared_storage_test_file(filename) 4289 4290 if block_migration: 4291 if shared: 4292 reason = _("Block migration can not be used " 4293 "with shared storage.") 4294 raise exception.InvalidLocalStorage(reason=reason, path=source) 4295 self._assert_dest_node_has_enough_disk(context, instance, 4296 dest_check_data['disk_available_mb'], 4297 dest_check_data['disk_over_commit']) 4298 4299 elif not shared and (not is_volume_backed or has_local_disks): 4300 reason = _("Live migration can not be used " 4301 "without shared storage.") 4302 raise exception.InvalidSharedStorage(reason=reason, path=source) 4303 dest_check_data.update({"is_shared_storage": shared}) # Juno 5031 # Checking shared storage connectivity 5032 # if block migration, instances_paths should not be on shared storage. 5033 source = CONF.host 5034 5035 dest_check_data.update({'is_shared_instance_path': 5036 self._check_shared_storage_test_file( 5037 dest_check_data['filename'])}) 5038 5039 dest_check_data.update({'is_shared_block_storage': 5040 self._is_shared_block_storage(instance, dest_check_data)}) 5041 5042 if dest_check_data['block_migration']: 5043 if (dest_check_data['is_shared_block_storage'] or 5044 dest_check_data['is_shared_instance_path']): 5045 reason = _("Block migration can not be used " 5046 "with shared storage.") 5047 raise exception.InvalidLocalStorage(reason=reason, path=source) 5048 self._assert_dest_node_has_enough_disk(context, instance, 5049 dest_check_data['disk_available_mb'], 5050 dest_check_data['disk_over_commit']) 5051 5052 elif not (dest_check_data['is_shared_block_storage'] or 5053 dest_check_data['is_shared_instance_path']): 5054 reason = _("Live migration can not be used " 5055 "without shared storage.") 5056 raise exception.InvalidSharedStorage(reason=reason, path=source) 현재 Juno 버전에서 Exception이 발생하는곳이 마지막 줄에서 걸린 것으로 확인 됩니다. 혹시 dest_check_data['is_shared_block_storage']의 값을 어디서 가져와서 if 구문을 처리하는지 아시는분 계시나요 ?
한가지 놓친 부분이 있네요.. 타입말고도 더 비교하는 부분이 있습니다. Qcow2 타입일 경우 instance path 가 공유되는 위치라면 아래의 값은 True 라서 is_shared_storage 는 True 가 됩니다. dest_check_data.get('is_shared_instance_path') or self.image_backend.backend().is_file_in_instance_path()): 이미지 형태에 따라 값이 달라지니 경우에 따라 소스를 따라가 보세요. 여기서 image_backend.backend() 는 nova/virt/libvirt/imagebackend.py 의 Backend 클래스에서 이미지의 값에 따라 정의됩니다. -----Original Message----- From: "안승규"<dappy@naver.com> To: <openstack-ko@lists.openstack.org>; Cc: Sent: 2015-03-08 (일) 22:49:32 Subject: Re: [openstack-ko] live migration 관련 질문 안녕하세요. 5040 라인에 답이 있네요.. self._is_shared_block_storage(instance, dest_check_data)}) 위 메소드를 들어가보면 백엔드를 쓰는데 conf 의 [ libvirt ] 에서 images_type 이 rbd 가 아니면 is_shared_block_storage 값이 모두 false 네요. Qcow2, Lvm, Ploop 타입은 false, Rbd 만 True 결국 Ceph 의 rbd 타입이 아니면 is_shared_block_storage 값은 false 입니다. block migration 옵션 안주고 하실려면 소스 수정하세요.. -----Original Message----- From: "김정석(Cloud운영기술팀)"<ironman.kim@kt.com> To: "openstack-ko@lists.openstack.org"<openstack-ko@lists.openstack.org>; Cc: "송덕한(Cloud운영기술팀)"<ascacults@kt.com>; "안선희(차세대Cloud개발팀)"<sunhee.ahn@kt.com>; "최성삼(Cloud운영기술팀)"<choi.sungsam@kt.com>; Sent: 2015-03-06 (금) 16:08:03 Subject: [openstack-ko] live migration 관련 질문 페이스북에 질문 하면 답변 안해준다고 하니 메일링으로 쏩니다 ^^ NFS 볼륨으로 구축한 Openstack Juno버전에서 Live Migration 을 실행해보니 Shared볼륨이 아니라서 마이그레이션을 할 수 없다는 에러가 발생 하여 관련 소스를 좀 열어 봤습니다. 혹시나 해서 Grizzly, Icehouse, Juno 를 모두 비교 해보고 있는데 Juno는 소스가 많이 바뀌었네요 /usr/lib/python2.7/dist-packages/nova/virt/libvirt/driver.py" # Grizzly 2885 # Checking shared storage connectivity 2886 # if block migration, instances_paths should not be on shared storage. 2887 source = CONF.host 2888 filename = dest_check_data["filename"] 2889 block_migration = dest_check_data["block_migration"] 2890 is_volume_backed = dest_check_data.get('is_volume_backed', False) 2891 2892 shared = self._check_shared_storage_test_file(filename) 2893 2894 if block_migration: 2895 if shared: 2896 reason = _("Block migration can not be used " 2897 "with shared storage.") 2898 raise exception.InvalidLocalStorage(reason=reason, path=source) 2899 self._assert_dest_node_has_enough_disk(ctxt, instance_ref, 2900 dest_check_data['disk_available_mb'], 2901 dest_check_data['disk_over_commit']) 2902 2903 elif not shared and not is_volume_backed: 2904 reason = _("Live migration can not be used " 2905 "without shared storage.") 2906 raise exception.InvalidSharedStorage(reason=reason, path=source) 2907 dest_check_data.update({"is_shared_storage": shared}) 2908 return dest_check_data 2909 # Icehouse 4279 # Checking shared storage connectivity 4280 # if block migration, instances_paths should not be on shared storage. 4281 source = CONF.host 4282 filename = dest_check_data["filename"] 4283 block_migration = dest_check_data["block_migration"] 4284 is_volume_backed = dest_check_data.get('is_volume_backed', False) 4285 has_local_disks = bool( 4286 jsonutils.loads(self.get_instance_disk_info(instance['name']))) 4287 4288 shared = self._check_shared_storage_test_file(filename) 4289 4290 if block_migration: 4291 if shared: 4292 reason = _("Block migration can not be used " 4293 "with shared storage.") 4294 raise exception.InvalidLocalStorage(reason=reason, path=source) 4295 self._assert_dest_node_has_enough_disk(context, instance, 4296 dest_check_data['disk_available_mb'], 4297 dest_check_data['disk_over_commit']) 4298 4299 elif not shared and (not is_volume_backed or has_local_disks): 4300 reason = _("Live migration can not be used " 4301 "without shared storage.") 4302 raise exception.InvalidSharedStorage(reason=reason, path=source) 4303 dest_check_data.update({"is_shared_storage": shared}) # Juno 5031 # Checking shared storage connectivity 5032 # if block migration, instances_paths should not be on shared storage. 5033 source = CONF.host 5034 5035 dest_check_data.update({'is_shared_instance_path': 5036 self._check_shared_storage_test_file( 5037 dest_check_data['filename'])}) 5038 5039 dest_check_data.update({'is_shared_block_storage': 5040 self._is_shared_block_storage(instance, dest_check_data)}) 5041 5042 if dest_check_data['block_migration']: 5043 if (dest_check_data['is_shared_block_storage'] or 5044 dest_check_data['is_shared_instance_path']): 5045 reason = _("Block migration can not be used " 5046 "with shared storage.") 5047 raise exception.InvalidLocalStorage(reason=reason, path=source) 5048 self._assert_dest_node_has_enough_disk(context, instance, 5049 dest_check_data['disk_available_mb'], 5050 dest_check_data['disk_over_commit']) 5051 5052 elif not (dest_check_data['is_shared_block_storage'] or 5053 dest_check_data['is_shared_instance_path']): 5054 reason = _("Live migration can not be used " 5055 "without shared storage.") 5056 raise exception.InvalidSharedStorage(reason=reason, path=source) 현재 Juno 버전에서 Exception이 발생하는곳이 마지막 줄에서 걸린 것으로 확인 됩니다. 혹시 dest_check_data['is_shared_block_storage']의 값을 어디서 가져와서 if 구문을 처리하는지 아시는분 계시나요 ? _______________________________________________ openstack-ko mailing list openstack-ko@lists.openstack.org http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-ko
participants (2)
-
김정석(Cloud운영기술팀)
-
안승규