{"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\/apache-cassandra-migration-last-episode-3x-to-4x-migration\/","title":{"rendered":"Apache Cassandra Migration Last Episode:  3x to 4x Migration"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 wp-block-paragraph\">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 wp-block-paragraph\">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 wp-block-paragraph\">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 class=\"wp-block-paragraph\">                                                        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 wp-block-paragraph\"><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 wp-block-paragraph\">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 class=\"wp-block-paragraph\"><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 wp-block-paragraph\">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 class=\"wp-block-paragraph\"><strong><em>Here are the procedures we adhered to<\/em> for all the nodes in the clusters:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\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 class=\"wp-block-paragraph\"><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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">                                                                   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 class=\"wp-block-paragraph\"><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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\"><strong>Congratulations <\/strong>We Have Done It !!!!!!!!!!!!!!!!!!!!!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\"><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 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+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 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>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;]<\/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],"class_list":["post-15180","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devops","tag-automation","tag-cassandra","tag-devops","tag-devops-solutioning","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-3WQ","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/15180","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=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}]}}