[Gluster-devel] changes to client port range in release 3.1.3

Prasanna Kalever pkalever at redhat.com
Tue May 3 09:28:38 UTC 2016


Hi all,

The various port ranges in glusterfs as of now:  (very high level view)


client:
      In case of bind secure:
                        will start from 1023 - 1, In case all these
port exhaust bind to random port (a connect() with out bind() call)
      In case of bind insecure:
                        will start from 65535 all the way down till 1

bricks/server:
      any port starting from 49152 to 65535

glusterd:
      24007


There was a recent bug, In case of bind secure, client see all ports
as exhausted and connect to a random port which was unfortunately in
brick port map range. So client successfully got a connected on a
given port. Now without these information with glusterd (since pmap
alloc done only at start), it passes the same port to brick, where
brick fails to connect on it (also consider the race situation)


To solve this issue we decided to split the client and brick port ranges. [1]

As usual bricks port map range will be IANA  ephemeral port range i.e
49152-65535.
For clients only in-case of secure ports exhaust (which is a rare
case),  we decided to fall back to registered ports i.e 49151 - 1024


If we see the ephemeral port standards
1.  The Internet Assigned Numbers Authority (IANA) suggests the range
49152 to 65535
2.  Many Linux kernels use the port range 32768 to 61000
more at [2]

Some of our thoughts include split the current brick port range ( ~16K
) into two (may be ~8K each or some other ratio) and use them for
client and bricks, which could solve the problem but also  introduce a
 limitation for scalability.

The patch [1] goes in 3.1.3, we wanted know if there are any impacts
caused with these changes.


[1] http://review.gluster.org/#/c/13998/
[2] https://en.wikipedia.org/wiki/Ephemeral_port


Thanks,
--
Prasanna


More information about the Gluster-devel mailing list