Adding a datacenter to a cluster
Steps for adding a datacenter to an existing cluster.
Steps for adding a datacenter to an existing cluster.
Package installations | /etc/cassandra/cassandra.yaml |
Tarball installations | install_location/resources/cassandra/conf/cassandra.yaml |
Procedure
-
Ensure that old data files won't interfere with the new cluster:
- Remove any existing (running) nodes in a different cluster or datacenter first that contain old data.
- Properly clean these nodes.
- Completely remove the application directories (recommended).
- After removal, install Cassandra from scratch.
-
Configure the keyspace and create the new datacenter:
-
In the new datacenter, install Cassandra on each new node. Do not start the
service or restart the node.
Be sure to use the same version of Cassandra on all nodes in the cluster.
-
Configure cassandra.yaml on each new node
following the configuration of the other nodes in the cluster:
-
On each new node, add the new datacenter definition to the properties file for
the type of snitches used in the
cluster:
Note: Do not use the SimpleSnitch. The SimpleSnitch (default) is used only for single-datacenter deployments. It does not recognize datacenter or rack information and can be used only for single-datacenter deployments or single-zone in public clouds.
Table 1. Configuration file per snitch Snitch Configuring file PropertyFileSnitch cassandra-topology.properties GossipPropertyFileSnitch cassandra-rackdc.properties Ec2Snitch Ec2MultiRegionSnitch GoogleCloudSnitch -
In the existing datacenters:
- On some nodes, update the seeds property in the cassandra.yaml file to include the seed nodes in the new datacenter and restart those nodes. (Changes to the cassandra.yaml file require restarting to take effect.)
- Add the new datacenter definition to the properties file for the type of snitch used in the cluster (5). If changing snitches, see Switching snitches.
-
To avoid the client prematurely connecting to the new datacenter:
-
Make sure the clients are configured to use the
DCAwareRoundRobinPolicy
. - Be sure that your client point to the existing datacenter, so it's not trying to access the new datacenter, which may not have any data.
See the programming instructions for your driver.
-
Make sure the clients are configured to use the
-
To ensure you are not using a consistency level for reads or writes that
queries the new datacenter, review the consistency level for global or per-operation level for multiple
datacenter operation:
-
If using a
QUORUM
consistency level, change toLOCAL_QUORUM
. -
If using the
ONE
consistency level, set toLOCAL_ONE
.
Warning: If client applications are not properly configured, they may connect to the new datacenter before the datacenter is ready. This results in connection exceptions, timeouts, and/or inconsistent data. -
If using a
- Start Cassandra on the new nodes.
-
After all nodes are running in the cluster and the client applications are
datacenter aware (7), use cqlsh to alter the keyspaces:
ALTER KEYSPACE "sample-ks" WITH REPLICATION = {'class’: 'NetworkTopologyStrategy', 'ExistingDC':3, 'NewDC':3};
Warning: If client applications are not properly configured, they may connect to the new datacenter before the datacenter is ready. This results in connection exceptions, timeouts, and/or inconsistent data. -
Run nodetool
rebuild on each node in the new datacenter.
$ nodetool rebuild -- name_of_existing_data_center
CAUTION: If you don't specify the existing datacenter in the command line, the new nodes will appear to rebuild successfully, but will not contain any data.If you miss this step, requests to the new datacenter with LOCAL_ONE or ONE consistency levels may fail if the existing datacenters are not completely in-sync.
This step ensures that the new nodes recognize the existing datacenters in the cluster.
You can run rebuild on one or more nodes at the same time. Run on one node at a time to reduce the impact on the existing cluster. Run on multiple nodes when the cluster can handle the extra I/O and network pressure.
Results
Package installations | /etc/cassandra/cassandra.yaml |
Tarball installations | install_location/resources/cassandra/conf/cassandra.yaml |