There are a number of system, process, and application options that can impact the performance or behavior of your VoltDB database. You can control some of these options when starting VoltDB. Some of the most important, such as sites per host and K-safety, are described in detail in the Using VoltDB manual. Other aspects of the server and process configuration can also impact database performance and reliability.
The various configuration options fall into five main categories:
Network ports used by the database cluster
This appendix describes each of the configuration options, how to set them, and their impact on the resulting VoltDB database and application environment.
VoltDB provides mechanisms for setting a number of options. However, it also relies on the base operating system and network infrastructure for many of its core functions. There are operating system configuration options that you can adjust to to maximize your performance and reliability, including:
VoltDB creates a network mesh among the database cluster nodes. To do that, all nodes must be able to resolve the IP address and hostnames of the other server nodes. Make sure all nodes of the cluster have valid DNS entries or entries in the local hosts files.
For servers that have two or more network interfaces — and consequently two or more IP addresses — it is possible to assign different functions to each interface. VoltDB defines two sets of ports:
External ports, including the client and admin ports. These are the ports used by external applications to connect to and communicate with the database.
Internal ports, including all other ports. These are the ports used by the database nodes to communicate among themselves. These include the internal port, the zookeeper port, and so on. (See Section A.5, “Network Ports”for a complete listing of ports.)
You can specify which network interface the server expects to use for each set of ports by specifying the internal and external interface when starting the database. When using the VoltDB community edition, use the internalinterface and externalinterface arguments on the command line. For example:
$ voltdb create deployment deployment.xml \ catalog catalog.jar host serverA \ license license.xml \ externalinterface 10.11.169.10 \ internalinterface 10.12.171.14
When using the REST API the internal and external interfaces are defined as part of the server resource.
Keeping VoltDB cluster nodes in close synchronization is important for the ongoing performance of your database. At a minimum, use of NTP to synchronize time across the cluster is recommended. If the time difference between nodes is too large (greater than three seconds) VoltDB refuses to start. It is also important to avoid having nodes adjust time backwards, or VoltDB will pause while it waits for time to "catch up" to its previous setting.