Re: clustered lvm volume activation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Dear Guy,

thanks for your answer.

I came exactly to the same solution after i failed to get the build
environment running. My first try was to change the "lvchange" params in
the storage driver from "-aln" to "-asn" to get the volumes mounted in
shared mode. But this idea was not good anyway because it can lead to
data corruption if two domains mount the volume r/w.

Then i disabled the autostart of the storage pools and wrote a qemu
python hook to activate and deactivate the volumes on prepare and
release. It is a quick fix for now but if anyone is interested...find
the hook code below...

Regards,
Timm

-----------------------------

#!/usr/bin/python3
#
# Libvirt hook for qemu.
#
# This hook prepares and releases domain LVM volumes in shared LVM
volume group
#
import logging
from logging.handlers import SysLogHandler

import subprocess
import sys
import xml.etree.ElementTree as etree

# name of the shared volume group
# if this string is part of the
# domain disk source device path,
# the disk will be activated
shared_vg = 'vmgroup1'

LOG = logging.getLogger(__file__)
LOG.setLevel(logging.DEBUG)
handler = SysLogHandler(address = '/dev/log')
formatter = logging.Formatter('libvirt-hook: %(levelname)s: %(message)s')
handler.setFormatter(formatter)
LOG.addHandler(handler)

def find_disks(args):
    root = etree.fromstring(args)
    disk_nodes = root.findall(".//disk[@device='disk']")
    disks = []
    for disk_node in disk_nodes:
        if disk_node.attrib.get('type') == 'block':
            disk = disk_node.find('./source')
            # get device path
            lv_path = disk.attrib['dev']
            if shared_vg in lv_path:
                # append path without /dev/
                disks.append(lv_path[5:])
    return disks


def main():

    if len(sys.argv) < 3:
        LOG.debug("Nothing to do: too few arguments")
        sys.exit()

    domain = sys.argv[1]
    action = sys.argv[2]

    if action == 'prepare':
        LOG.debug("Preparing {}...".format(domain))

        xml = sys.stdin.read()
        for disk in find_disks(xml):
            LOG.debug("Trying to activate LV: {}...".format(disk))
            try:
                subprocess.check_call(['lvchange','-ay', disk])
            except subprocess.CalledProcessError as e:
                LOG.exception("Unable to activate LVM volume {} for
{}".format(lv_path, domain))
                LOG.error("Output: %s", e.output)
        LOG.debug("Successfully prepared {}...".format(domain))

    elif action == 'release':
        LOG.debug("Releasing {}...".format(domain))

        xml = sys.stdin.read()
        for disk in find_disks(xml):
            LOG.debug("Trying to deactivate LV: {}...".format(disk))
            try:
                subprocess.check_call(['lvchange','-an', disk])
            except subprocess.CalledProcessError as e:
                LOG.exception("Unable to deactivate LVM volume {} for
{}".format(lv_path, domain))
                LOG.error("Output: %s", e.output)
        LOG.debug("Successfully released {}...".format(domain))


if __name__ == '__main__':
    try:
        main()
    except Exception:
        LOG.exception("Unexpected exception occured")


------------------------------


Am 19.02.20 um 10:33 schrieb Guy Godfroy:
> Hello Timm,
> 
> I had exactly the same problem a few weeks ago. It pissed me off quite a
> bit, but I made myself a reason.
> 
> My workaround is not to define the volume pool anymore. The domains are
> able to use any volume anyway, even when not part of any pool.
> 
> I use custom hooks to activate and deactivate LVs.
> 
> Hope that helps,
> 
> Guy
> 
> Le 14/02/2020 à 11:28, Timm Wunderlich a écrit :
>> dear all,
>>
>> i have a problem with clustered lvm storage and the "logical" storage
>> driver, perhaps someone has a suggestion.
>>
>> i have a clustered lvm (lvmlockd, not clvm) with 4 hosts running.
>>
>> when i start the storage on a host it activates all volumes in the whole
>> volume group. then i cannot start the storage on other hosts because all
>> volumes are already activated on one host.
>>
>> if i then deactivate all volumes in the started pool i can start the
>> pool on other hosts. but then i have to manually activate the volume if
>> i want to start the domain.
>>
>> it would be great if the logical pool driver would only activate the
>> volume of a domain at domain start and not on pool start.
>>
>> does anybody have a workaround for this or any suggestions for me? do
>> you think i should open an issue on it?
>>
>> Regards,
>> Timm
>>
>>
> 
> 

-- 
__________________________________________

Timm Wunderlich

Systemadministrator



Universität Siegen, Fakultät III

Lehrstuhl für Wirtschaftsinformatik und Neue Medien

Kohlbett Str. 15, 57068 Siegen



Tel: +49 271-740 3382



timm.wunderlich@xxxxxxxxxxxxx

www.wineme.uni-siegen.de



-----BEGIN PGP PUBLIC KEY BLOCK-----
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
dJdX
=5U14
-----END PGP PUBLIC KEY BLOCK-----






[Index of Archives]     [Virt Tools]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [KDE Users]

  Powered by Linux