= Configuring Cassandra

The `Cassandra` configuration files location varies, depending on the
type of installation:

* docker: `/etc/cassandra` directory
* tarball: `conf` directory within the tarball install location
* package: `/etc/cassandra` directory

Cassandra's default configuration file, `cassandra.yaml`, is sufficient
to explore a simple single-node `cluster`. However, anything beyond
running a single-node cluster locally requires additional configuration
to various Cassandra configuration files. Some examples that require
non-default configuration are deploying a multi-node cluster or using
clients that are not running on a cluster node.

* `cassandra.yaml`: the main configuration file for Cassandra, it contains sensitive settings and therefore should not be accessed or modified by untrusted users
* `cassandra-env.sh`: environment variables can be set
* `cassandra-rackdc.properties` OR `cassandra-topology.properties`: set
rack and datacenter information for a cluster
* `logback.xml`: logging configuration including logging levels
* `jvm-*`: a number of JVM configuration files for both the server and
clients
* `commitlog_archiving.properties`: set archiving parameters for the
`commitlog`

Two sample configuration files can also be found in `./conf`:

* `metrics-reporter-config-sample.yaml`: configuring what the
metrics-report will collect
* `cqlshrc.sample`: how the CQL shell, cqlsh, can be configured

== Main runtime properties

Configuring Cassandra is done by setting yaml properties in the
`cassandra.yaml` file. At a minimum you should consider setting the
following properties:

* `cluster_name`: Set the name of your cluster.
* `seeds`: A comma separated list of the IP addresses of your cluster
`seed nodes`.
* `storage_port`: Check that you don't have the default port of 7000
blocked by a firewall.
* `listen_address`: The `listen address` is the IP address of a node
that allows it to communicate with other nodes in the cluster. Set to
[.title-ref]#localhost# by default. Alternatively, you can set
`listen_interface` to tell Cassandra which interface to use, and
consecutively which address to use. Set one property, not both.
* `native_transport_port`: Check that you don't have the default port of
9042 blocked by a firewall, so that clients like cqlsh can communicate
with Cassandra on this port.

== Changing the location of directories

The following yaml properties control the location of directories:

* `data_file_directories`: One or more directories where data files,
like `SSTables` are located.
* `commitlog_directory`: The directory where commitlog files are
located.
* `saved_caches_directory`: The directory where saved caches are
located.
* `hints_directory`: The directory where `hints` are located.

For performance reasons, if you have multiple disks, consider putting
commitlog and data files on different disks.

== Environment variables

JVM-level settings such as heap size can be set in `cassandra-env.sh`.
You can add any additional JVM command line argument to the `JVM_OPTS`
environment variable; when Cassandra starts, these arguments will be
passed to the JVM.

== Logging

The default logger is [.title-ref]#logback#. By default it will log:

* *INFO* level in `system.log`
* *DEBUG* level in `debug.log`

When running in the foreground, it will also log at INFO level to the
console. You can change logging properties by editing `logback.xml` or
by running the [.title-ref]#nodetool setlogginglevel# command.
