mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-22 17:35:59 +03:00
166 lines
5.2 KiB
Plaintext
166 lines
5.2 KiB
Plaintext
Tagging aims
|
|
============
|
|
1) Ability to attach an unordered list of tags to LVM metadata objects.
|
|
2) Ability to add or remove tags easily.
|
|
3) Ability to select LVM objects for processing according to presence/absence
|
|
of specific tags.
|
|
4) Ability to control through the config file which VGs/LVs are activated
|
|
on different machines using names or tags.
|
|
5) Ability to overlay settings from different config files e.g. override
|
|
some settings in a global config file locally.
|
|
|
|
Clarifications
|
|
==============
|
|
1) Tag character set: A-Za-z0-9_+.-
|
|
Can't start with hyphen & max length is 128 (NAME_LEN).
|
|
2) LVM object types that can be tagged:
|
|
VG, LV, LV segment
|
|
PV - tags are stored in VG metadata so disappear when PV becomes orphaned
|
|
Snapshots can't be tagged, but their origin may be.
|
|
3) A tag can be used in place of any command line LVM object reference that
|
|
accepts (a) a list of objects; or (b) a single object as long as the
|
|
tag expands to a single object. This is not supported everywhere yet.
|
|
Duplicate arguments in a list after argument expansion may get removed
|
|
retaining the first copy of each argument.
|
|
4) Wherever there may be ambiguity of argument type, a tag must be prefixed
|
|
by '@'; elsewhere an '@' prefix is optional.
|
|
5) LVM1 objects cannot be tagged, as the disk format doesn't support it.
|
|
6) Tags can be added or removed with --addtag or --deltag.
|
|
|
|
Config file Extensions
|
|
======================
|
|
To define host tags in config file:
|
|
|
|
tags {
|
|
# Set a tag with the hostname
|
|
hosttags = 1
|
|
|
|
tag1 { }
|
|
|
|
tag2 {
|
|
# If no exact match, tag is not set.
|
|
host_list = [ "hostname", "dbase" ]
|
|
}
|
|
}
|
|
|
|
Activation config file example
|
|
==============================
|
|
activation {
|
|
volume_list = [ "vg1/lvol0", "@database" ]
|
|
}
|
|
|
|
Matches against vgname, vgname/lvname or @tag set in *metadata*.
|
|
@* matches exactly against *any* tag set on the host.
|
|
The VG or LV only gets activated if a metadata tag matches.
|
|
The default if there is no match is not to activate.
|
|
If volume_list is not present and any tags are defined on the host
|
|
then it only activates if a host tag matches a metadata tag.
|
|
If volume_list is not present and no tags are defined on the host
|
|
then it does activate.
|
|
|
|
Multiple config files
|
|
=====================
|
|
(a) lvm.conf
|
|
(b) lvm_<host_tag>.conf
|
|
|
|
At startup, load lvm.conf.
|
|
Process tag settings.
|
|
If any host tags were defined, load lvm_tag.conf for each tag, if present.
|
|
|
|
When searching for a specific config file entry, search order is (b)
|
|
then (a), stopping at the first match.
|
|
Within (b) use reverse order tags got set, so file for last tag set is
|
|
searched first.
|
|
New tags set in (b) *do* trigger additional config file loads.
|
|
|
|
Usage Examples
|
|
==============
|
|
1) Simple activation control via metadata with static config files
|
|
|
|
lvm.conf: (Identical on every machine - global settings)
|
|
tags {
|
|
hosttags = 1
|
|
}
|
|
|
|
From any machine in the cluster, add db1 to the list of machines that
|
|
activate vg1/lvol2:
|
|
|
|
lvchange --addtag @db1 vg1/lvol2
|
|
(followed by lvchange -ay to actually activate it)
|
|
|
|
|
|
2) Multiple hosts.
|
|
|
|
Activate vg1 only on the database hosts, db1 and db2.
|
|
Activate vg2 only on the fileserver host fs1.
|
|
Activate nothing initially on the fileserver backup host fsb1, but be
|
|
prepared for it to take over from fs1.
|
|
|
|
Option (i) - centralised admin, static configuration replicated between hosts
|
|
# Add @database tag to vg1's metadata
|
|
vgchange --addtag @database vg1
|
|
|
|
# Add @fileserver tag to vg2's metadata
|
|
vgchange --addtag @fileserver vg2
|
|
|
|
lvm.conf: (Identical on every machine)
|
|
tags {
|
|
database {
|
|
host_list = [ "db1", "db2" ]
|
|
}
|
|
fileserver {
|
|
host_list = [ "fs1" ]
|
|
}
|
|
fileserverbackup {
|
|
host_list = [ "fsb1" ]
|
|
}
|
|
}
|
|
|
|
activation {
|
|
# Only activate if host has a tag that matches a metadata tag
|
|
volume_list = [ "@*" ]
|
|
}
|
|
|
|
In the event of the fileserver host going down, vg2 can be brought up
|
|
on fsb1 by running *on any node* 'vgchange --addtag @fileserverbackup vg2'
|
|
followed by 'vgchange -ay vg2'
|
|
|
|
|
|
Option (ii) - localised admin & configuation
|
|
(i.e. each host holds *locally* which classes of volumes to activate)
|
|
# Add @database tag to vg1's metadata
|
|
vgchange --addtag @database vg1
|
|
|
|
# Add @fileserver tag to vg2's metadata
|
|
vgchange --addtag @fileserver vg2
|
|
|
|
lvm.conf: (Identical on every machine - global settings)
|
|
tags {
|
|
hosttags = 1
|
|
}
|
|
|
|
lvm_db1.conf: (only needs to be on db1 - could be symlink to lvm_db.conf)
|
|
activation {
|
|
volume_list = [ "@database" ]
|
|
}
|
|
|
|
lvm_db2.conf: (only needs to be on db2 - could be symlink to lvm_db.conf)
|
|
activation {
|
|
volume_list = [ "@database" ]
|
|
}
|
|
|
|
lvm_fs1.conf: (only needs to be on fs1 - could be symlink to lvm_fs.conf)
|
|
activation {
|
|
volume_list = [ "@fileserver" ]
|
|
}
|
|
|
|
If fileserver goes down, to bring a spare machine fsb1 in as fileserver,
|
|
create lvm_fsb1.conf on fsb1 (or symlink to lvm_fs.conf):
|
|
|
|
activation {
|
|
volume_list = [ "@fileserver" ]
|
|
}
|
|
|
|
and run 'vgchange -ay vg2' or 'vgchange -ay @fileserver'
|
|
|