The fundamental operations for database administration are starting and stopping the database. But before you start the database, you need to decide what database features you want to enable and how they should work. These features include the initial size of the cluster, what amount of replication you want to use to increase availability in case of server failure, and what level of durability is required for those cases where the database itself stops. These and other settings are defined in the deployment file, which you specify on the command line when you start the server.
This chapter explains how to configure the cluster's physical structure and features in the deployment file and how to start and stop the database.
You specify the cluster configuration and what features to use in the deployment file, which is an XML file that you can create and edit manually. In the simplest case, the deployment file specifies how many servers the cluster has initially, how many partitions to create on each server, and what level of availability (K-safety) to use. For example:
<?xml version="1.0"?> <deployment> <cluster hostcount="5" sitesperhost="4" kfactor="1" /> </deployment>
hostcount attribute specifies the number of servers the cluster will
sitesperhost attribute specifies the number of partitions (or "sites") to
create on each server. Set to eight by default, it is possible to optimize the number of sites per host in relation to
the number of processors per machine. The optimal number is best determined by performance testing against the expected
workload. See the chapter on "Benchmarking"
in the VoltDB Planning Guide for
kfactor attribute specifies the K-safety value to use. The higher the
K-safety value, the more node failures the cluster can withstand without affecting database availability. However,
increasing the K-safety value increases the number of copies of each unique partition. High availability is a tradeoff
between replication to protect against node failure and the number of unique partitions, therefore throughput
performance. See the chapter on availability in
the Using VoltDB manual for more
information on determining an optimal K-safety value.
In addition to the cluster configuration, you can use the deployment file to enable and configure specific database features such as export, command logging, and so on. The following table summarizes some of the key features that are settable in the deployment file.
Table 3.1. Configuring Database Features in the Deployment File
|Command Logging — Command logging provides durability by logging transactions to disk so they can be replayed during a recovery. You can configure the type of command logging (synchronous or asynchronous), the log file size, and the frequency of the logs (in terms of milliseconds or number of transactions).|
<commandlog enabled="true" synchronous="false"> <frequency time="300" transactions="1000"/> </commandlog>
|Snapshots — Automatic snapshot provide another form of durability by creating snapshots of the database contents, that can be restored later. You can configure the frequency of the snapshots, the unique file prefix, and how many snapshots are kept at any given time.|
<snapshot enabled="true" frequency="30m" prefix="mydb" retain="3" />
|Export — Export allows you to write selected records from the database to an external target, which can be files, another database, or another service. VoltDB provides different export connectors for different targets and protocols. You can configure the type of export as well as other properties, which are specific to each target type. For example, the file target requires a specific type (or format) for the files and a unique identifier called a "nonce".|
<export enabled="true" target="file"> <configuration> <property name="type">csv</property> <property name="nonce">mydb</property> </configuration> </export>
|Security & Accounts — Security lets you protect your database against unwanted access by requiring all connections authenticate against known usernames and passwords. In the deployment file you can define the user accounts and passwords and what role or roles each user fulfills. Roles define what permissions the account has. Roles are defined in the database schema.|
<security enabled="true"/> <users> <user name="admin" password="superman" roles="dev,ops"/> <user name="mitty" password="thurber" roles="user"/> </users>
|File Paths — Paths define where VoltDB writes any files or other disc-based content. You can configure the default root for all files as well as specific paths for each type of service, such as snapshots, command logs, export overflow, etc.|
<paths> <voltdbroot path="/tmp/vroot" /> <snapshots path="/opt/archive" /> </paths>