[Gluster-devel] Multi-network support proposal
Jeff Darcy
jdarcy at redhat.com
Fri Feb 13 17:27:54 UTC 2015
This is a proposal for a "lightweight" version of multi-network support,
somewhat limited in functionality but implementable quickly because it
seems unlikely that anyone will be able to spend much time on a full
version. Here's the corresponding feature page:
http://www.gluster.org/community/documentation/index.php/Features/SplitNetwork
There are three things a user must be able to do:
* Create new named networks (a "default" network always exists)
* Associate specific host interface names/addresses with networks
* Associate volume roles (e.g. I/O, rebalance) with networks
The crux of this proposal is to do what we can by rewriting volfiles
between when they're fetched and when they're used to construct a
translator graph. Each protocol/client translator within a volfile
originally uses a server's *canonical* name - on the default network,
used for "peer probe" and other glusterd-to-glusterd operations. For
each such translator, the volfile consumer must do the following:
(1) Determine its own role (e.g. client, self-heal daemon)
(2) Use the {volume,role} tuple to find the right *network* to use
(3) Use the {network,canonical_name} tuple to find the right
*interface* to use
(4) Replace the server's canonical name ("remote-host" option) with the
interface name
For example, consider the following (don't worry about the syntax yet).
gluster volume create fubar server1:/brick server2:/brick
gluster network create client-net
gluster network associate client-net server1 server1-public
gluster network associate client-net server2 server2-public
gluster volume set-role fubar mounts client-net
According to step (2) above, any native mount of fubar will know to use
client-net. Therefore, according to step (3) it should make the
following substitutions:
server1 => server1-public
server2 => server2-public
By contrast, glusterd would still use the plain old "server1" and
"server2" on the "default" network.
Three kinds of enhancements are being left to the future:
(a) Determine the network to use based on *client* identity as well as
{volume,role}
(b) Allow a volume to be used only through certain networks
(c) Modify other parameters (e.g. SSL usage/credentials) based on
network or interface
Any other thoughts?
More information about the Gluster-devel
mailing list