Parallel VM creation/destruction issue

Eneko Lacunza elacunza at binovo.es
Wed Jul 7 15:44:14 CEST 2021


El 5/7/21 a las 12:36, Eneko Lacunza escribió:
> Hi all,
>
> We have split the BIG 88 node cluster in 6 clusters of 15 nodes each 
> (there where some spare servers); now things seem much better :)
>
> Sadly, we are seeing some issues when VDI management system (USD 
> Enterprise) is performing mass (in the order of 100s or even 1000s) 
> destruction and creation of VMs. In a fraction of the clone 
> operations, clone will fail with the following message:
>
> "Error: clone failed. Failed to change directory to 
> '/mnt/pve/vdi-prod1/images/103': No such file or directory at 
> /usr/share/perl5/PVE/Storage/Plugin.pm line 708."
>
> This happens when destroy for that VMID was some seconds before 
> (5s-14s for example). When another clone tries to use that VMID later 
> (as soon as 54s after destruction), it works ok.
>
> PVE version is 6.4 ISO (details below), and storage is NFS 4.2 with 
> pNFS with two pairs of NetApp servers in HA.
>
> Seems like a "race condition" is happening, where the node that is 
> cloning sees the storage directory removed by destruction late (?).
>
> I have checked "qemu-server.git/PVE/QemuServer.pm:sub destroy_vm" and 
> I see first storage disk are freed and after that VM config is 
> removed, which seems quite correct. Could it be the NFS servers that 
> are a bit "late" propagating directory removal to the client nodes?

We seem to have isolated this to the default NFS mount option 
"lookupcach/e"/, it defaults to "all". Changing to "none" seems to fix 
the issue, so it's node's local NFS cache.

UDS Enterprise has released a fix so that VMIDs don't get reused so 
early (they now secuentially use all VMID space until restarting with 
low VMIDs), that fixes the issue without disabling NFS lookupcache.

This may impact other uses of NFS storage, so I suggest a bit more 
checking should be done:

https://git.proxmox.com/?p=pve-storage.git;a=blob;f=PVE/Storage/Plugin.pm;h=26c74304aef46da195a5db1a1d266ccec7c3fb8c;hb=refs/heads/stable-6
  676 sub clone_image {
  677     my ($class, $scfg, $storeid, $volname, $vmid, $snap) = @_;
  678
  679     # this only works for file based storage types
  680     die "storage definintion has no path\n" if !$scfg->{path};
  681
  682     my ($vtype, $basename, $basevmid, undef, undef, $isBase, 
$format) =
  683         $class->parse_volname($volname);
  684
  685     die "clone_image on wrong vtype '$vtype'\n" if $vtype ne 'images';
  686
  687     die "this storage type does not support clone_image on 
snapshot\n" if $snap;
  688
  689     die "this storage type does not support clone_image on 
subvolumes\n" if $format eq 'subvol';
  690
  691     die "clone_image only works on base images\n" if !$isBase;
  692
  693     my $imagedir = $class->get_subdir($scfg, 'images');
  694     $imagedir .= "/$vmid";
  695
*696     mkpath $imagedir;*
  697
  698     my $name = $class->find_free_diskname($imagedir, $scfg, $vmid, 
"qcow2", 1);
  699
  700     warn "clone $volname: $vtype, $name, $vmid to $name 
(base=../$basevmid/$basename)\n";
  701
  702     my $newvol = "$basevmid/$basename/$vmid/$name";
  703
  704     my $path = $class->filesystem_path($scfg, $newvol);
  705
  706     # Note: we use relative paths, so we need to call chdir before 
qemu-img
  707     eval {
*708         local $CWD = $imagedir;*
  709
  710         my $cmd = ['/usr/bin/qemu-img', 'create', '-b', 
"../$basevmid/$basename",
  711                    '-f', 'qcow2', $path];
  712
  713         run_command($cmd);
  714     };
  715     my $err = $@;
  716
  717     die $err if $err;
  718
  719     return $newvol;
  720 }

I'm not a PERL coder but maybe doing "local $CWD = $imagedir" before 
mkpath, or some more explicit test before mkpath that will make it 
create the dir, instead of believing data in lookupcache.

Cheers,

Eneko Lacunza
Zuzendari teknikoa | Director técnico
Binovo IT Human Project

Tel. +34 943 569 206 | https://www.binovo.es
Astigarragako Bidea, 2 - 2º izda. Oficina 10-11, 20180 Oiartzun

https://www.youtube.com/user/CANALBINOVO
https://www.linkedin.com/company/37269706/



More information about the pve-user mailing list