{"id":15180,"date":"2023-09-26T11:42:13","date_gmt":"2023-09-26T06:12:13","guid":{"rendered":"https:\/\/opstree.com\/blog\/\/?p=15180"},"modified":"2023-09-26T11:43:47","modified_gmt":"2023-09-26T06:13:47","slug":"apache-cassandra-migration-last-episode-3x-to-4x-migration","status":"publish","type":"post","link":"https:\/\/opstree.com\/blog\/2023\/09\/26\/apache-cassandra-migration-last-episode-3x-to-4x-migration\/","title":{"rendered":"Apache Cassandra Migration Last Episode:  3x to 4x Migration"},"content":{"rendered":"\n<p>In the previous blog posts of this series, we learned the <a href=\"https:\/\/opstree.com\/blog\/\/2023\/08\/01\/apache-cassandra-migration-3-x-to-4-x-episode-1-basics\/\">basics <\/a>and  <a href=\"https:\/\/opstree.com\/blog\/\/2023\/08\/22\/apache-cassandra-migration-3-x-to-4-x-ep-2-dc-and-dr-setup\/\">X-DR Setup<\/a> in Cassandra. Finally, we have arrived at our last phase: <strong>Cassandra migration to a newer version.<\/strong><\/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\"><img loading=\"lazy\" decoding=\"async\" width=\"620\" height=\"314\" data-id=\"15328\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2023\/09\/cartoonupgrade.jpg?w=620\" alt=\"\" class=\"wp-image-15328\" \/><\/figure>\n<\/figure>\n\n\n\n<p>The last 2 years have been great on our database journey. We searched for the best database for our application and ended up using Cassandra. It proved to be quite fast, just what we needed for our use case. We started using  Cassandra 3.1.2 which was fine but after running it for a year we realized that it was time to upgrade as, by then, v3.1.2 had lots of vulnerabilities.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">Obviously, experimenting on current production was risky so we decided to go with our non-production first. We were running the same version 3.1.2 and X-DR Setup. In the previous blog, I explained the X-DR Setup you might want to refer to for proper understanding. <\/p>\n\n\n\n<!--more-->\n\n\n\n<p class=\"has-text-align-justify\">We began by reviewing all the documentation related to Cassandra to understand its upgrading processes. <\/p>\n\n\n\n<p class=\"has-text-align-justify\">Before doing any upgrade on databases the first thing is to secure data because data matters the most. Therefore, we started with the data backup.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"401\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2023\/09\/screenshot-2023-09-25-184823.png?w=800\" alt=\"\" class=\"wp-image-15680\" \/><\/figure>\n\n\n\n<p>                                                        Source: <a rel=\"noreferrer noopener\" href=\"https:\/\/www.123rf.com\/photo_148175489_warehouse-with-worker-forklift-and-cardboard-boxes-on-metal-racks-vector-cartoon-interior-of-storage.html\" target=\"_blank\">123rf<\/a><\/p>\n\n\n\n<p class=\"has-text-align-justify\"><strong>SStables<\/strong> is where your all data is stored in Cassandra. We first made a copy of our data by attaching an additional disk and mounting it on the nodes. We have also taken the Snapshot by running the below command on each node.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"774\" height=\"61\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2023\/09\/screenshot-2023-09-25-185043.png?w=774\" alt=\"\" class=\"wp-image-15682\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-justify\">Now our data is secured which means if something happens we have a rollback plan which is to shift back to the older version and then point data to that backup disk and start the Cassandra service.<\/p>\n\n\n\n<p><strong>IT&#8217;S SHOW TIMEEEEEEEEEEEE!!!!!!!!!!!!!!!!!!!<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"563\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2023\/09\/xx.png?w=800\" alt=\"\" class=\"wp-image-15711\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-justify\">We want Inline Upgrade and have Cluster as an X-DR Setup. So we decided to upgrade one cluster at a time so the application will be pointing to another cluster this will reduce the chances of Application downtime.<\/p>\n\n\n\n<p><strong><em>Here are the procedures we adhered to<\/em> for all the nodes in the clusters:<\/strong><\/p>\n\n\n\n<ol>\n<li>We first took the backup of the configuration <a href=\"https:\/\/opstree.com\/blog\/\/2023\/08\/22\/apache-cassandra-migration-3-x-to-4-x-ep-2-dc-and-dr-setup\/\">cassandra.yaml <\/a>and <a href=\"https:\/\/opstree.com\/blog\/\/2023\/08\/22\/apache-cassandra-migration-3-x-to-4-x-ep-2-dc-and-dr-setup\/\">cassandra-rack.properties<\/a>. Both files are necessary to run cassandra. I have explained both the files in previous blog  <a href=\"https:\/\/opstree.com\/blog\/\/2023\/08\/22\/apache-cassandra-migration-3-x-to-4-x-ep-2-dc-and-dr-setup\/\">X-DR Setup<\/a><\/li>\n\n\n\n<li>List all packages currently installed: <strong><em>rpm -qa| grep cassandra<\/em><\/strong><\/li>\n\n\n\n<li> Now drain the node by the below command: <strong><em>nodetool drain<\/em><\/strong>. It will make a node stop accepting writes and flush all memtables from the node to SSTables.<\/li>\n\n\n\n<li>Now Stop the service: <strong><em>service cassandra stop<\/em><\/strong><\/li>\n\n\n\n<li>Now remove the node from the cluster by running:  <strong><em>nodetool removenode &lt;&lt;HOSTID&gt;&gt;<\/em><\/strong><\/li>\n\n\n\n<li>After successfully removing the node you are halfway through <\/li>\n\n\n\n<li>Now remove packages of Cassandra: <strong><em>rpm -e cassandra*<\/em><\/strong><\/li>\n\n\n\n<li>Now install the latest Cassandra: <strong><em>yum install cassandra4.1.2<\/em><\/strong><\/li>\n\n\n\n<li>After installation now its time to copy the cassandra files from backup to <strong><em>\/etc\/cassandra\/conf<\/em><\/strong><\/li>\n\n\n\n<li>Now Start the cassandra service: <strong><em>service cassandra start<\/em><\/strong><\/li>\n\n\n\n<li>Now watch  for logs \/<strong><em>var\/log\/cassandra\/debug.log<\/em><\/strong> <\/li>\n<\/ol>\n\n\n\n<p><em><strong>NOTE:<\/strong> Cassandra.yaml has some changes over the configuration parameters that need to be reconsidered before executing the Step 9. In the previous blog, I have posted the yaml. <\/em><\/p>\n\n\n\n<p>Now Cassandra is up and running with the latest version that can be verified using <strong>nodetool describecluster<\/strong> command <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"808\" height=\"632\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2023\/09\/88c776175433921.y3jvccwxmdmxldgwniw0ndksmje0.webp?w=808\" alt=\"\" class=\"wp-image-15359\" \/><\/figure>\n\n\n\n<p>                                                                   Source: <a href=\"https:\/\/www.behance.net\/gallery\/175433921\/Pokemon-Charmander-Wallpaper-with-Psd-AI?tracking_source=search_projects%7CCharmander\" target=\"_blank\" rel=\"noopener\">behance.net<\/a><\/p>\n\n\n\n<p><strong>Now your Cassandra is on 4.x.x but sstables are still not upgraded for that you need to run the below command <\/strong><\/p>\n\n\n\n<p>Upgrading sstables in each node will take almost 1 hour to upgrade. After that, you have successfully upgraded the cluster to 4x.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"571\" height=\"40\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2023\/09\/screenshot-2023-09-25-185610.png?w=571\" alt=\"\" class=\"wp-image-15686\" style=\"width:629px;height:auto\" \/><\/figure>\n\n\n\n<p><strong>Congratulations <\/strong>We Have Done It !!!!!!!!!!!!!!!!!!!!!<\/p>\n\n\n\n<p><em><strong>NOTE: <\/strong>Upgrading sstables is necessary because whenever you upgrade to any minor version or major upgrade, sstables resolve version incompatibility issues. <\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Wrapping Up<\/strong><\/h3>\n\n\n\n<p>Here we have reached the end of the blog. This is the last blog of our Cassandra Migration Series. Do pay attention to the tips (or notes) to avoid any form of errors. Do share your opinion or if you have any questions through comments.<\/p>\n\n\n\n<p><strong>Blog Pundits: <strong><a href=\"https:\/\/opstree.com\/blog\/\/author\/pankajkumar1301\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Pankaj Kumar<\/strong><\/a><\/strong> 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+Last+Episode%3A++3x+to+4x+Migration\" target=\"_blank\" rel=\"noreferrer noopener\">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>In the previous blog posts of this series, we learned the basics and X-DR Setup in Cassandra. Finally, we have arrived at our last phase: Cassandra migration to a newer version. The last 2 years have been great on our database journey. We searched for the best database for our application and ended up using &hellip; <a href=\"https:\/\/opstree.com\/blog\/2023\/09\/26\/apache-cassandra-migration-last-episode-3x-to-4x-migration\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Apache Cassandra Migration Last Episode:  3x to 4x Migration&#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":[44070,566348,768739308,676319247,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-3WQ","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/15180"}],"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=15180"}],"version-history":[{"count":24,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/15180\/revisions"}],"predecessor-version":[{"id":15712,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/15180\/revisions\/15712"}],"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=15180"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/categories?post=15180"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/tags?post=15180"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}