Upgrade to DSE 3.2

Improper upgrades can result in downtime, data loss, and other errors.

To minimize risk for an upgrade, review the entire upgrade guide before you begin, including warnings, restrictions, release notes, and all pre-upgrade, upgrade, and post-upgrade steps.

You must prepare all nodes in the cluster before upgrading any nodes. Failure to prepare all nodes can result in mismatched configurations, repair states, and schemas that can disrupt the upgrade process.

Follow these instructions to manually upgrade from an earlier version of DataStax Enterprise (DSE) to version 3.2.

Upgrade path

The following versions can upgrade directly to DSE 3.2:

  • DSE 2.2.2 through 3.1.

  • DataStax Community or open source Apache Cassandra® 1.1.9

  • DataStax Community or open source Apache Cassandra 1.2.9 through 1.2.15

To get your current version, run dse -v.

If your current version isn’t eligible for direct upgrade, you must upgrade to one of those versions before upgrading to 3.2. For assistance, contact IBM Support.

Avoid certain operations during the upgrade

The upgrade process for DSE can be completed with minimal downtime (ideally zero) by upgrading nodes in a rolling fashion: upgrade and restart one node at a time while the other nodes continue to operate.

The moment that you install the new version on one node in a cluster, the cluster enters a partially upgraded state. In this state, the cluster continues to operate as though all nodes are running the earlier, pre-upgraded version. The cluster remains in this state until you have upgraded all nodes in the cluster.

You must avoid or block the following operations during the upgrade to maintain cluster stability and prevent errors:

  • Don’t enable new features.

    This restriction includes net new features and existing features that you weren’t using previously. For example, don’t enable Change Data Capture (CDC) for the first time during an upgrade. Upgrade the entire cluster, and then enable the feature.

  • Don’t change credentials, permissions, or any other security settings unless explicitly instructed to do so.

    To preserve your existing configuration, you will transfer your existing security settings from your current configuration files to the new configuration files during the upgrade process. The new files might use different settings due to enhancements, deprecations, and removals between versions. This mapping is required for a successful upgrade, and it isn’t the same as an extraneous change to the security configuration.

    Examples of security changes to avoid include modifications to authenticators, authorizers, CQL roles, and CQL permissions. Postpone all such changes until after the upgrade.

    If you aren’t already using Kerberos, don’t set up Kerberos authentication immediately before upgrading. First upgrade the cluster, and then set up Kerberos. If you are already using Kerberos, you can continue to use it during the upgrade.

  • Don’t run repairs manually or automatically:

    • Disable all automated and scheduled repairs, including Reaper, crontab, and scripts that run nodetool repair.

    • Don’t manually run commands like nodetool repair.

    • Don’t repair SSTables while the cluster is in a partially upgraded state. Only repair SSTables before and after upgrading the entire cluster.

    You must complete the cluster-wide upgrade before the expiration of gc_grace_seconds (approximately 10 days by default) to ensure any post-upgrade repairs complete successfully.

    Attempting to run repairs on partially upgraded clusters can cause performance issues, data inconsistencies, and repair failures. If you absolutely must run repairs on a partially upgraded cluster, determine which SSTable formats and streaming protocols are supported on each node, and then thoroughly test your intended repair operation on an isolated non-production cluster. Small incremental repairs are less risky but they aren’t risk free.

  • Don’t add (bootstrap) new nodes or decommission existing nodes.

  • Don’t issue DDL-related queries like TRUNCATE.

    Depending on your infrastructure, workloads, and consistency levels, you might want to avoid other operations that could require excessive resources or coordination across mixed-version nodes. For example, BATCH operations can be resource intensive.

  • Don’t alter any schemas.

    Schema versions must be consistent across the cluster before starting the upgrade.

    Propagation of schema changes between mixed-version nodes can cause query failures, data consistency issues, and other errors. Take action to prevent schema changes from occurring during the upgrade process.

    During the upgrade, it is normal for nodes on different versions to show schema disagreements. These disagreements should resolve after the entire cluster is upgraded.

  • Don’t rebuild indexes during the upgrade.

  • Disable services that can cause data inconsistencies and interfere with the upgrade process:

    • Disable backup services, scheduled backups, and automated snapshots.

  • If you disabled the Performance Service before the upgrade, don’t reenable it during the upgrade.

  • DSE Analytics nodes: Don’t run analytics jobs until all nodes are upgraded.

    When upgrading to a new major or minor version of DSE, all nodes in a DSE datacenter that run Spark must be on the same version of Spark, and the Spark jobs must be compiled for that version. To determine the Spark version, see the DSE release notes.

    Before reinitiating Spark jobs, all datacenters comprising a Spark cluster must be on the same upgraded DSE version. If any Spark jobs run against Graph keyspaces, don’t reinitiate Spark jobs until you have upgraded all Analytics and non-Analytics nodes in the entire cluster. When Graph keyspaces are involved, Spark jobs fail due to mixed Spark and DSE versions across all nodes.

  • Upgrades from 2.2 or 3.0: DSE 3.1 is based on Cassandra 1.2. Don’t issue any CQL 3 queries until all nodes are upgraded and schema disagreements are resolved.

  • Upgrades from 3.0 with DSE Analytics nodes: While the cluster is in a partially upgrade state, some column families created through Apache Hadoop® interfaces might appear to be empty. After the entire cluster is upgraded, the data becomes visible again.

