This page describes how to recover or restore Cassandra in multiple regions.
In a multi-region deployment, Apigee hybrid is deployed in multiple geographic locations across
different datacenters. If one or more regions fail, but healthy regions remain, you can use a healthy region to recover
failed Cassandra regions with the latest data.
In the event of a catastrophic failure of all hybrid regions, Cassandra can be restored.
It is important to note that, if you have multiple Apigee organizations in your deployment,
the restore process restores data for all the organizations. In a multi-organization setup,
restoring only a specific organization is not supported.
This topic describes both approaches to salvaging failed region(s):
Recover failed region(s) - Describes the steps to recover failed region(s) based
on a healthy region.
Restore failed region(s) - Describes the steps to restore failed region(s) from
a backup. This approach is only required if all hybrid regions are impacted.
Recover failed region(s)
To recover failed region(s) from a healthy region, perform the following steps:
Redirect the API traffic from the impacted region(s) to the good working region. Plan
the capacity accordingly to support the diverted traffic from failed region(s).
Decommission the impacted region. For each impacted region, follow the steps outlined
in Decommission a hybrid region. Wait for decommissioning to complete before moving
on to the next step.
The Cassandra backup can either reside on Cloud Storage or on a remote server based on your configuration.
To restore Cassandra from a backup, perform the following steps:
Open the overrides file for the region you wish to restore.
APIGEE_JMX_USER is the username for the Cassandra JMX operations user. Used
to authenticate and communicate with the Cassandra JMX interface. See
cassandra:auth:jmx:username.
APIGEE_DDL_USER and APIGEE_DDL_PASSWORD are the admin
username and password for the Cassandra Data Definition Language (DDL) user. The
default values are "ddl_user" and "iloveapis123".
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-29 UTC."],[[["\u003cp\u003eThis document outlines two primary methods for addressing Cassandra failures in multi-region Apigee hybrid deployments: recovering from a healthy region or restoring from a backup.\u003c/p\u003e\n"],["\u003cp\u003eIf one or more regions fail, the process to recover failed regions involves redirecting API traffic to a healthy region, decommissioning the failed region(s), and then creating and restoring a new region.\u003c/p\u003e\n"],["\u003cp\u003eIn the event of total regional failure, all organizations' data is restored simultaneously by way of the restore from backup method, which does not allow for the restore of a specific organization.\u003c/p\u003e\n"],["\u003cp\u003eThe restoration process requires ensuring that \u003ccode\u003ecassandra:hostNetwork\u003c/code\u003e is set to \u003ccode\u003efalse\u003c/code\u003e in the overrides file before deleting the hybrid data from the region being restored and proceeding with the restoration steps.\u003c/p\u003e\n"],["\u003cp\u003eRestoring the data includes updating keyspace metadata and replication settings using the Cassandra Query Language (CQL) interface, along with a reference to a variety of commands and information needed.\u003c/p\u003e\n"]]],[],null,["# Restoring in multiple regions\n\n| You are currently viewing version 1.14 of the Apigee hybrid documentation. For more information, see [Supported versions](/apigee/docs/hybrid/supported-platforms#supported-versions).\n\nThis page describes how to *recover* or *restore* Cassandra in multiple regions.\n\nIn a multi-region deployment, Apigee hybrid is deployed in multiple geographic locations across\ndifferent datacenters. If one or more regions fail, but healthy regions remain, you can use a healthy region to *recover*\nfailed Cassandra regions with the latest data.\n\n\nIn the event of a catastrophic failure of all hybrid regions, Cassandra can be *restored* .\nIt is important to note that, if you have multiple Apigee organizations in your deployment,\nthe restore process restores data for **all** the organizations. In a multi-organization setup,\nrestoring only a specific organization is **not** supported.\n\nThis topic describes both approaches to salvaging failed region(s):\n\n- [Recover failed region(s)](#recover-failed-region) - Describes the steps to recover failed region(s) based on a healthy region.\n- [Restore failed region(s)](#restore-nongcs) - Describes the steps to restore failed region(s) from a backup. This approach is only required if *all* hybrid regions are impacted.\n\nRecover failed region(s)\n------------------------\n\nTo recover failed region(s) from a healthy region, perform the following steps:\n\n1. Redirect the API traffic from the impacted region(s) to the good working region. Plan the capacity accordingly to support the diverted traffic from failed region(s).\n2. Decommission the impacted region. For each impacted region, follow the steps outlined in [Decommission a hybrid region](/apigee/docs/hybrid/v1.14/decommission-region). Wait for decommissioning to complete before moving on to the next step.\n\n \u003cbr /\u003e\n\n3. Restore the impacted region. To restore, create a new region, as described in [Multi-region deployment on GKE, GKE on-prem, and AKS](/apigee/docs/hybrid/v1.14/multi-region).\n\nRestoring from a backup\n-----------------------\n\n| **Note** : If you want to preserve an existing setup for troubleshooting and root cause analysis (RCA), you should delete all the `org` and `env` components from the Kubernetes cluster *except* the Apigee controller, and retain the cluster. The cluster will contain the existing Apigee datastore (Cassandra) which you can use for troubleshooting. Create a new Kubernetes cluster and then restore Cassandra in the new cluster.\n\nThe Cassandra backup can either reside on Cloud Storage or on a remote server based on your configuration.\nTo restore Cassandra from a backup, perform the following steps:\n| **Important:** If you installed Apigee hybrid into multiple regions, you must check the overrides file for the region you are restoring to make sure the `cassandra:hostNetwork` is set to `false` before you perform the restoration. To check the `hostNetwork` setting in the region you are trying to restore, use this command: \n|\n| ```\n| kubectl -n APIGEE_NAMESPACE get apigeeds -o=jsonpath='{.items[].spec.components.cassandra.hostNetwork}'\n| ```\n\n1. Open the overrides file for the region you wish to restore.\n2. Set `cassandra:hostNetwork` to `false`.\n3. Apply the overrides file: \n\n ```\n helm upgrade datastore apigee-datastore/ \\\n --install \\\n --namespace APIGEE_NAMESPACE \\\n -f OVERRIDES_FILE\n ```\n4. Before continuing, check to make sure the `hostNetwork` is set to `false`: \n\n ```\n kubectl -n APIGEE_NAMESPACE get apigeeds -o=jsonpath='{.items[].spec.components.cassandra.hostNetwork}'\n ```\n5. Delete hybrid from the region you are restoring: \n\n ```\n helm delete DATASTORE_RELEASE_NAME \\\n --namespace APIGEE_NAMESPACE\n ```\n\n Where \u003cvar translate=\"no\"\u003eDATASTORE_RELEASE_NAME\u003c/var\u003e is the release name of the datastore you\n installed Cassandra in the region, for example `datastore-region1`.\n | **Note:** Be careful which release of the datastore component you delete. You can see your releases with the command `helm -n `\u003cvar translate=\"no\"\u003eAPIGEE_NAMESPACE\u003c/var\u003e` ls`.\n6. Restore the desired region from a backup. For more information,\n see [Restoring a region from a backup](/apigee/docs/hybrid/v1.14/restore-cassandra-single-region#restore-gcs).\n\n7. Remove the deleted region(s) references and add the restored region(s) references in the `KeySpaces` metadata.\n8. Get the cassandra datacenter name by using the `nodetool status` option. \n\n ```\n kubectl exec -n APIGEE_NAMESPACE -it apigee-cassandra-default-0 -- bash\n nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status |grep -i Datacenter\n ```\n\n where:\n - \u003cvar translate=\"no\"\u003eAPIGEE_JMX_USER\u003c/var\u003e is the username for the Cassandra JMX operations user. Used to authenticate and communicate with the Cassandra JMX interface. See [`cassandra:auth:jmx:username`](/apigee/docs/hybrid/v1.14/config-prop-ref#cassandra-auth-jmx-username).\n - \u003cvar translate=\"no\"\u003eAPIGEE_JMX_PASSWORD\u003c/var\u003e is the password for the Cassandra JMX operations user. See [`cassandra:auth:jmx:password`](/apigee/docs/hybrid/v1.14/config-prop-ref#cassandra-auth-jmx-password).\n9. Update the `KeySpaces` replication.\n 1. [Create a client container](/apigee/docs/api-platform/troubleshoot/playbooks/cassandra/ts-cassandra#create-a-client-container-for-debugging) and connect to the Cassandra cluster through the CQL interface.\n 2. Get the list of user keyspaces from CQL interface: \n\n ```\n cqlsh CASSANDRA_SEED_HOST -u APIGEE_DDL_USER -p APIGEE_DDL_PASSWORD\n --ssl -e \"select keyspace_name from system_schema.keyspaces;\"|grep -v system\n ```\n\n where:\n - \u003cvar translate=\"no\"\u003eCASSANDRA_SEED_HOST\u003c/var\u003e is the Cassandra multi-region seed host. For most multi-region installations, use the IP address of a host in your first region. See [Configure Apigee\n hybrid for multi-region](/apigee/docs/hybrid/v1.14/multi-region#configure-apigee-hybrid-for-multi-region) and [`cassandra:externalSeedHost`](/apigee/docs/hybrid/v1.14/config-prop-ref#cassandra-externalseedhost).\n - \u003cvar translate=\"no\"\u003eAPIGEE_DDL_USER\u003c/var\u003e and \u003cvar translate=\"no\"\u003eAPIGEE_DDL_PASSWORD\u003c/var\u003e are the admin username and password for the Cassandra Data Definition Language (DDL) user. The default values are \"`ddl_user`\" and \"`iloveapis123`\". You can check the DDL username and password by checking the value stored in the `apigee-datastore-default-creds`secret. You must have admin privileges to check this secret. The following command will return base-64 encoded values for the DDL username and password: \n |\n | ```\n | kubectl get secret apigee-datastore-default-creds -n APIGEE_NAMESPACE -o yaml\n | ```\n\n\n See [`cassandra.auth.ddl.password`](/apigee/docs/hybrid/v1.14/config-prop-ref#cassandra-auth.ddl.password)\n in the Configuration properties reference and\n [Command\n Line Options](https://cassandra.apache.org/doc/4.1/cassandra/tools/cqlsh.html#command-line-options) in the Apache Cassandra cqlsh documentation.\n 3. For each keyspace, run the following command from the CQL interface to update the replication settings: \n\n ```\n ALTER KEYSPACE KEYSPACE_NAME WITH replication = {'class': 'NetworkTopologyStrategy', 'DATACENTER_NAME':3};\n ```\n\n where:\n - \u003cvar translate=\"no\"\u003eKEYSPACE_NAME\u003c/var\u003e is the name of the keyspace listed in the previous step's output.\n - \u003cvar translate=\"no\"\u003eDATACENTER_NAME\u003c/var\u003e is name of the Cassandra datacenter you obtained with the `nodetool status` option in step 8."]]