On Mon, Mar 11, 2013 at 4:05 PM, Iustin Pop <[email protected]> wrote:
> On Mon, Mar 11, 2013 at 03:57:20PM +0100, Helga Velroyen wrote:
>> Hi!
>>
>>
>> On Mon, Mar 11, 2013 at 3:34 PM, Helga Velroyen <[email protected]> wrote:
>>
>> > Hi!
>> >
>> > On Mon, Mar 11, 2013 at 3:32 PM, Guido Trotter <[email protected]>wrote:
>> >
>> >> On Mon, Mar 11, 2013 at 7:25 AM, Iustin Pop <[email protected]> wrote:
>> >> > On Mon, Mar 11, 2013 at 03:20:36PM +0100, Helga Velroyen wrote:
>> >> >> Hi!
>> >> >>
>> >> >> On Mon, Mar 11, 2013 at 3:18 PM, Iustin Pop <[email protected]> wrote:
>> >> >>
>> >> >> > On Mon, Mar 11, 2013 at 06:28:26AM -0700, Guido Trotter wrote:
>> >> >> > > On Mon, Mar 11, 2013 at 6:17 AM, Helga Velroyen <[email protected]
>> >> >
>> >> >> > wrote:
>> >> >> > > > This patch updates the design doc "Design correct reporting of
>> >> storage
>> >> >> > > > free space". The modifications were chosen to not conflict with
>> >> any
>> >> >> > > > future changes of Ganeti regarding storage pools.
>> >> >> > > >
>> >> >> > > > Signed-off-by: Helga Velroyen <[email protected]>
>> >> >> > > > ---
>> >> >> > > >  doc/design-storagespace.rst | 118
>> >> >> > +++++++++++++++++++++++++++++++-------------
>> >> >> > > >  1 file changed, 83 insertions(+), 35 deletions(-)
>> >> >> > > >
>> >> >> > > > diff --git a/doc/design-storagespace.rst
>> >> b/doc/design-storagespace.rst
>> >> >> > > > index 919479f..67603e8 100644
>> >> >> > > > --- a/doc/design-storagespace.rst
>> >> >> > > > +++ b/doc/design-storagespace.rst
>> >> >> > > > @@ -20,21 +20,19 @@ interaction with different storage types.
>> >> >> > > >  Configuration changes
>> >> >> > > >  ---------------------
>> >> >> > > >
>> >> >> > > > -Each storage type will have a new "pools" parameter added (type
>> >> list
>> >> >> > of
>> >> >> > > > -strings). This will be list of vgs for plain and drbd (note
>> >> that we
>> >> >> > make
>> >> >> > > > -no distinction at this level between allowed vgs and metavgs),
>> >> the
>> >> >> > list
>> >> >> > > > -of rados pools for rados, or the storage directory for file and
>> >> >> > > > -sharedfile. The parameters already present in the cluster config
>> >> >> > object
>> >> >> > > > -will be moved to the storage parameters.
>> >> >> > > > -
>> >> >> > > > -Since currently file and sharedfile only support a single
>> >> directory
>> >> >> > this
>> >> >> > > > -list will be limited to one. In the future if we'll have
>> >> support for
>> >> >> > > > -more directories, or for per-nodegroup directories this can be
>> >> >> > changed.
>> >> >> > > > -
>> >> >> > > > -Note that these are just "mechanisms" parameters that define
>> >> which
>> >> >> > > > -storage pools the cluster can use. Further filtering about
>> >> what's
>> >> >> > > > -allowed can go in the ipolicy, but these changes are not
>> >> covered in
>> >> >> > this
>> >> >> > > > -design doc.
>> >> >> > > > +Add a new attribute "enabled_storage_methods" (type: list of
>> >> strings)
>> >> >> > to the
>> >> >> > > > +cluster config which holds the types of storages, for example,
>> >> >> > "plain", "drbd",
>> >> >> > > > +or "ext". We consider the first one of the list as the default
>> >> method.
>> >> >> > > > +
>> >> >> > > > +For file storage, we'll report the storage space on the file
>> >> storage
>> >> >> > dir,
>> >> >> > > > +which is currently limited to one directory. In the future, if
>> >> we'll
>> >> >> > have
>> >> >> > > > +support for more directories, or for per-nodegroup directories
>> >> this
>> >> >> > can be
>> >> >> > > > +changed.
>> >> >> > > > +
>> >> >> > > > +Note that the abovementioned enabled_storage_methods are just
>> >> >> > "mechanisms"
>> >> >> > > > +parameters that define which storage methods the cluster can
>> >> use.
>> >> >> > Further
>> >> >> > > > +filtering about what's allowed can go in the ipolicy, but these
>> >> >> > changes are
>> >> >> > > > +not covered in this design doc.
>> >> >> > > >
>> >> >> > > >  Since the ipolicy currently has a list of enabled storage
>> >> types, we'll
>> >> >> > > >  use that to decide which storage type is the default, and to
>> >> >> > self-select
>> >> >> > > > @@ -47,17 +45,23 @@ RPC changes
>> >> >> > > >  -----------
>> >> >> > > >
>> >> >> > > >  The noded RPC call that reports node storage space will be
>> >> changed to
>> >> >> > > > -accept a list of <method>,<key> string tuples. For each of them
>> >> it
>> >> >> > will
>> >> >> > > > -report the free amount of space found on storage <key> as known
>> >> by the
>> >> >> > > > -requested method. Methods are for example ``lvm``,
>> >> ``filesystem``,
>> >> >> > > > -``rados``, and the key would be a volume group name in the case
>> >> of
>> >> >> > lvm,
>> >> >> > > > -a directory name for the filesystem and a rados pool name, for
>> >> >> > > > -rados_pool.
>> >> >> > > > +accept a list of <method>,<key> string tuples. For each of
>> >> them, it
>> >> >> > will
>> >> >> > > > +report the free amount of storage space found on storage <key>
>> >> as
>> >> >> > known
>> >> >> > > > +by the requested storage type method. For example methods are
>> >> ``lvm``,
>> >> >> > > > +``filesystem``, or ``rados``, and the key would be a volume
>> >> group
>> >> >> > name, in
>> >> >> > > > +the case of lvm, a directory name for the filesystem and a
>> >> rados pool
>> >> >> > name
>> >> >> > > > +for rados storage.
>> >> >> > > > +
>> >> >> > > > +For now, we will implement only the storage reporting for
>> >> non-shared
>> >> >> > storage,
>> >> >> > > > +that is ``filesystem`` and ``lvm``. For shared storage methods
>> >> like
>> >> >> > ``rados``
>> >> >> > > > +and ``ext`` we will not implement a free space calculation,
>> >> because
>> >> >> > it does
>> >> >> > > > +not make sense to query each node for the free space of a
>> >> commonly
>> >> >> > used
>> >> >> > > > +storage.
>> >> >> > > >
>> >> >> > > >  Masterd will know (through a constant map) which storage type
>> >> uses
>> >> >> > which
>> >> >> > > >  method for storage calculation (i.e. ``plain`` and ``drbd`` use
>> >> >> > ``lvm``,
>> >> >> > > > -``file`` and ``sharedfile`` use ``filesystem``, etc) and query
>> >> the one
>> >> >> > > > -needed (or all of the needed ones).
>> >> >> > > > +``file`` uses ``filesystem``, etc) and query the one needed (or
>> >> all
>> >> >> > of the
>> >> >> > > > +needed ones).
>> >> >> > > >
>> >> >> > > >  Note that for file and sharedfile the node knows which
>> >> directories are
>> >> >> > > >  allowed and won't allow any other directory to be queried for
>> >> security
>> >> >> > > > @@ -73,18 +77,40 @@ Ganeti reporting
>> >> >> > > >
>> >> >> > > >  ``gnt-node list`` will by default report information just about
>> >> the
>> >> >> > > >  default storage type. It will be possible to add fields to ask
>> >> about
>> >> >> > > > -other ones, if they're enabled.
>> >> >> > > > -
>> >> >> > > > -``gnt-node info`` will report information about all enabled
>> >> storage
>> >> >> > > > -types, without querying them (just say which ones are supported
>> >> >> > > > -according to the cluster configuration).
>> >> >> > > > -
>> >> >> > > > -``gnt-node list-storage`` will change to report information
>> >> about all
>> >> >> > > > -available storage pools in each storage type. An extra flag
>> >> will be
>> >> >> > > > -added to filter by storage pool name (alternatively we can
>> >> implement
>> >> >> > > > -this by allowing to query by a list of ``type:pool`` string
>> >> tuples to
>> >> >> > > > -have a more comprehensive filter).
>> >> >> > > > -
>> >> >> > > > +other ones, if they're enabled. Examples:
>> >> >> > > > +
>> >> >> > > > +> gnt-node list
>> >> >> > > > +Node                       DTotal DFree MTotal MNode MFree
>> >> Pinst Sinst
>> >> >> > > > +mynode1                      3.6T  3.6T  64.0G 1023M 62.2G
>> >> 1     0
>> >> >> > > > +mynode2                      3.6T  3.6T  64.0G 1023M 62.0G
>> >> 2     1
>> >> >> > > > +mynode3                      3.6T  3.6T  64.0G 1023M 62.3G
>> >> 0     2
>> >> >> > > > +
>> >> >> > > > +> gnt-node list -o dtotal/lvm/myvg,dfree/rados/myrados
>> >> >> > > > +Node      DTotal (Lvm, myvg) DFree (Rados, myrados)
>> >> >> > > > +mynode1                 3.6T                      -
>> >> >> > > > +mynode2                 3.6T                      -
>> >> >> > > > +
>> >> >> > >
>> >> >> > > Could you add a note on how one is supposed to find about the
>> >> >> > > "myrados" and "myvg" parts, and perhaps we can also have just
>> >> >> > > dtotal/lvm that gives the "first/default" lvm. Also with storage
>> >> >> > > pools, won't we go directly dtotal/pool_name without specifying
>> >> "lvm"
>> >> >> > > or "rados" in between? So perhaps we should "just" as an interim
>> >> allow
>> >> >> > > two levels, or allow three levels in between but go towards having
>> >> >> > > two, in the future.
>> >> >> >
>> >> >> > Wait a second. I'm thoroughly confused now.
>> >> >> >
>> >> >> > I thought the discussion was that in the current stage we don't allow
>> >> >> > custom names, but only one pool (key=type), and in the future
>> >> key=type
>> >> >> > migrates to key=name (pointing to the definitions)?!
>> >> >> >
>> >> >>
>> >> >> That would drop the possibility to refer to vg and meta_vg seperately,
>> >> at
>> >> >> least in this interim state. Do we really want that? It is the only
>> >> reason
>> >> >> to have this three-part-definition as interim solution before storage
>> >> pools
>> >> >> are implemented.
>> >> >
>> >> > `metavg' should not be used for actual storage, so I don't see much gain
>> >> > from having it available; htools doesn't take it into consideration, and
>> >> > in general Ganeti presumes that the administrator has ensured there's
>> >> > enough space (i.e. infinite) for it.
>> >> >
>> >> > So yes, I don't see a problem there. Handling the metavg correctly will
>> >> > be a lot of work in any case…
>> >> >
>> >>
>> >> The other reason is that nowadays you can manually specify a vg,
>> >> although then "unsupported things" happen, I guess (from allocation,
>> >> etc).
>> >>
>> >> Since to fully support that we will need storage pools, I agree with
>> >> this option, and to drop the three/level in favor of two, as long as
>> >> we clearly specify that this "completely" supports only one
>> >> vg/directory/etc and "manually specified"ones will need to be
>> >> reconciled with pools later.
>> >>
>> >>
>> > Okay, I am fine with the two-level solution as well and will make that
>> > clear in the design doc. Will send an interdiff soon.
>> >
>> > Cheers,
>> > Helga
>> >
>>
>> Here is the interdiff:
>>
>> ---
>>  doc/design-storagespace.rst | 27 ++++++++++++++++-----------
>>  1 file changed, 16 insertions(+), 11 deletions(-)
>>
>> diff --git a/doc/design-storagespace.rst b/doc/design-storagespace.rst
>> index 67603e8..6c86d6e 100644
>> --- a/doc/design-storagespace.rst
>> +++ b/doc/design-storagespace.rst
>> @@ -75,9 +75,9 @@ These calculations will be implemented in the node
>> storage system
>>  Ganeti reporting
>>  ----------------
>>
>> -``gnt-node list`` will by default report information just about the
>> -default storage type. It will be possible to add fields to ask about
>> -other ones, if they're enabled. Examples:
>> +`gnt-node list`` can be queried for the different storage methods, if they
>> +are enabled. By default, it will just report information about the default
>> +storage method. Examples:
>>
>>  > gnt-node list
>>  Node                       DTotal DFree MTotal MNode MFree Pinst Sinst
>> @@ -85,18 +85,23 @@ mynode1                      3.6T  3.6T  64.0G 1023M
>> 62.2G     1     0
>>  mynode2                      3.6T  3.6T  64.0G 1023M 62.0G     2     1
>>  mynode3                      3.6T  3.6T  64.0G 1023M 62.3G     0     2
>>
>> -> gnt-node list -o dtotal/lvm/myvg,dfree/rados/myrados
>> +> gnt-node list -o dtotal/lvm,dfree/rados
>>  Node      DTotal (Lvm, myvg) DFree (Rados, myrados)
>>  mynode1                 3.6T                      -
>>  mynode2                 3.6T                      -
>>
>> -We want to ensure that this design is forward-compatible with respect to
>> -the introduction of storage pools. When storage pools are introduced, we
>> -will name the default drbd storage pool 'drbd'. It will be possible to
>> -rename it. By default, ``gnt-node`` will report on the default storage,
>> -but it will be possible to ask about any of them. With the implementation
>> -of storage pools, there will be new functionality to ask about what storage
>> -pools are available and of what type.
>> +Note that for drbd, we only report the space of the vg and only if it was
>> not
>> +renamed to something different than the default volume group name. With
>> this
>> +design, there is also no possibility to ask about the meta volume group. We
>> +restrict the design here to make the transition to storage pools easier
>> (as it
>> +is an interim state only). It is the administrator's responsibility to
>> ensure
>> +that there is enough space for the meta volume group.
>> +
>> +When storage pools are implemented, we switch from referencing the storage
>> +method to referencing the storage pool name. For that, of course, the pool
>> +names need to be unique over all storage methods. The default drbd storage
>> pool
>> +will be called 'drbd' and it will be possible to rename it. There will be
>> new
>> +functionality to ask about what storage pools are available and of what
>> type.
>
> Since there's no actual "drbd" storage, just LVM under drbd, the concept
> of "drbd storage pool" doesn't make much sense.
>
> I don't know if this is just an accidental oversight or if it points to
> a bigger problem behind the storage pools design (it's not a 1:1 mapping
> between storage type and storage pool type).
>

I believe this is an oversight, as we agreed that the "pool" for drbd
would be the one called (by default) "lvm".
drbd as you say is just a storage type that uses an lvm-based storage
pool (or two, with a different meta device). :)

Thanks,

Guido

Reply via email to