Driver compatibility and live application traffic

Incompatible drivers and unspecified protocol versions can cause connection failures and other issues during the upgrade.

To maintain live application traffic throughout the upgrade process, your Cassandra driver must be compatible with your current installation and your target DSE version. Additionally, you must configure protocol version negotiation to ensure backwards compatibility throughout the upgrade.

Find a mutually compatible driver version

Verify that your current Cassandra driver version is compatible with your target DSE version. For available drivers and compatibility information, see Cassandra driver compatibility.

If your current driver version isn’t compatible with your target DSE version, upgrade your driver to a mutually compatible version.

When upgrading your driver, check your driver’s release notes for breaking changes that might require code changes. Review all release notes from your current driver version through the new version. Recompile your client application code, if needed.

No mutually compatible version exists

If there is no mutually compatible driver version, you have two options:

  • Intermediate upgrade (recommended): Determine if your upgrade path requires (or supports) an intermediate upgrade before proceeding to your target DSE version. Find driver versions that are compatible with each segment of the upgrade path (current to intermediate and intermediate to target), and then upgrade your driver before each segment.

  • Delayed upgrade: Upgrade to the latest driver version that is compatible with your current installation, and then plan to upgrade your driver again when your cluster is on your target DSE version. This can require code or configuration changes to accommodate the temporary driver version, such as changing authentication methods or avoiding unsupported query patterns. Consider testing this approach in an isolated environment to identify potential compatibility issues before applying it to your production environment.

Configure protocol negotiation

When a cluster is in a partially upgraded state, upgraded nodes might support different Cassandra native protocol versions than non-upgraded nodes. By default, a driver negotiates the protocol version with the first host (node) that it connects to. The driver might select a protocol version that works across all nodes, but this isn’t guaranteed if the driver connects to a random node each time. It is better to prevent protocol incompatibility in one of two ways:

  • Set protocol version: Set a mutually compatible protocol version explicitly in your application at start up. After you upgrade all nodes in the cluster, you can switch your applications to the latest supported protocol version.

  • Set initial contact points: Specify a list of initial contact points that contains only hosts with the oldest database platform version or mutually compatible protocol version. You must upgrade these nodes last.

For more information about protocol version negotiation, see your driver’s documentation.

DSE-only drivers are unsupported

All DSE-only drivers have reached end-of-life (EOL); they are unsupported and unmaintained. If your applications use DSE-only drivers, you must upgrade to a recent version of a supported driver.

