{"id":14713,"date":"2023-08-22T12:13:01","date_gmt":"2023-08-22T06:43:01","guid":{"rendered":"https:\/\/opstree.com\/blog\/\/?p=14713"},"modified":"2023-09-26T09:31:26","modified_gmt":"2023-09-26T04:01:26","slug":"apache-cassandra-migration-3-x-to-4-x-ep-2-dc-and-dr-setup","status":"publish","type":"post","link":"https:\/\/opstree.com\/blog\/apache-cassandra-migration-3-x-to-4-x-ep-2-dc-and-dr-setup\/","title":{"rendered":"Apache Cassandra Migration: 3.x to 4.x Ep: 2 DC and DR Setup"},"content":{"rendered":"\n<p class=\"has-text-align-justify wp-block-paragraph\">Well in my previous blog, we learned about Cassandra&#8217;s basics. If you have not read it yet, you should go through it. We have discussed the basics of Cassandra which will be useful in your daily operations on the database.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So now we will deep-dive into Cassandra&#8217;s DC\/DR Setup. <\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"343\" height=\"147\" data-id=\"15118\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2023\/08\/images.jpeg?w=343\" alt=\"\" class=\"wp-image-15118\" style=\"width:800px;height:undefinedpx\" \/><\/figure>\n<\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"has-text-align-justify wp-block-paragraph\">DC\/DR setup is necessary in a production environment where you don&#8217;t know when an issue can occur. You need to have an immediate backup when your cluster is down, and you should always have another cluster to respond. <\/p>\n\n\n\n<p class=\"has-text-align-justify wp-block-paragraph\">Cassandra is a database and for a database, we want it to remain up in any and every situation to avoid downtime of our applications. Disaster Recovery setup of databases is equally necessary as you do for your applications. So let&#8217;s get started with this super easy way where it will take a few minutes and make your DR Setup ready.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em>While Designing DR in Cassandra you just have to keep 2 files in mind.<\/em><\/strong> <\/p>\n\n\n\n<p class=\"has-text-align-justify wp-block-paragraph\"><strong>Cassandra.yaml <\/strong>is the heart of your Cassandra Cluster. The below file you can use as it is while setting up the cluster. The points that need to be different are already listed below the image<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cluster_name: Opstree-Datacentre2\nnum_tokens: 256\nauto_bootstrap: false\nhinted_handoff_enabled: true\nmax_hint_window: 3h\nhinted_handoff_throttle: 1024KiB\nmax_hints_delivery_threads: 4\nhints_directory: \/var\/lib\/cassandra\/hints\nhints_flush_period: 10000ms\nmax_hints_file_size: 128MiB\nauto_hints_cleanup_enabled: false\nbatchlog_replay_throttle: 1024KiB\nauthenticator: PasswordAuthenticator\n#authenticator: AllowAllAuthenticator\nauthorizer: CassandraAuthorizer\n#authorizer: AllowAllAuthorizer\nrole_manager: CassandraRoleManager\n#network_authorizer: AllowAllNetworkAuthorizer\nroles_validity: 2000ms\npermissions_validity: 2000ms\ncredentials_validity: 2000ms\npartitioner: org.apache.cassandra.dht.Murmur3Partitioner\ndata_file_directories:\n&nbsp; - \/var\/lib\/cassandra\/data\ncommitlog_directory: \/var\/lib\/cassandra\/commitlog\ncdc_enabled: false\ndisk_failure_policy: stop\ncommit_failure_policy: stop\nprepared_statements_cache_size: null\nkey_cache_size: null\nkey_cache_save_period: 4h\nrow_cache_size: 0MiB\nrow_cache_save_period: 0s\ncounter_cache_size: null\ncounter_cache_save_period: 7200s\nsaved_caches_directory: \/var\/lib\/cassandra\/saved_caches\ncommitlog_sync: periodic\ncommitlog_sync_period: 10000ms\ncommitlog_segment_size: 32MiB\nseed_provider:\n&nbsp; - class_name: org.apache.cassandra.locator.SimpleSeedProvider\n&nbsp; &nbsp; parameters:\n&nbsp; &nbsp; &nbsp; - seeds: \"10.21.2.1,172.16.0.2\"\nconcurrent_reads: 32\nconcurrent_writes: 32\nconcurrent_counter_writes: 32\nconcurrent_materialized_view_writes: 32\nmemtable_allocation_type: heap_buffers\nindex_summary_capacity: null\nindex_summary_resize_interval: 60m\ntrickle_fsync: false\ntrickle_fsync_interval: 10240KiB\nstorage_port: 7000\nssl_storage_port: 7001\nlisten_address: 10.21.2.1\nstart_native_transport: true\nnative_transport_port: 9042\nnative_transport_allow_older_protocols: true\nrpc_address: 10.21.2.1\nrpc_keepalive: true\nincremental_backups: true\nsnapshot_before_compaction: false\nauto_snapshot: true\nsnapshot_links_per_second: 0\ncolumn_index_size: 64KiB\ncolumn_index_cache_size: 2KiB\nconcurrent_materialized_view_builders: 1\ncompaction_throughput: 64MiB\/s\nsstable_preemptive_open_interval: 50MiB\nuuid_sstable_identifiers_enabled: false\nread_request_timeout: 800ms\nrange_request_timeout: 10000ms\nwrite_request_timeout: 1000ms\ncounter_write_request_timeout: 5000ms\ncas_contention_timeout: 1000ms\ntruncate_request_timeout: 60000ms\nrequest_timeout: 1000ms\n##slow_query_log_timeout: 500ms\nendpoint_snitch: GossipingPropertyFileSnitch\ndynamic_snitch_update_interval: 100ms\ndynamic_snitch_reset_interval: 600000ms\ndynamic_snitch_badness_threshold: 1\nserver_encryption_options:\n&nbsp; internode_encryption: none\n&nbsp; legacy_ssl_storage_port_enabled: false\n&nbsp; keystore: conf\/.keystore\n&nbsp; keystore_password: cassandra\n&nbsp; require_client_auth: false\n&nbsp; truststore: conf\/.truststore\n&nbsp; truststore_password: cassandra\n&nbsp; require_endpoint_verification: false\nclient_encryption_options:\n&nbsp; enabled: false\n&nbsp; keystore: conf\/.keystore\n&nbsp; keystore_password: cassandra\n&nbsp; require_client_auth: false\ninternode_compression: all\ninter_dc_tcp_nodelay: false\ntrace_type_query_ttl: 1d\ntrace_type_repair_ttl: 7d\nuser_defined_functions_enabled: false\nscripted_user_defined_functions_enabled: false\ntombstone_warn_threshold: 1000\ntombstone_failure_threshold: 100000\nreplica_filtering_protection:\n&nbsp; cached_rows_warn_threshold: 2000\n&nbsp; cached_rows_fail_threshold: 32000\nbatch_size_warn_threshold: 5KiB\nbatch_size_fail_threshold: 50KiB\nunlogged_batch_across_partitions_warn_threshold: 10\ncompaction_large_partition_warning_threshold: 100MiB\ncompaction_tombstone_warning_threshold: 100000\naudit_logging_options:\n&nbsp; enabled: false\n&nbsp; logger:\n&nbsp; &nbsp; - class_name: BinAuditLogger\ndiagnostic_events_enabled: false\nrepaired_data_tracking_for_range_reads_enabled: false\nrepaired_data_tracking_for_partition_reads_enabled: false\nreport_unconfirmed_repaired_data_mismatches: false\nmaterialized_views_enabled: false\nsasi_indexes_enabled: false\ntransient_replication_enabled: false\ndrop_compact_storage_enabled: false<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em>The properties would be the same in DC\/DR the difference you need to make are listed below<\/em><\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>cluster_name:  The name should be the same in both the cluster so you don&#8217;t need to change your application properties. If one is down you already have a second cluster up with the same name. It&#8217;s like an active-active cluster setup<\/li>\n\n\n\n<li>Snitches: GossipingPropertyFileSnitch should be there if you have 2 clusters in a single cluster you can use SimpleSnitch. But I would recommend you to use  GossipingPropertyFileSnitch only because in the future if you want to switch from SimpleSnitch it would be difficult and you end up adding an extra step in your migration. I was lucky enough because my current cluster was on <strong>GPFS<\/strong> only<\/li>\n\n\n\n<li><strong>Seed_provider<\/strong>: These are the captains of your both clusters on DC and DR. You need to choose one IP  from both the clusters like i have chosen above<\/li>\n\n\n\n<li><strong>listen_address<\/strong>: The should be unique. It would be the IP address or hostname that Cassandra binds to for connecting this node to other nodes<\/li>\n\n\n\n<li><strong>rpc_address<\/strong>:  The should be unique. It would be the IP address or hostname  that Cassandra binds to for listening on client connections<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em> cassandra-rackdc.properties:<\/em> <\/strong><\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"850\" height=\"152\" data-id=\"14850\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2023\/07\/screenshot-2023-07-21-at-2.21.22-pm.png?w=850\" alt=\"\" class=\"wp-image-14850\" style=\"width:800px;height:undefinedpx\" \/><\/figure>\n<\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em><strong>Cassandra-rack.properties: DC1 Cluster <\/strong><\/em><\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1942\" height=\"304\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2023\/07\/screenshot-2023-07-21-at-2.24.15-pm.png?w=1024\" alt=\"\" class=\"wp-image-14852\" style=\"width:800px;height:undefinedpx\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em><strong>Cassandra-rack.properties: DC2 Cluster<\/strong><\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Rack.properties is where the whole game is played of distributing (DC\/DR) setup. It only has two properties to look for <\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Datacentre<\/strong>: This would be the name of your Datacentre and it would be separate in both Clusters For example \n<ul class=\"wp-block-list\">\n<li>Cluster 1: <strong>Opstree-Datacentre1<\/strong><\/li>\n\n\n\n<li>Cluster 2: <strong>Opstree-Datacentre2<\/strong><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Rack<\/strong>: It would be like in AWS you have Region and then you have availability zones. So Regions would be your data centre and AZs are your Racks      Examples: \n<ul class=\"wp-block-list\">\n<li><strong>us-west<\/strong> \u21d2 <strong>Opstree-Datacentre1: Rack: us-west-1a<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>us-west \u21d2<\/strong> <strong>Opstree-Datacentre2: Rack: us-west-2b<\/strong><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Now your Configuration is done<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now its time to restart service and your cluster is up in DC and DR both<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>NOOOOOOOOOO!!!!!!!!!!!!!!! Where is my data in New Cluster<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"462\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2023\/07\/mario_1-gif.gif?w=750\" alt=\"\" class=\"wp-image-14844\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Source: https:\/\/cloudinary.com\/blog\/evolution_of_img_gif_without_the_gif<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We have just made the DC\/DR Setup. Data is still not copied to do so follow these easy steps:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>You need to alter your keyspaces and a few of the Cassandra keyspaces that are created by default<\/li>\n\n\n\n<li>By default, the Strategy of your keyspaces is SimpleStrategy you need to change it to Network Strategy<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Login into your CQLSH<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1284\" height=\"180\" data-id=\"15013\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2023\/08\/img_5561.jpg?w=1024\" alt=\"\" class=\"wp-image-15013\" \/><\/figure>\n<\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>ALTER below keyspaces created by default <\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ALTER KEYSPACE system_distributed WITH replication = {'class':&nbsp;'NetworkTopologyStrategy',&nbsp;\u2018Opstree-Datacentre1\u2019:&nbsp;\u20183\u2019, \u2018Opstree-Datacentre2\u2019: \u20183\u2019} ;\n\nALTER KEYSPACE system_auth WITH replication = {'class':&nbsp;'NetworkTopologyStrategy',&nbsp;'Opstree-Datacentre1':&nbsp;'3',&nbsp;'Opstree-Datacentre2':&nbsp;'0'} AND durable_writes =&nbsp;true;\n\nALTER KEYSPACE system_traces WITH replication = {'class':&nbsp;'NetworkTopologyStrategy',&nbsp;'Opstree-Datacentre1':&nbsp;'3',&nbsp;'Opstree-Datacentre2':&nbsp;'0'} AND durable_writes =&nbsp;true;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>system_distributed, system_auth, and system_traces should be changed from SimpleStategy to Network Strategy<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>ALTER your keyspace that you want to replicate in the DR setup<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ALTER KEYSPACE &lt;&lt;opstree&gt;&gt; WITH replication = {'class':&nbsp;'NetworkTopologyStrategy',&nbsp;'Opstree-Datacentre1':&nbsp;'3',&nbsp;'Opstree-Datacentre2':&nbsp;'0'} AND durable_writes =&nbsp;true;<\/code><\/pre>\n\n\n\n<ol class=\"wp-block-list\">\n<li>The command you need to run will be <strong>nodetool repair<\/strong> from another cluster. On each new node in the cluster, it will sync and make it identical to your other cluster. <\/li>\n\n\n\n<li><strong>nodetool repair -dc Opstree-Datacentre1 <\/strong>(In each new node). Running this  command will make your cluster in sync and repair your node from faulty data<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Wrapping Up<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is how we did our DC\/DR setup in Cassandra. In the next blog, we will discuss how we can Migrate the cluster from 3x to 4x. That would be quite interesting too, so stay tuned&#8230;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Meanwhile, if you have any questions do let us know through comments. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Blog Pundits: <a href=\"https:\/\/opstree.com\/blog\/\/author\/prakashjha9f558ddc78\/\"><strong>Prakash Jha<\/strong><\/a><a href=\"https:\/\/opstree.com\/blog\/\/author\/naveenverma023\/\"> <\/a>and <a rel=\"noreferrer noopener\" href=\"https:\/\/opstree.com\/blog\/\/author\/sandeep7c51ad81ba\/\" target=\"_blank\">Sandeep Rawat<\/a><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>OpsTree is an End-to-End <a href=\"https:\/\/opstree.com\/services\/\" target=\"_blank\" rel=\"noreferrer noopener\">DevOps Solution<\/a> Provider.<\/strong><\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/opstree.com\/contact-us\/?utm_source=WordPress&amp;utm_medium=Blog&amp;utm_campaign=Apache+Cassandra+Migration%3A+3.x+to+4.x+Ep%3A+2+DC+and+DR+Setup\">Contact Us<\/a><\/div>\n<\/div>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\"><strong>Connect with Us<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-social-links aligncenter is-content-justification-center is-layout-flex wp-container-core-social-links-is-layout-fe0a7de2 wp-block-social-links-is-layout-flex\"><li class=\"wp-social-link wp-social-link-linkedin wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/www.linkedin.com\/company\/opstree-solutions\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">LinkedIn<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-youtube wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/www.youtube.com\/channel\/UCeLma6SpNYH7jjYKSBNSexw\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">YouTube<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-github wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/github.com\/OpsTree\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12,2C6.477,2,2,6.477,2,12c0,4.419,2.865,8.166,6.839,9.489c0.5,0.09,0.682-0.218,0.682-0.484 c0-0.236-0.009-0.866-0.014-1.699c-2.782,0.602-3.369-1.34-3.369-1.34c-0.455-1.157-1.11-1.465-1.11-1.465 c-0.909-0.62,0.069-0.608,0.069-0.608c1.004,0.071,1.532,1.03,1.532,1.03c0.891,1.529,2.341,1.089,2.91,0.833 c0.091-0.647,0.349-1.086,0.635-1.337c-2.22-0.251-4.555-1.111-4.555-4.943c0-1.091,0.39-1.984,1.03-2.682 C6.546,8.54,6.202,7.524,6.746,6.148c0,0,0.84-0.269,2.75,1.025C10.295,6.95,11.15,6.84,12,6.836 c0.85,0.004,1.705,0.114,2.504,0.336c1.909-1.294,2.748-1.025,2.748-1.025c0.546,1.376,0.202,2.394,0.1,2.646 c0.64,0.699,1.026,1.591,1.026,2.682c0,3.841-2.337,4.687-4.565,4.935c0.359,0.307,0.679,0.917,0.679,1.852 c0,1.335-0.012,2.415-0.012,2.741c0,0.269,0.18,0.579,0.688,0.481C19.138,20.161,22,16.416,22,12C22,6.477,17.523,2,12,2z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">GitHub<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-facebook wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/www.facebook.com\/opstree\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12 2C6.5 2 2 6.5 2 12c0 5 3.7 9.1 8.4 9.9v-7H7.9V12h2.5V9.8c0-2.5 1.5-3.9 3.8-3.9 1.1 0 2.2.2 2.2.2v2.5h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.8l-.4 2.9h-2.3v7C18.3 21.1 22 17 22 12c0-5.5-4.5-10-10-10z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Facebook<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-medium wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/medium.com\/buildpiper\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M13.2,12c0,3-2.4,5.4-5.3,5.4S2.6,15,2.6,12s2.4-5.4,5.3-5.4S13.2,9,13.2,12 M19.1,12c0,2.8-1.2,5-2.7,5s-2.7-2.3-2.7-5s1.2-5,2.7-5C17.9,7,19.1,9.2,19.1,12 M21.4,12c0,2.5-0.4,4.5-0.9,4.5c-0.5,0-0.9-2-0.9-4.5s0.4-4.5,0.9-4.5C21,7.5,21.4,9.5,21.4,12\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Medium<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-twitter wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/twitter.com\/opstreedevops\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M22.23,5.924c-0.736,0.326-1.527,0.547-2.357,0.646c0.847-0.508,1.498-1.312,1.804-2.27 c-0.793,0.47-1.671,0.812-2.606,0.996C18.324,4.498,17.257,4,16.077,4c-2.266,0-4.103,1.837-4.103,4.103 c0,0.322,0.036,0.635,0.106,0.935C8.67,8.867,5.647,7.234,3.623,4.751C3.27,5.357,3.067,6.062,3.067,6.814 c0,1.424,0.724,2.679,1.825,3.415c-0.673-0.021-1.305-0.206-1.859-0.513c0,0.017,0,0.034,0,0.052c0,1.988,1.414,3.647,3.292,4.023 c-0.344,0.094-0.707,0.144-1.081,0.144c-0.264,0-0.521-0.026-0.772-0.074c0.522,1.63,2.038,2.816,3.833,2.85 c-1.404,1.1-3.174,1.756-5.096,1.756c-0.331,0-0.658-0.019-0.979-0.057c1.816,1.164,3.973,1.843,6.29,1.843 c7.547,0,11.675-6.252,11.675-11.675c0-0.178-0.004-0.355-0.012-0.531C20.985,7.47,21.68,6.747,22.23,5.924z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Twitter<\/span><\/a><\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Well in my previous blog, we learned about Cassandra&#8217;s basics. If you have not read it yet, you should go through it. We have discussed the basics of Cassandra which will be useful in your daily operations on the database. So now we will deep-dive into Cassandra&#8217;s DC\/DR Setup. DC\/DR setup is necessary in a [&hellip;]<\/p>\n","protected":false},"author":200627995,"featured_media":29900,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[28070474],"tags":[566348,1279075,768739308,676319247,1158,4996032],"class_list":["post-14713","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devops","tag-cassandra","tag-database-migration","tag-devops","tag-devops-solutioning","tag-migration","tag-technical-blogs"],"blocksy_meta":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/opstree.com\/blog\/wp-content\/uploads\/2025\/11\/DevSecOps-1.jpg","jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pfDBOm-3Pj","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/14713","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/users\/200627995"}],"replies":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/comments?post=14713"}],"version-history":[{"count":24,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/14713\/revisions"}],"predecessor-version":[{"id":15693,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/14713\/revisions\/15693"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/media\/29900"}],"wp:attachment":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/media?parent=14713"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/categories?post=14713"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/tags?post=14713"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}