{"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\/2023\/08\/22\/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\">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>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><\/p>\n\n\n\n<p class=\"has-text-align-justify\">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\">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><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\"><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><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>\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><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><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><em><strong>Cassandra-rack.properties: DC2 Cluster<\/strong><\/em><\/p>\n\n\n\n<p>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>\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>\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>\n<li><strong>us-west<\/strong> \u21d2 <strong>Opstree-Datacentre1: Rack: us-west-1a<\/strong>\n<ul>\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><strong>Now your Configuration is done<\/strong><\/p>\n\n\n\n<p>Now its time to restart service and your cluster is up in DC and DR both<\/p>\n\n\n\n<p><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>Source: https:\/\/cloudinary.com\/blog\/evolution_of_img_gif_without_the_gif<\/p>\n\n\n\n<p>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>\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><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><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><strong>system_distributed, system_auth, and system_traces should be changed from SimpleStategy to Network Strategy<\/strong><\/p>\n\n\n\n<p><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>\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><strong>Wrapping Up<\/strong><\/p>\n\n\n\n<p>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>Meanwhile, if you have any questions do let us know through comments. <\/p>\n\n\n\n<p><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><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\"><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-1 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=\"M20.962,7.257l-5.457,8.867l-3.923-6.375l3.126-5.08c0.112-0.182,0.319-0.286,0.527-0.286c0.05,0,0.1,0.008,0.149,0.02 c0.039,0.01,0.078,0.023,0.114,0.041l5.43,2.715l0.006,0.003c0.004,0.002,0.007,0.006,0.011,0.008 C20.971,7.191,20.98,7.227,20.962,7.257z M9.86,8.592v5.783l5.14,2.57L9.86,8.592z M15.772,17.331l4.231,2.115 C20.554,19.721,21,19.529,21,19.016V8.835L15.772,17.331z M8.968,7.178L3.665,4.527C3.569,4.479,3.478,4.456,3.395,4.456 C3.163,4.456,3,4.636,3,4.938v11.45c0,0.306,0.224,0.669,0.498,0.806l4.671,2.335c0.12,0.06,0.234,0.088,0.337,0.088 c0.29,0,0.494-0.225,0.494-0.602V7.231C9,7.208,8.988,7.188,8.968,7.178z\"><\/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; <a href=\"https:\/\/opstree.com\/blog\/2023\/08\/22\/apache-cassandra-migration-3-x-to-4-x-ep-2-dc-and-dr-setup\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Apache Cassandra Migration: 3.x to 4.x Ep: 2 DC and DR Setup&#8221;<\/span><\/a><\/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],"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"}],"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}]}}