Transport Clientによる検索を維持しつつノードを再起動したい

シチュエーション

  1. 3台のノードからなるクラスタにJavaのTransport Clientで接続(接続先IPアドレスに3つのノードすべてを列挙)
  2. 1台のノードをシャットダウン・起動
  3. 20%前後の確率で https://github.com/elastic/elasticsearch/issues/11202 のエラーがJava Client側で発生

概要

Javaアプリケーションを起動したまま、検索できる状態を維持しつつノードを1つずつ再起動したいです(ローリングアップデートなどのため)。
しかしTransport Clientで接続した場合、ノードを再起動するとcatchすることができないエラーが発生する場合があります。

これに対する私が知っている解決策は現状3つあります。

  1. REST API(9200ポート)をLBで束ねてREST APIへアクセスする。ノードのシャットダウン時にはLBからそのノードを一時的に切り離す
  2. Node Clientを使用する(手元で実験してみたところNode Clientによる接続ではエラーは発生しませんでした)
  3. ノードのシャットダウン前にTransport Clientの接続先一覧からそのノードのIPを削除、その後Javaアプリケーションを再起動してTransport Clientがシャットダウンするノードへアクセスしないようにする(起動後には逆の手順を行う)

しかし、現状の私達の環境で採用するにはそれぞれ問題があります。

  1. 現状使用しているelastic4sというライブラリが使えない
  2. ノードサーバからアプリケーションサーバへの接続がネットワーク環境の制約上できないため使えない
  3. 3ノード・2アプリケーションの場合、接続先の書き換えと再起動を8回もする必要があり煩雑。

Transport Clientによる検索を維持しつつノードを再起動する方法はなにかないでしょうか?