Hi Vladimir, I think my previous email was a bit confusing. I did not mean placement of scheduling module should be anywhere else. I agree that it should be on the scheduler nodes.
What I meant was similar to what you explained in the last paragraph about back-ref to array... Whether the volume driver can accommodate multiple Vendor/Type, like SM, or a single one, it will need to select an actual array at some point. My suggestion was only to put enough intelligence in the generic scheduler (via plugins etc.) to be able to not only select the node to handle the request, but also to select the actual array (what I called storage backend) to host the volume. I don't think we should take for granted that there will be a one-to-one mapping between arrays and Storage Nodes. I can imagine a situation where a cloud provider might have more than one SN handling an array to account for node failures etc. and having a one-many model for array-SN could be overkill, so it could be many-many. Thanks, Renuka. From: Vladimir Popovski [mailto:vladi...@zadarastorage.com] Sent: Wednesday, October 19, 2011 11:20 AM To: Renuka Apte; Armando Migliaccio; Reddin, Tim (Cloud Services); Chuck Thier Cc: openstack-volume@lists.launchpad.net Subject: RE: [Openstack-volume] Basic volume-type aware scheduler Hi Renuka, >>> I had one question about the proposal. From what I understand, it seems to >>> assume that different types of storage backends (actual infrastructure >>> which houses the volume) will be controlled by different types of volume >>> drivers (or at least nodes). Is this a good assumption to make? Yes, we will have drivers per each storage Vendor (or even per Vendor/Type if Vendor will be unable to provide one generic driver). I can imagine that we may have "generic" drivers that will be able to operate with many different vendors. Some vendors may decide not to provide their own schedulers, but instead of that to provide data in the format that will be compliant with some generic scheduler. Regarding placement of scheduling module: I suppose it will be better to perform scheduling on actual scheduler nodes who may have broader picture about connectivity. Think about the situation when your Backend for some reason is inconsistently connected to nodes (nova-volume node A can see storage arrays 1 & 2, B can see 2 & 3 and C - 1 & 3). You are right about double-scheduling, because if nova-volume node (let's call it storage node or SN for simplicity) can operate with multiple arrays it will need to know which one should host it. I was thinking more about one-to-one connection of array to SN or case as ours, where SN has actual local storage. So, what this proposal is lacking is some sort of back-ref to array where volume should be actually hosted. When scheduler will make a decision about host it should not only forward it to SN, but include some opaque data that might be used by the driver. This opaque data might be the entire dict of key/value pairs used by the scheduler or some special blob reported by driver for this storage class. It will help us to have only one Scheduler (centralized or distributed), which seems to be more compliant with general Openstack model. To be more specific about the approach: Capabilities reported by SN to Scheduler might be like: "volume": [ {"type": "SATA", "RPM": 7200, ..., "location": "aaa", "access path": "a1"}, {"type": "SATA", "RPM": 15000, ..., "location": "bbb", "access path": "b1"}, {"type": "SAS", "RPM": 7200, ..., "location": "aaa", "access path": "c1"}, ... ] Create volume from Scheduler to SN: def create_volume(self, context, volume_id, snapshot_id=None, req_spec=None): ... Where req_spec will be something like: req_spec = {"type": "SATA", "RPM": 7200, ..., "location": "aaa", "access path": "a1"} The alternate approach might be to have: "volume": [ {"type": "SATA", "RPM": 7200, ..., "blob": "xxx " }, {"type": "SATA", "RPM": 15000, ..., "blob": "yyy" }, {"type": "SAS", "RPM": 7200, ..., "blob": "zzz" }, ... ] and req_spec = {"blob": "xxx "} This will require to change what schedule_create_volume() returns - not only host, but host + some special data. Regards, -Vladimir -----Original Message----- From: openstack-volume-bounces+vladimir=zadarastorage....@lists.launchpad.net<mailto:zadarastorage....@lists.launchpad.net> [mailto:openstack-volume-bounces+vladimir<mailto:openstack-volume-bounces%2Bvladimir>=zadarastorage....@lists.launchpad.net<mailto:zadarastorage....@lists.launchpad.net>] On Behalf Of Renuka Apte Sent: Wednesday, October 19, 2011 10:17 AM To: Armando Migliaccio; Reddin, Tim (Cloud Services); Chuck Thier Cc: openstack-volume@lists.launchpad.net<mailto:openstack-volume@lists.launchpad.net> Subject: Re: [Openstack-volume] Basic volume-type aware scheduler Hi, I had one question about the proposal. From what I understand, it seems to assume that different types of storage backends (actual infrastructure which houses the volume) will be controlled by different types of volume drivers (or at least nodes). Is this a good assumption to make? Instead do you think scheduling on the basis of backends instead of nodes is a better idea. The reason I find this more logical is, in the case of compute, we schedule on the basis of a node, because the node is actually housing (running) the VM. For volume drivers, the node is simply the brain, while some real storage that the node can reach, is where the volume is housed. Each driver can report whatever opaque key/value pairs they wish to, and plug in rules, just as you mentioned, to help the scheduler make this decision. In the absence of this, if we have symmetric volume drivers, that can reach most of the storage backends, we end up in a situation where the scheduler has not really shortlisted anything, and has left another round of scheduling to the driver. This is especially true if at some point we support multiple drivers per node, as you suggested. Whatever I said can certainly be accommodated in Vladimir's current proposal by doing two rounds of scheduling (pick node, pick storage from node). What I am asking is, if nodes, in general, need the ability to figure out which backend to create this volume on, why not push it into the generic scheduler itself? Thanks, Renuka. -----Original Message----- From: openstack-volume-bounces+renuka.apte=citrix....@lists.launchpad.net<mailto:openstack-volume-bounces+renuka.apte=citrix....@lists.launchpad.net> [mailto:openstack-volume-bounces+renuka.apte=citrix....@lists.launchpad.net]<mailto:[mailto:openstack-volume-bounces+renuka.apte=citrix....@lists.launchpad.net]> On Behalf Of Armando Migliaccio Sent: Wednesday, October 19, 2011 9:06 AM To: Reddin, Tim (Cloud Services); Chuck Thier Cc: openstack-volume@lists.launchpad.net<mailto:openstack-volume@lists.launchpad.net> Subject: Re: [Openstack-volume] Basic volume-type aware scheduler I agree with Tim. As I understand it, Vlad is talking Policies and Chuck is talking mechanisms. Those are not to be confused, but rather to be kept separate. Chuck's proposal may turn things to be simpler, but definitely not more flexible. This is because system implementation details will dictate policies according to which decisions are made...unless I am completely missing the point. Armando > -----Original Message----- > From: openstack-volume- > bounces+armando.migliaccio=citrix....@lists.launchpad.net<mailto:bounces+armando.migliaccio=citrix....@lists.launchpad.net> > bounces+[mailto:openstack-<mailto:openstack-> > volume-bounces+armando.migliaccio=citrix....@lists.launchpad.net<mailto:volume-bounces+armando.migliaccio=citrix....@lists.launchpad.net>] > On > volume-bounces+Behalf Of > Reddin, Tim (Cloud Services) > Sent: 19 October 2011 16:14 > To: Chuck Thier > Cc: > openstack-volume@lists.launchpad.net<mailto:openstack-volume@lists.launchpad.net> > Subject: Re: [Openstack-volume] Basic volume-type aware scheduler > > I think we need to differentiate between what we present to the > consumer, (which may be a simple set of flavors) and the attributes > which the scheduler using to make selection decisions. > > If I am reading the proposal correctly a driver can advertize a ( > mostly) opaque set of attributes which the scheduler can use to make > placement decisions. > > Doesn't this kind of approach facilitate the kind of placement > capabilites that Renuka was seeking? Without introducing any topology > or vendor specific awareness? > > In addituon wont the maintenance of these kind of attributes > facilitate an admin api in a vendor agnostic way? > > Tim > > > On 19 Oct 2011, at 15:52, "Chuck Thier" > <cth...@gmail.com<mailto:cth...@gmail.com>> wrote: > > > Hi Vladimir, > > > > I agree that we need a volume-type aware scheduler, and thanks for > > taking this on. I had envisioned it a bit different though. I was > > thinking that the cluster operator would define the volume types > > (similar to how they define vm flavors). Each type would have a > > mapping to a driver, and the scheduler would use this mapping to > > determine which driver to send the incoming request to. > > > > I think this makes things simpler and more flexible. For example an > > operator may not want to expose every capability of some storage > > system that they have added. > > > > -- > > Chuck > > > > > > On Tue, Oct 18, 2011 at 2:36 PM, Vladimir Popovski > > <vladi...@zadarastorage.com<mailto:vladi...@zadarastorage.com>> wrote: > >> Hi All, > >> > >> > >> > >> I've registered a new blueprint for volume-type aware scheduler: > >> > >> https://blueprints.launchpad.net/nova/+spec/volume-type-scheduler > >> > >> > >> > >> Please take a look at specification attached to it explaining main > >> principles (feel free to add/change parts of it). > >> > >> > >> > >> Regards, > >> > >> -Vladimir > >> > >> > >> > >> > >> > >> -- > >> Mailing list: https://launchpad.net/~openstack-volume > >> Post to : > >> openstack-volume@lists.launchpad.net<mailto:openstack-volume@lists.launchpad.net> > >> Unsubscribe : https://launchpad.net/~openstack-volume > >> More help : https://help.launchpad.net/ListHelp > >> > >> > > > > -- > > Mailing list: https://launchpad.net/~openstack-volume > > Post to : > > openstack-volume@lists.launchpad.net<mailto:openstack-volume@lists.launchpad.net> > > Unsubscribe : https://launchpad.net/~openstack-volume > > More help : https://help.launchpad.net/ListHelp > -- > Mailing list: https://launchpad.net/~openstack-volume > Post to : > openstack-volume@lists.launchpad.net<mailto:openstack-volume@lists.launchpad.net> > Unsubscribe : https://launchpad.net/~openstack-volume > More help : https://help.launchpad.net/ListHelp -- Mailing list: https://launchpad.net/~openstack-volume Post to : openstack-volume@lists.launchpad.net<mailto:openstack-volume@lists.launchpad.net> Unsubscribe : https://launchpad.net/~openstack-volume More help : https://help.launchpad.net/ListHelp -- Mailing list: https://launchpad.net/~openstack-volume Post to : openstack-volume@lists.launchpad.net<mailto:openstack-volume@lists.launchpad.net> Unsubscribe : https://launchpad.net/~openstack-volume More help : https://help.launchpad.net/ListHelp
-- Mailing list: https://launchpad.net/~openstack-volume Post to : openstack-volume@lists.launchpad.net Unsubscribe : https://launchpad.net/~openstack-volume More help : https://help.launchpad.net/ListHelp