Remote Query Dispatcher configuration

The Remote Query Dispatcher (simply called the dispatcher) is responsible for creating all Deephaven workers in a Deephaven installation. Each installation will have at least two dispatchers: a query server and a merge server. Like all Deephaven processes, the base property file for any Deephaven process is specified by the Configuration.rootFile property, and property files are retrieved from the configuration server.

  • Query servers run most workers that do not require the ability to write data. There is at least one query server in a Deephaven installation. Additional query servers can be configured to increase capacity, typically by running an additional query server on each additional machine.
  • Merge servers run privileged workers that are allowed to write to (and delete) disk-backed tables, both intraday and historical. Only users with specific privileges are allowed to start merge workers. Many installations only need one merge server, although more can be added if necessary.

The following configuration options are likely of most interest to administrators:

  • Worker heap size options allow administrators to configure and restrict worker heap sizes.
  • Dispatcher usage restrictions allow administrators to restrict the usage of dispatchers. For example, it is possible to only allow certain users to start workers on a specific dispatcher. Merge servers automatically restrict usage to users with certain privileges.

A description of the dispatcher's communications protocols may also be of interest.

Updating properties

See viewing and changing configuration for details on how to change property files.

By default, properties apply to all Deephaven processes. Stanzas restrict properties so that they only apply to certain processes, such as one specific dispatcher process.

  • Place properties that are required for all dispatchers (query servers and merge servers) in a property file outside any stanzas, and before any dispatcher-specific properties.
  • Following this, place properties that are overridden for specific dispatchers within a stanza. For instance, put merge server properties in a [service.name=dbmerge] stanza.
    • iris_defaults.prop file first defines ports (properties such as RemoteQueryDispatcherParameters.queryPort) outside any stanzas. It then adds the merge-server values within a [service.name=dbmerge] stanza.
    • iris-endpoints.prop uses a host= stanza to restrict properties to one specific dispatcher.

Any property updates require the impacted dispatcher processes to be restarted.

Properties

Dispatcher properties can be broken into several areas:

Ports

The ports that the dispatchers use can be changed if necessary. Query servers and merge servers use different ports so that they can run on the same machine.

Property NameDescriptionDefault
RemoteQueryDispatcherParameters.queryPortThe port on which the dispatcher listens for client connections, such as from the Persistent Query Controller (this also requires updating the iris.db.<server number>.port in the controller's server definitions).22013 (query server), 30002 (merge server)
RemoteQueryDispatcher.webserver.portThe port on which the dispatcher's web service listens - workers connect to this port to establish run-time details.8084 (query servers), 8085 (merge servers)
RemoteQueryDispatcher.workerServerPortsThe ports on which the workers started by this dispatcher will listen for client connections.23000-23999 (query servers), 25000-25999 (merge servers)
RemoteQueryDispatcher.workerServerWebsocketPortsThe ports on which the workers started by this dispatcher will listen for web client connections.24000-24999 (query servers), 26000-26999 (merge servers)

Web server

The dispatcher provides an optional web server that can be queried for its current state. This is turned off by default, and can be enabled with the following property:

RemoteQueryDispatcher.webserver.enabled=true

If the web server is enabled, it uses the following properties:

Property NameDescriptionDefault
RemoteQueryDispatcher.webserver.sslRequiredIf this is defined as true, an SSL certificate will be required and used for the Remote Query Dispatcher's Web services, and the connection will be over https.true
RemoteQueryDispatcher.webserver.authenticationRequiredIf this is true, users will be required to authenticate to access the Remote Query Dispatcher's Web services.true
RemoteQueryDispatcher.tls.keystoreIf SSL is being used, the keystore to be searched to find the certificate for the encrypted https connection./etc/sysconfig/illumon.d/auth-user/webServices-keystore.p12
RemoteQueryDispatcher.tls.passphrase.fileIf SSL is being used, a file containing the base64-encoded passphrase used to verify the integrity of the keystore./etc/sysconfig/deephaven/auth-user/.webapi_passphrase
RemoteQueryDispatcher.tls.passphraseIf SSL is being used, the base64-encoded passphrase to be used to verify the integrity of the keystore (RemoteQueryDispatcher.tls.passphrase.file is recommended instead of this property).None

If authentication is required, then sslRequired must be true (i.e., credentials are not allowed to be sent over an insecure connection).

Deephaven recommends using passphrase files rather than passphrases. The passphrase file must be protected against reading by non-privileged operating system users.

Note

Do not change the following property, as it is essential for workers to function, even if the web server is not enabled.

RemoteQueryDispatcher.websocket.enabled=true

Other dispatcher properties

Property NameDescriptionDefault
RemoteQueryDispatcher.shutdownGracePeriodMSOptional; when set, the dispatcher should try to terminate all workers and wait up to a specified timeout to accumulate logs before going down when possible. If it is not set then the dispatcher tells the workers to terminate but does not wait for the results.None
RemoteQueryDispatcherParameters.nameAn optional name used for display and log purposes.
RemoteQueryDispatcherParameters.hostThe default dispatcher host to which clients will attempt to connect.8084
RemoteQueryDispatcher.maxConcurrentStartupsThe number of workers that a dispatcher will start concurrently.10
RemoteQueryDispatcher.pushClassGroupsDefines the groups that are allowed to push classes to a server.*
RemoteQueryDispatcher.adminGroupsDefines the groups that are allowed to perform administrative dispatcher functions such as terminating workers.iris-superusers

Note

Be cautious when modifying RemoteQueryDispatcher.maxConcurrentStartups. Starting workers consumes significant system resources, so thoroughly test any increases to this value. On some servers, higher system utilization can lead to worker startup timeouts.

The dispatcher can be configured to start workers either on a local (bare-metal or VM) server or with Kubernetes pods by using the RemoteQueryDispatcher.workerControlType property. This option is automatically configured by the installer so it should not be updated; it is shown here for reference only.

The values allowed for this property are:

  • LocalProcess - the dispatcher starts a new process on its server using local scripts. This is the default value.
  • Kubernetes - the dispatcher uses Kubernetes control to start a new pod for each worker.

Here is the default on a Kubernetes installation.

RemoteQueryDispatcher.workerControlType=Kubernetes