For legacy applications that require DSE-only drivers, compatibility with your target DSE version might be limited or nonexistent. For example, newer DSE, Cassandra, and CQL features might not be supported by the driver, or queries that use deprecated data types, functions, or syntax might fail. Consider modernizing or sunsetting legacy applications if possible, particularly because EOL drivers don’t receive any updates, including security updates.

Although the DSE-only drivers are compatible with legacy applications that require DSE 3.2, if you intend to upgrade to DSE 5.1 or later, you will need to use a newer driver eventually.

Strict upgrade order for cluster stability

Don’t upgrade any nodes until you have completed the pre-upgrade steps on all nodes.

When upgrading nodes, always upgrade seed nodes before non-seed nodes.

To avoid cluster-wide downtime, you must upgrade and restart one node at a time in a specific order based on workload types and deployment architecture:

  1. For multi-cluster deployments, upgrade one cluster at a time.

  2. For multi-datacenter clusters, upgrade one datacenter at a time.

  3. If using racks, upgrade one rack at a time within a datacenter.

  4. Within a datacenter (or rack), upgrade one node at a time, starting with seed nodes.

  5. If using advanced workloads (Analytics, Graph, Search), upgrade datacenters or nodes according to the following workload type hierarchy.

    If each datacenter has only one workload type, upgrade your datacenters in the given order. Within each datacenter, proceed rack-by-rack (if applicable) and node-by-node, starting with the seed nodes.

    If a datacenter has multiple workload types, upgrade nodes within that datacenter in the given order, starting with the seed nodes. If using racks, apply the hierarchy to each rack.

    The workload type hierarchy is:

    1. Upgrade DSE Analytics datacenters:

      1. Upgrade the DSE Hadoop Job Tracker node.

      2. Upgrade Hadoop nodes.

      3. Upgrade Spark nodes.

    2. Upgrade transactional (Cassandra) and DSE Graph datacenters.

    3. Upgrade DSE Search datacenters.

  6. Repeat until you have upgraded all nodes in all racks, datacenters, and clusters.

Use an isolated deployment to test the upgrade.

For example, in multi-datacenter clusters with an active-passive configuration, you can complete the entire upgrade process (pre-upgrade, upgrade, and post-upgrade) on the passive datacenter first, run performance tests on that datacenter, and then upgrade the active datacenter if the tests are successful. If the tests fail, you can destroy the passive datacenter and rebuild it without impacting the active datacenter.

Similarly, if you have a test deployment with no connectivity to your production nodes, datacenters, or clusters, then you can safely perform the entire upgrade process in that isolated deployment before rolling out the upgrade to your production deployment.

Prepare to upgrade

Before upgrading any node, you must prepare all nodes for the upgrade. Complete the pre-upgrade steps on every node in the recommended order. Following the recommended order ensures that you don’t miss any nodes, although some steps aren’t applicable to every node.

