[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:


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

 (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