I was using astyanax connection pool defined as this:
ipSeeds = "LOAD_BALANCER_HOST:9160";
conPool.setSeeds(ipSeeds)
.setDiscoveryType(NodeDiscoveryType.TOKEN_AWARE)
.setConnectionPoolType(ConnectionPoolType.TOKEN_AWARE);
However, my cluster have 4 nodes and I have 8 client machines connecting on it. LOAD_BALANCER_HOST
forwards requests to one of my four nodes.
On a client node, I have:
$netstat -an | grep 9160 | awk '{print $5}' | sort |uniq -c
235 node1:9160
680 node2:9160
4 node3:9160
4 node4:9160
So although the ConnectionPoolType is TOKEN_AWARE
, my client seems to be connecting mainly to node2, sometimes to node1, but almost never to nodes 3 and 4.
Question is:
Why is this happening? Shouldn't a token aware connection pool query the ring for the node list and connect to all the active nodes using round robin algorithm?