@Override
  public synchronized void open(boolean enableRPCCompression, int connectionTimeoutInMs)
      throws IoTDBConnectionException {
    if (!isClosed) {
      return;
    }

    if (this.executorService != null) {
      this.executorService.shutdown();
      this.executorService = null;
    }
    if (this.availableNodes != null) {
      this.availableNodes.close();
      this.availableNodes = null;
    }

    if (enableAutoFetch) {
      initThreadPool();
      this.availableNodes =
          NodesSupplier.createNodeSupplier(
              getNodeUrls(),
              executorService,
              username,
              password,
              zoneId,
              thriftDefaultBufferSize,
              thriftMaxFrameSize,
              connectionTimeoutInMs,
              useSSL,
              trustStore,
              trustStorePwd,
              enableRPCCompression,
              version.toString());
    } else {
      this.availableNodes = new DummyNodesSupplier(getNodeUrls());
    }

    this.enableRPCCompression = enableRPCCompression;
    this.connectionTimeoutInMs = connectionTimeoutInMs;
    defaultSessionConnection = constructSessionConnection(this, defaultEndPoint, zoneId);
    defaultSessionConnection.setEnableRedirect(enableQueryRedirection);
    isClosed = false;
    if (enableRedirection || enableQueryRedirection) {
      deviceIdToEndpoint = new ConcurrentHashMap<>();
      tableModelDeviceIdToEndpoint = new ConcurrentHashMap<>();
      endPointToSessionConnection = new ConcurrentHashMap<>();
      endPointToSessionConnection.put(defaultEndPoint, defaultSessionConnection);
    }
  }
Multiple nodeUrl,If one node down, connect to the next one

@param nodeUrls List<String> Multiple ip:rpcPort eg.127.0.0.1:9001
iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java