A VoltDB cluster opens network ports to manage its own operation and to provide services to client applications. When using the command line, the network ports are configurable as part of the command that starts the VoltDB database process or through the deployment file. When specifying a port on the command line, you can specify just a port number or the network interface and the port number, separated by a colon.
Table A.1, “VoltDB Port Usage” summarizes the ports that VoltDB uses, their default value, and how to change the default. The following sections describe each port in more detail.
Table A.1. VoltDB Port Usage
|Port||Default Value||Where to Set (Community Edition)|
|Client Port||21212||VoltDB command line|
|Admin Port||21211||VoltDB command line or deployment file|
|Web Interface Port (httpd)||8080||VoltDB command line or deployment file|
|Internal Server Port||3021||VoltDB command line|
|JMX Port||9090||VoltDB command line|
|Replication Port||5555||VoltDB command line|
|Zookeeper port||7181||VoltDB command line|
The client port is the port VoltDB client applications use to communicate with the database cluster nodes. By default, VoltDB uses port 21212 as the client port. You can change the client port. However, all client applications must then use the specified port when creating connections to the cluster nodes.
To specify a different client port on the command line, use the
--client flag when starting the
VoltDB database. For example, the following command starts the database using port 12345 as the client
$ voltdb create -l ~/license.xml \ -d deployment.xml -H serverA \ --client=12345
If you change the default client port, all client applications must also connect to the new port. The client interfaces for Java and C++ accept an additional, optional argument to the createConnection method for this purpose. The following examples demonstrate how to connect to an alternate port using the Java and C++ client interfaces.
org.voltdb.client.Client voltclient; voltclient = ClientFactory.createClient(); voltclient.createConnection("myserver",12345);
boost::shared_ptr<voltdb::Client> client = voltdb::Client::create(); client->createConnection("myserver", 12345);
The admin port is similar to the client port, it accepts and processes requests from applications. However, the admin port has the special feature that it continues to accept write requests when the database enters admin, or read-only, mode.
By default, VoltDB uses port 21211 on the default external network interface as the admin port. You can change the
port assignment in the deployment file using the <admin-mode> tag or on the command line using the
--admin flag. For example, the following deployment file sets the admin port to 2222:
<deployment> ... <admin-mode port="2222" /> </deployment>
The same effect can be achieved using the --admin flag on the command line:
$ voltdb create -l ~/license.xml \ -d deployment.xml -H serverA \ --admin=2222
When the admin port is set in both the deployment file and on the command line, the command line setting supersedes the deployment file.
The web interface port is the port that VoltDB listens to for web-based connections. This port is used for both the
JSON interface and access to the VoltDB Management Center. There are two related attributes associated with the web
interface. The first attribute is whether the port is enabled. If the port is not enabled, then neither the JSON interface
nor the Management Center are available from the cluster. The second attribute is which port to use. (Note that you can
also use the
--http flag on the command line to set the httpd port.) By default, the web interface is
enabled and the default port is 8080.
In addition to the overall availability and port for the web interface, you can also specify separately whether
the JSON interface is available. To enable the httpd port but disable the JSON interface, specify the attribute
enabled="false" in the
<jsonapi> tag in the deployment file
when starting VoltDB. For example, the following deployment file fragment enables the web interface and the JSON
interface, specifying the alternate port 8083.
<httpd port="8083"> <jsonapi enabled="true"/> </httpd>
If you change the port number, be sure to use the new port number when connecting to the cluster using the JSON interface. For example, the following URL connects to the port 8083, instead of 8080:
You can also choose whether to use the basic HTTP protocol for the web interface (the default) or use SSL encryption via the HTTPS protocol. To enable SSL encryption you need an appropriate SSL certificate, which VoltDB accesses through a Java key store and trust store. You enable SSL encryption in the deployment file using the <https> child element of the <httpd> element. Within <https> you specify the location and password for the key store and, optionally, trust store in separate elements like so:
<httpd> <https enabled="true"> <keystore path="/etc/mydb/keystore" password="twiddledee"/> <truststore path="/etc/mydb/truststore" password="twiddledum"/> </https> </httpd>
You can specify the passwords as plain text or as a hash. You can use the Jetty libraries included with VoltDB to hash the password. For example, if VoltDB is installed in the directory ~/voltdb, you can create an obfuscated version of "twiddledee" with the following command:
$ java -cp $HOME/voltdb/lib/jetty-util*.jar \ org.eclipse.jetty.util.security.Password twiddledee
A VoltDB cluster uses ports to communicate among the cluster nodes. This port is internal to VoltDB and should not be used by other applications.
By default, the internal server port is port 3021 for all nodes in the cluster. You can specify an alternate port using the
--internal flag when starting the VoltDB
process. For example, the following command starts the VoltDB process using an internal port of 4000:
$ voltdb create -l ~/license.xml \ -d deployment.xml -H serverA \ --internal=4000
The use of JMX by the VoltDB Enterprise Edition is deprecated. The port is still available in the short-term for any users who may have used this feature in the past and need to migrate to one of the supported monitoring solutions described in Chapter 6, Monitoring VoltDB Databases. The JMX port will be shut off in a future release.
In the meantime, the default JMX port is 9090. You can change the port number used by JMX by adding the Java argument -Dvolt.rmi.agent.port to the command line. You do that by defining the environment variable VOLTDB_OPTS before starting the server. For example, the following command assigns the JMX port to port number 2345:
$ export VOLTDB_OPTS="-Dvolt.rmi.agent.port=2345"
There is no JMX port when using the VoltDB Community Edition.
During database replication, the replica uses a dedicated port to connect to the master database. By default, the replication port is port 5555. You can use a different port by specifying a different port number either on the voltdb command line or in the deployment file.
On the command line, use the
--replication flag to specify a different port (and, optionally,
a different network interface):
$ voltdb create -l ~/license.xml \ -d deployment.xml -H serverA \ --replication=6666
In the deployment file, specify the replication port number using the
attribute of the
<dr id="3" port="6666" />
Adding the replication port to the deployment file is useful when setting the port for all nodes in the cluster. Using the command line option is useful for changing the default port for only one node in the cluster or for specifying a specific network interface. If you specify the replication port in both the deployment file and on the command line, the command line argument takes precedence.
VoltDB uses a version of Apache Zookeeper to communicate among supplementary functions that require coordination but are not directly tied to database transactions. Zookeeper provides reliable synchronization for functions such as command logging without interfering with the database's own internal communications.
VoltDB uses a network port bound to the local interface (127.0.0.1) to interact with Zookeeper. By default, 7181 is
assigned as the Zookeeper port for VoltDB. You can specify a different port number using the
--zookeeper flag when starting the VoltDB process. It is also possible to specify a different network
interface, like with other ports. However, accepting the default for the zookeeper network interface is recommended where
possible. For example:
$ voltdb create -l ~/license.xml \ -d deployment.xml -H serverA \ --zookeeper=2288
 In the special circumstance where multiple VoltDB processes are started for one database, all on the same server, the internal server port is incremented from the initial value for each process.