diff --git a/redis.conf b/redis.conf index 5cea06a47..a51ef007d 100644 --- a/redis.conf +++ b/redis.conf @@ -805,6 +805,11 @@ acllog-max-len 128 # Once the limit is reached Redis will close all the new connections sending # an error 'max number of clients reached'. # +# IMPORTANT: When Redis Cluster is used, the max number of connections is also +# shared with the cluster bus: every node in the cluster will use two +# connections, one incoming and another outgoing. It is important to size the +# limit accordingly in case of very large clusters. +# # maxclients 10000 ############################## MEMORY MANAGEMENT ################################ diff --git a/src/cluster.c b/src/cluster.c index cacf09bf3..87ed09e7e 100644 --- a/src/cluster.c +++ b/src/cluster.c @@ -694,8 +694,11 @@ void clusterAcceptHandler(aeEventLoop *el, int fd, void *privdata, int mask) { /* Return the approximated number of sockets we are using in order to * take the cluster bus connections. */ unsigned long getClusterConnectionsCount(void) { + /* We decrement the number of nodes by one, since there is the + * "myself" node too in the list. Each node uses two file descriptors, + * one incoming and one outgoing, thus the multiplication by 2. */ return server.cluster_enabled ? - (dictSize(server.cluster->nodes)*2) : 0; + ((dictSize(server.cluster->nodes)-1)*2) : 0; } /* -----------------------------------------------------------------------------