[openstack-ko] live migration 관련 질문

안승규 dappy at naver.com
Sun Mar 8 14:13:06 UTC 2015


 한가지 놓친 부분이 있네요..

 타입말고도 더 비교하는 부분이 있습니다.

 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 at naver.com> 
To: <openstack-ko at 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 at kt.com> 
To: "openstack-ko at lists.openstack.org"<openstack-ko at lists.openstack.org>; 
Cc: "송덕한(Cloud운영기술팀)"<ascacults at kt.com>; "안선희(차세대Cloud개발팀)"<sunhee.ahn at kt.com>; "최성삼(Cloud운영기술팀)"<choi.sungsam at 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 at lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-ko


More information about the openstack-ko mailing list