mirror of
https://github.com/elastic/elasticsearch.git
synced 2025-04-24 23:27:25 -04:00
Node selector per client rather than per request (#31471)
We have made node selectors configurable per request, but all of other language clients don't allow for that. A good reason not to do so, is that having a different node selector per request breaks round-robin. This commit makes NodeSelector configurable only at client initialization. It also improves the docs on this matter, important given that a single node selector can still affect round-robin.
This commit is contained in:
parent
59e7c6411a
commit
16e4e7a7cf
20 changed files with 208 additions and 148 deletions
|
@ -99,3 +99,30 @@ http://docs.oracle.com/javase/8/docs/technotes/guides/net/properties.html[`netwo
|
|||
to your
|
||||
http://docs.oracle.com/javase/8/docs/technotes/guides/security/PolicyFiles.html[Java
|
||||
security policy].
|
||||
|
||||
=== Node selector
|
||||
|
||||
The client sends each request to one of the configured nodes in round-robin
|
||||
fashion. Nodes can optionally be filtered through a node selector that needs
|
||||
to be provided when initializing the client. This is useful when sniffing is
|
||||
enabled, in case only dedicated master nodes should be hit by HTTP requests.
|
||||
For each request the client will run the eventually configured node selector
|
||||
to filter the node candidates, then select the next one in the list out of the
|
||||
remaining ones.
|
||||
|
||||
["source","java",subs="attributes,callouts,macros"]
|
||||
--------------------------------------------------
|
||||
include-tagged::{doc-tests}/RestClientDocumentation.java[rest-client-init-allocation-aware-selector]
|
||||
--------------------------------------------------
|
||||
<1> Set an allocation aware node selector that allows to pick a node in the
|
||||
local rack if any available, otherwise go to any other node in any rack. It
|
||||
acts as a preference rather than a strict requirement, given that it goes to
|
||||
another rack if none of the local nodes are available, rather than returning
|
||||
no nodes in such case which would make the client forcibly revive a local node
|
||||
whenever none of the nodes from the preferred rack is available.
|
||||
|
||||
WARNING: Node selectors that do not consistently select the same set of nodes
|
||||
will make round-robin behaviour unpredictable and possibly unfair. The
|
||||
preference example above is fine as it reasons about availability of nodes
|
||||
which already affects the predictability of round-robin. Node selection should
|
||||
not depend on other external factors or round-robin will not work properly.
|
||||
|
|
|
@ -196,6 +196,16 @@ include-tagged::{doc-tests}/RestClientDocumentation.java[rest-client-init-failur
|
|||
<1> Set a listener that gets notified every time a node fails, in case actions
|
||||
need to be taken. Used internally when sniffing on failure is enabled.
|
||||
|
||||
["source","java",subs="attributes,callouts,macros"]
|
||||
--------------------------------------------------
|
||||
include-tagged::{doc-tests}/RestClientDocumentation.java[rest-client-init-node-selector]
|
||||
--------------------------------------------------
|
||||
<1> Set the node selector to be used to filter the nodes the client will send
|
||||
requests to among the ones that are set to the client itself. This is useful
|
||||
for instance to prevent sending requests to dedicated master nodes when
|
||||
sniffing is enabled. By default the client sends requests to every configured
|
||||
node.
|
||||
|
||||
["source","java",subs="attributes,callouts,macros"]
|
||||
--------------------------------------------------
|
||||
include-tagged::{doc-tests}/RestClientDocumentation.java[rest-client-init-request-config-callback]
|
||||
|
@ -283,8 +293,7 @@ instance and share it between all requests:
|
|||
include-tagged::{doc-tests}/RestClientDocumentation.java[rest-client-options-singleton]
|
||||
--------------------------------------------------
|
||||
<1> Add any headers needed by all requests.
|
||||
<2> Set a `NodeSelector`.
|
||||
<3> Customize the response consumer.
|
||||
<2> Customize the response consumer.
|
||||
|
||||
`addHeader` is for headers that are required for authorization or to work with
|
||||
a proxy in front of Elasticsearch. There is no need to set the `Content-Type`
|
||||
|
@ -315,15 +324,6 @@ adds an extra header:
|
|||
include-tagged::{doc-tests}/RestClientDocumentation.java[rest-client-options-customize-header]
|
||||
--------------------------------------------------
|
||||
|
||||
Or you can send requests to nodes with a particular attribute:
|
||||
|
||||
["source","java",subs="attributes,callouts,macros"]
|
||||
--------------------------------------------------
|
||||
include-tagged::{doc-tests}/RestClientDocumentation.java[rest-client-options-customize-attribute]
|
||||
--------------------------------------------------
|
||||
<1> Replace the node selector with one that selects nodes on a particular rack.
|
||||
|
||||
|
||||
==== Multiple parallel asynchronous actions
|
||||
|
||||
The client is quite happy to execute many actions in parallel. The following
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue