Adding a datacenter to a cluster
Steps for adding a datacenter to an existing cluster.
Steps for adding a datacenter to an existing cluster.
Cassandra package installations | /etc/cassandra/cassandra.yaml |
Cassandra tarball installations | install_location/cassandra/conf/cassandra.yaml |
Prerequisites
- Decommission each node that will be added to the new datacenter. See Removing a node.
- Completely remove the application directories. See Clearing the data as a stand-alone process or Clearing the data as a service.
- After removal, install Cassandra from scratch.
Procedure
-
To prevent the client from prematurely connecting to the new datacenter and to
ensure that the consistency level for
reads or writes does not query the new datacenter:
-
Make sure that the clients are configured to use the
DCAwareRoundRobinPolicy
. - Make sure that the clients point to an existing datacenter, so they don't try to access the new datacenter, which may not have any data.
-
If using a
QUORUM
consistency level, change toLOCAL_QUORUM
. -
If using the
ONE
consistency level, set toLOCAL_ONE
.
See the programming instructions for your driver.
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. -
Make sure that the clients are configured to use the
-
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.
- Start Cassandra on one node on each rack.
- Rotate starting Cassandra through the racks until all the nodes are up.
-
After all nodes are running in the cluster and the client applications are
datacenter aware (1), 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
Cassandra package installations | /etc/cassandra/cassandra.yaml |
Cassandra tarball installations | install_location/cassandra/conf/cassandra.yaml |