Scenario: I had a large ES cluster with all nodes acting equally, as client/master/data nodes (basically, just a default cluster setup, nothing fancy). Everything worked great. I also had my Java applications connecting to it using a Node Client connection (it simply used one FQDN that was load balanced in front of all nodes). No problems.
Now, for a slightly better cluster setup, we separated out the client nodes, master nodes, and data nodes. That went fine, and all is well. But then when configuring the Java application to connect to the ES cluster (I continued to use the Java Node Client), but I had used a FQDN that was load balanced to just the client nodes of the cluster --- this caused a problem (no master discovered exceptions when it attempts to connect). I verified everything is working/setup the way I want (no dumb errors).
So, the problem seems to be the fact that the Java Node Client needs more visibility than just the client nodes of the cluster? I thought this wouldn't be a problem since the client nodes can convey any cluster information (about the cluster) back to the Java Node Client.
So, switching to use the Java Transport Client fixed the above issue (still allowing me to only specify the FQDN that points to only the client nodes in the cluster).
I guess my question is: With the aforementioned setup, am I limited to using the Java Transport Client?