Some pre-upgrade steps provide information about actions that you must take later in the upgrade process. This information is given in advance because it might impact your upgrade plan. Be sure to revisit these steps at the appropriate time.

  1. Upgrade to the latest patch release for your current version.

    Always upgrade to latest patch release for your current version before you upgrade to a new major or minor version. Patch releases help prepare your clusters for the upgrade by minimizing the differences between the current version and the target version.

    Get your current DSE version with dse -v, and then compare it with the latest version available for your DSE release series. You can find the latest version in the DSE release notes.

    If you need to apply a patch release, upgrade all nodes to the latest patch release before applying any further upgrades. Treat patch releases as you would any major or minor upgrade by carefully reviewing the release notes and following the recommended upgrade procedure.

  2. Familiarize yourself with the changes and features in the new release, reviewing all releases between your current version and the latest 3.2 patch release as well as Apache Cassandra changes.

  3. Check Java runtime compatibility and install a mutually supported Java runtime version if needed.

    For upgrades to DSE 3.2, install the latest build of Oracle Java SE JDK 7 (1.7.0_25 minimum), Oracle Java SE JDK 8 (1.8.0_40 minimum), or OpenJDK 7 (1.7.0_25 minimum). The JDK is recommended because it provides useful troubleshooting tools that are not in the JRE, such as jstack, jmap, jps, and jstat.

    1. Get your current Java version:

      java -version
    2. Make sure the output shows a supported Java runtime. If not, install a supported Java runtime.

      For example, if Oracle Java 7 is installed:

      java version "1.7.0_25"
      Java(TM) SE Runtime Environment (build 1.7.0_25-b15)
      Java HotSpot(TM) 64-Bit Server VM (build 24.25-b01, mixed mode)
    3. If your environment has multiple Java versions installed, set the $JAVA_HOME environment variable to Java 7.

    4. If you changed $JAVA_HOME, restart the node.

  4. Make sure each node has adequate free disk space for the upgrade.

    The required overhead depends on the compaction strategy. For more information, see Disk space.

    1. Get the size of the DSE data directory:

      sudo du -sh /var/lib/cassandra/data/
    2. Check available space on disk:

      sudo df -hT /

      The following output includes one disk named /dev/sda1. Your output depends on your disk configuration.

      Filesystem     Type  Size  Used Avail Use% Mounted on
      /dev/sda1      ext4   59G   16G   41G  28% /
    3. If necessary, make adjustments to your disks or data directory configuration to allow for more disk space.

  5. Upgrades from 2.2 or 3.0: If you use Kerberos, object permission management (internal authorization), or internal authentication, make sure the replication factor for the dse_auth keyspace is greater than 1:

    1. Adjust the replication strategy and relevant security options in cassandra.yaml.

    2. Adjust the replication factor for dse_auth on each node in the cluster.

    3. Restart each node.

    4. Run nodetool repair to repair the first range returned by the partitioner for the dse_auth keyspace:

      nodetool repair dse_auth -pr
  6. Upgrade all SSTables on all nodes.

    To avoid significant performance degradation and issues with incompatible SSTables formats, always upgrade SSTables before and after any database upgrade, including minor and patch releases.

    This process is recommended for all upgrades, and it is critical for upgrades that involve a major underlying Cassandra version change.

    On each node, run nodetool upgradesstables with the -a flag to ensure that all SSTables use the latest SSTable format and version for your current database version:

    nodetool upgradesstables -a

    DataStax recommends running the upgradesstables command on one node at a time or, when using racks, one rack at a time. Running the command on too many nodes at once can degrade performance.

    You can use the --jobs option to set the number of SSTables that upgrade simultaneously. The default setting is 2, which minimizes the impact on the cluster. Set to 0 to use all available compaction threads.

    If all SSTables are already on the latest version and format, the command returns immediately and takes no action.

  7. Run nodetool repair to ensure that data on each replica is consistent with data on other nodes:

    nodetool repair -pr

    Repair nodes on a regular basis to minimize the overhead and time required for repair operations.

  8. Back up all DSE data and files, and then store the backups separately from your existing DSE installation.

    Backup your existing installation before every upgrade, regardless of the extent of the upgrade.

    To avoid data loss, you must store your backup configuration files in a separate directory from your DSE installation. The new version overwrites configuration files that are present in the installation directory, replacing all existing values with new default values.

    Examples of data and files to back up include:

    • SSTable snapshots

    • Commit logs

    • Logs

    • Configuration files

    • Encrypted table recovery data:

      • A snapshot of the entire dse_system keyspace with the encrypted_keys table

      • All system keys

    Some backup files are used during the upgrade process to align the new version with the previous version, and a complete backup is required if you need to rollback to the previous version or restore lost data.

    If your upgrade requires significant pre-upgrade changes, consider creating a backup before making those changes and again immediately before upgrading the first node. Create the final backup as close to the beginning of your upgrade as possible to ensure your backup contains the most recent configuration files and data.

Upgrade steps

Upgrade one node at a time in the recommended order. Following the recommended order minimizes downtime and ensures that you don’t miss any nodes.

  1. Flush the commit log of the old installation:

    nodetool -h hostname drain

    This step saves time when nodes start up after the upgrade.

    This step is mandatory for upgrades that include a major Cassandra version change because the previous version’s commit logs are incompatible with the new version’s SSTable format.

  2. Stop the node.

  3. Install the new DSE version, but don’t start DSE.

    Don’t start DSE yet. Before restarting the node, you must reconfigure DSE as explained in the next steps.

    Use the same installation type as your current version. Mismatched installation types can cause problems with the upgrade.

  4. Configure the new DSE version by comparing the new configuration files to your backup configuration files.

    Specific modifications are described in the next steps. Additional changes depend on your workloads and previous configurations. For example:

    • Remove deprecated and removed settings.

    • Configure new settings.

    • Migrate previous custom configuration values to your new configuration files.

    • Modify previous configurations to account for changes described in the DSE release notes.

    You must use the new configuration files included with your new installation. Copy values from your old configuration files into the new files. Don’t overwrite entire files with the old files.

  5. Upgrades from 2.2 or 3.0: In cassandra.yaml, change the partitioner setting to match the previous partitioner.

    The RandomPartitioner (org.apache.cassandra.dht.RandomPartitioner) was the default partitioner in DSE 2.2 and 3.0. To maintain consistency, nodes must continue to use this partitioner.

    This change doesn’t apply to upgrades from 3.1.

  6. Upgrades from 3.1 to 3.2.0: For backwards compatibility during the upgrade, enable the earlier version’s gossip protocol by adding the following line to cassandra-env.sh:

    VM_OPTS="$JVM_OPTS -Denable-old-dse-state=true

    At the end of the entire upgrade process, you will remove this line so all nodes use the new protocol.

  7. Disable vnodes on datacenters that run Hadoop or Solr workloads by setting num_tokens to 1 in cassandra.yaml.

    DataStax recommends using vnodes only on datacenters running transactional (Cassandra) workloads.

  8. Upgrades from 2.2 or 3.0: If you use Kerberos, internal authorization, or internal authentication, then you must preserve your previous settings for backwards compatibility during the upgrade.

    Migrate the following settings from your backup cassandra.yaml into the new cassandra.yaml without changing them. For example, the DSE 3.2 cassandra.yaml must use the old authenticator com.datastax.bdp.cassandra.auth.PasswordAuthenticator and authorizer org.apache.cassandra.auth.CassandraAuthorizer.

    • authenticator

    • authorizer

    • auth_replication_strategy

    • auth_replication_options

    • any other diffs

    After upgrading all nodes in the cluster, you will reconfigure your security settings to use the new values for DSE 3.2.

  9. Start the node:

  10. Verify that the upgraded datacenter names match the datacenter names in the keyspace schema definition.

    This is only relevant when using NetworkTopologyStrategy.

    1. Get the node’s datacenter name:

      nodetool status | grep "Datacenter"
    2. Get the replication configuration for a keyspace:

      cqlsh --execute "DESCRIBE KEYSPACE keyspace-name;" | grep "replication"
    3. If the datacenter name in replication does not match the node’s datacenter name, alter or recreate the keyspace accordingly:

      ALTER KEYSPACE keyspace-name WITH replication = {'class': 'NetworkTopologyStrategy', 'datacenter-name': '3'};
  11. Review the logs for warnings, errors, and exceptions:

    grep -w 'WARN\|ERROR\|exception' /var/log/cassandra/*.log

    Warnings, errors, and exceptions are frequently found in the logs when starting an upgraded node. Some messages provide information to help you complete specific upgrade steps, and some messages can be ignored while the cluster is in a partially upgraded state. If you find warnings, errors, or exceptions that are unexpected or persist after upgrading the entire cluster, contact IBM Support.

    The following types of messages can be ignored during the upgrade, depending on your upgrade path. Messages requiring specific action are addressed in the next steps.

Upgrades from DSE 3.0

Ignore the following types of error messages that are expected during the upgrade process:

ERROR 15:36:54,908 Exception in thread Thread[GossipStage:1,5,main ]
 java.lang.NumberFormatException: For input string: "127605887595351923798765477786913079296"
. . .
Upgrades from Cassandra 1.2 (DSE 2.2 or 3.0)

Ignore error messages that are related to nodes attempting to push mutations to the new system_auth keyspace:

ERROR [WRITE-/192.168.123.11] 2013-06-22 14:13:42,336 OutboundTcpConnection.java (line 222)
 error writing to /192.168.123.11
java.lang.RuntimeException: Can't serialize ColumnFamily ID 2d324e48-3275-3517-8dd5-9a2c5b0856c5
to be used by version 5, because int <-> uuid mapping could not be established
(CF was created in mixed version cluster).
at org.apache.cassandra.db.ColumnFamilySerializer.cfIdSerializedSize(ColumnFamilySerializer.java:196)

If you are upgrading a secure cluster, there can be a delay to each node’s first startup as the security migration takes place (up to 1 minute). The delay is due to ensuring that the ring is fully connected before the migration starts. During the upgrade of a secure cluster, you might see a security related error message. However, you will see the following message in the log when the node has completed the migration:

INFO [NonPeriodicTasks:1 ] 2013-06-22 15:01:08,173
Auth.java (line 208 ) Migration of legacy auth data is complete.
You should now switch to org.apache.cassandra.auth implementations in cassandra.yaml.
Solr nodes

Don’t reindex Solr cores until all nodes are upgraded. During the upgrade, ignore error messages related to Solr cores awaiting reindexing. For example:

ERROR 00:57:17,785 Cannot activate core: ks.cf_10000_keys_50_cols
ERROR 00:57:17,786 <indexDefaults> and <mainIndex> configuration sections are discontinued.
 Use <indexConfig> instead.
ERROR 01:29:55,145 checksum mismatch in segments file (resource:
ChecksumIndexInput (MMapIndexInput ( path = "/var/lib/cassandra/data/solr.data/ks. cf_10000_keys_50_cols/index/segments_6" )))
ERROR 01:29:55,145 Solr index ks.cf_10000_keys_50_cols seems to be corrupted:
please CREATE the core again with recovery = true to start reindexing data.
ERROR 01:29:55,145 Cannot activate core: ks.cf_10000_keys_50_cols
ERROR 01:29:55,146 checksum mismatch in segments file (resource: ChecksumIndexInput
   (MMapIndexInput ( path = "/var/lib/cassandra/data/solr.data/ks. cf_10000_keys_50_cols/index/segments_6" )))
org.apache.lucene.index.CorruptIndexException: checksum mismatch in segments file
   (resource: ChecksumIndexInput (MMapIndexInput
   ( path = "/var/lib/cassandra/data/solr.data/ks.cf_10000_keys_50_cols/index/segments_6" )))
  1. Upgrades from 3.0 or 3.1: Check /var/log/cassandra/system.log for errors or warnings about the dse_system keyspace.

    The first upgraded node automatically alters dse_system to use the EverywhereStrategy, and then attempts to run nodetool repair on dse_system. This operation can fail if other nodes are down during the upgrade.

    Error messages in the logs about the dse_system keyspace can indicate that automatic switching failed due to down nodes. To fix these errors, do the following:

    1. Wait until all nodes are up.

    2. Manually update the dse_system keyspace to use the EverywhereStrategy:

      ALTER KEYSPACE dse_system WITH replication = {'class': 'EverywhereStrategy'};
    3. Repair dse_system:

      nodetool repair dse_system
  2. Upgrades from 2.2: Update the Solr configuration file and recover indexes for compatibility with the version of Solr included in 3.2.

    Solr configuration files from previous versions of DSE are invalidated by the new version of Solr included in 3.2.

    Resolving this issue requires different actions on different Solr nodes. On the first Solr node you upgrade, you must upload corrected configuration files and recover indexes. Then, when you upgrade subsequent Solr nodes, you only need to recover indexes.

    Do not issue Solr queries until all nodes are upgraded and schema disagreements are resolved.

    Do not rebuild indexes until all Solr nodes are upgraded and recovered.

    The following example commands use the Solr wiki demo application included with all DSE installations. The demo directory is located at INSTALL_DIRECTORY/demos for tarball installations and /usr/share/dse-demos for package installations. Modify the example commands to use your actual Solr application directories and core names.

    1. First upgraded Solr node: Open the system.log file, find the Solr error message, and then correct the errors in your solrconfig.xml files.

      The error message briefly describes the changes you need to make.

      Existing cores cannot be loaded until the solrconfig.xml errors are resolved.

    2. First upgraded Solr node: Upload the corrected solrconfig.xml files:

      +

    curl -v --data-binary @solrconfig.xml -H 'Content-type:text/xml; charset=utf-8'
    http://localhost:8983/solr/resource/wiki.solr/solrconfig.xml
    1. First upgraded Solr node: Recover indexes on the node:

      curl -v "http://localhost:8983/solr/admin/cores?action=CREATE&name=wiki.solr&recovery=true"
    2. All other upgraded Solr nodes: After upgrading each additional Solr node to DSE 3.2, run the CREATE command with the recovery option set to true, and the distributed option set to false.

      After the first Solr node, you don’t need to reupload the corrected solrconfig.xml files.

      curl -v "http://localhost:8983/solr/admin/cores?action=CREATE&name=wiki.solr&recovery=true"
  3. Repeat the upgrade process on each node in the cluster following the recommended order.

Post-upgrade steps

The post-upgrade steps include multi-node and cross-datacenter operations that can cause errors while a cluster is in a partially upgraded state. For example, repairs can propagate incompatible data between mixed-version nodes, and SSTable snapshots can be corrupted or unreadable due to mixed SSTable formats and versions.

Only start the post-upgrade steps after you upgrade all dependent nodes. Node dependencies are determined by your deployment architecture:

Architecture Examples Post-upgrade path

Isolated or non-production deployment

  • Upgrading a test deployment before rolling out the upgrade to production.

  • Upgrading a passive datacenter in an active-passive multi-datacenter deployment.

Start the post-upgrade steps after upgrading all nodes in the test deployment or passive datacenter.

For example, in a test deployment with two datacenters and cross-datacenter replication, you must upgrade all nodes in both datacenters before starting the post-upgrade steps.

In contrast, in a test deployment with one datacenter and no cross-datacenter connections, you must upgrade all nodes in that datacenter before starting the post-upgrade steps.

Production deployment

  • Rolling out an upgrade to an entire production cluster.

  • Upgrading a multi-datacenter deployment that has cross-datacenter replication.

Start the post-upgrade steps after upgrading all nodes included in the deployment.

For example, in a multi-datacenter deployment with cross-datacenter replication, you must upgrade all nodes in all datacenters before starting the post-upgrade steps.

Complete the post-upgrade steps progressively in the recommended order. Modify the recommended order as needed for your deployment architecture and workloads.

  1. Upgrade all SSTables again.

    Your database upgrade isn’t complete until you upgrade all SSTables.

    To avoid significant performance degradation and issues with incompatible SSTables formats, always upgrade SSTables before and after any database upgrade, including minor and patch releases.

    This process is recommended for all upgrades, and it is critical for upgrades that involve a major underlying Cassandra version change.

    On each node, run nodetool upgradesstables with the -a flag to ensure that all SSTables use the latest SSTable format and version for your current database version:

    nodetool upgradesstables -a

    DataStax recommends running the upgradesstables command on one node at a time or, when using racks, one rack at a time. Running the command on too many nodes at once can degrade performance.

    You can use the --jobs option to set the number of SSTables that upgrade simultaneously. The default setting is 2, which minimizes the impact on the cluster. Set to 0 to use all available compaction threads.

    If all SSTables are already on the latest version and format, the command returns immediately and takes no action.

  2. Upgrades from 2.2 or 3.0: Enable client-to-node SSL in cassandra.yaml if you had previously enabled it in dse.yaml.

    The client_encryption_options for enabling client-to-node SSL are removed from dse.yaml starting in 3.1.2.

  3. Upgrades from 2.2 or 3.0: If you use Kerberos, internal authorization, or internal authentication, then you must reconfigure your security settings in cassandra.yaml to use the new Cassandra 1.2 (DSE 3.2) values:

    1. For Kerberos authentication, there are no credentials data to migrate, but user records must still be updated. Merge the related diffs from the old to the new file.

    2. Switch to the apache.cassandra versions of PasswordAuthenticator and CassandraAuthorizer:

      authenticator: org.apache.cassandra.auth.PasswordAuthenticator
      authorizer: org.apache.cassandra.auth.CassandraAuthorizer
    3. Remove or comment out auth_replication_strategy, auth_replication_options, and replication_factor.

      An error occurs if you don’t disable auth_replication_strategy and replication_factor. For more information, see the DSE 3.2.5 release notes.

    4. Optional: Adjust the replication factor of the system_auth keyspace.

      The amount of data in this keyspace is typically very small, so leaving it replicated across the cluster is relatively cheap.

    5. Perform a rolling restart of all nodes in the cluster.

  4. Upgrades from 3.1.x to 3.2.0: Enable the new gossip protocol in the cluster:

    1. Remove the following line from cassandra-env.sh on all nodes:

      VM_OPTS="$JVM_OPTS -Denable-old-dse-state=true
    2. Perform a rolling restart of all nodes.

  5. Upgrades from 2.2 to 3.2: The ownership of the Hadoop mapred/staging directory in the CassandraFS has changed, so you must set the owner of /tmp/hadoop-dseuser/mapred/staging to the DSE user.

    For example, if you run DSE 3.1 as root, use the following command on Linux:

    dse hadoop fs -chown root /tmp/hadoop-root/mapred/staging
  6. If you make changes to the configuration of a Solr node after upgrading, you must set the type mapping correctly as explained in Configuring the Solr type mapping version.

  7. Restart any services or automated operations that you disabled before starting the upgrade.

    For more information, see Avoid certain operations during the upgrade.

Recommissioning nodes

For upgrades from 3.0, if you decommissioned a node within 72 hours of an upgrade:

  1. Do not recommission the node until another 72 hours has passed.

  2. To recommission the node after 72 hours, run nodetool gossipinfo, and then check the STATUS line to verify that the decommissioned node’s token no longer exists.

  3. If the token isn’t present, then the node has been deleted and it is safe to recommission the node.

  4. If the token is present and you need to bring the node into the cluster, contact IBM Support regarding how to kill the node.

Was this helpful?

Give Feedback

How can we improve the documentation?

© Copyright IBM Corporation 2026 | Privacy policy | Terms of use Manage Privacy Choices

Apache, Apache Cassandra, Cassandra, Apache Tomcat, Tomcat, Apache Lucene, Apache Solr, Apache Hadoop, Hadoop, Apache Pulsar, Pulsar, Apache Spark, Spark, Apache TinkerPop, TinkerPop, Apache Kafka and Kafka are either registered trademarks or trademarks of the Apache Software Foundation or its subsidiaries in Canada, the United States and/or other countries. Kubernetes is the registered trademark of the Linux Foundation.

General Inquiries: Contact IBM