{"id":8352,"date":"2013-10-15T11:34:59","date_gmt":"2013-10-15T11:34:59","guid":{"rendered":"https:\/\/gosqeng.test\/?p=356"},"modified":"2019-11-28T12:26:44","modified_gmt":"2019-11-28T12:26:44","slug":"expanding-a-cassandra-cluster","status":"publish","type":"post","link":"https:\/\/www.gosquared.com\/blog\/expanding-a-cassandra-cluster","title":{"rendered":"Migrating or expanding a Cassandra cluster"},"content":{"rendered":"<p><img decoding=\"async\" src=\"\/\/static.gosquared.com\/images\/liquidicity\/13_10_15_cassandra_01.png\" alt=\"DataStax Cassandra at GoSquared\" \/><\/p>\n<p>Recently I was tasked with migrating an existing DataStax Cassandra cluster to a different availability zone (AZ) in AWS EC2. The existing cluster&#8217;s nodes were m1.xlarge instances running the DataStax Community AMI, with Cassandra 1.2.8-1 installed.<\/p>\n<p>The migration strategy is fairly simple. The cluster can be migrated one node at a time, by setting up an equivalent number of nodes in the other AZ, adding them into the existing cluster, and then decommissioning each node in the original AZ one by one. This way, the migration is performed gradually while the cluster is online, and without any interruption in service.<\/p>\n<h2>1. Understand the DataStax Cassandra AMI<\/h2>\n<p>It is essential to be running the same version of Cassandra on all nodes in a cluster. Initially I assumed the DataStax AMI was packaged with the same Cassandra version and configuration, such that if you booted new instances with the same AMI as the existing cluster, the same version of Cassandra would be set up. I booted up some new nodes with the same AMI to verify this.<\/p>\n<p>As it turns out, the new nodes were instead running the latest release, which is Cassandra 2.0.1 as of today (2013-10-11), not 1.2.8. I decided to do some digging on how the AMI was put together.<\/p>\n<p>I discovered that the DataStax AMI is built by a collection of python scripts in the <a href=\"https:\/\/github.com\/riptano\/ComboAMI\" target=\"_blank\" rel=\"noopener noreferrer\">ComboAMI<\/a> repository. Once set up, the AMI has this repository cloned locally to \/home\/ubuntu\/datastax_ami and puts a boot script in \/etc\/init.d which invokes the \/home\/ubuntu\/datastax_ami\/ds0_updater.py script. This means that each time the image is booted, it updates the python setup scripts and tries to install the latest version of DataStax and Cassandra by default.<\/p>\n<p>Don&#8217;t worry, there&#8217;s a way we can specify which version of Cassandra to install. Onto the next step&#8230;<\/p>\n<h2>2. Launch the new nodes<\/h2>\n<p>It&#8217;s time to decide how many new nodes to add to the cluster. If you are simply expanding a cluster in a single AZ, you can add as many nodes as you wish.<\/p>\n<p>If you are running a cluster spanning multiple AZs, you need to think a bit more about how many nodes you have in each AZ. This is because on EC2, the DataStax AMI sets up Cassandra to use the <a href=\"http:\/\/www.datastax.com\/documentation\/cassandra\/2.1\/cassandra\/architecture\/architectureSnitchEC2_t.html\" target=\"_blank\" rel=\"noopener noreferrer\">EC2Snitch<\/a>. The EC2Snitch maps EC2 AZs to &#8216;racks&#8217; in Cassandra. Since Cassandra tries to make sure it distributes replicas across racks as evenly as possible, it&#8217;s advisable to ensure you have at least an equal number of instances in each AZ to avoid an imbalance of data volume in any AZ.<\/p>\n<p>Once you know how many nodes you&#8217;re launching, you can follow the <a href=\"http:\/\/www.datastax.com\/documentation\/cassandra\/2.1\/cassandra\/install\/installAMILaunch.html\" target=\"_blank\" rel=\"noopener noreferrer\">DataStax Documentation<\/a> on launching the EC2 AMI to get them set up. If you don&#8217;t want to have the latest Cassandra release installed, you need to include the &#8211;release option in the instance user data. This option is not mentioned in the DataStax documentation, but is documented in the ComboAMI README:<\/p>\n<p><code><br \/>\n--release &lt;release_version&gt;<br \/>\nAllows for the installation of a previous DSE version<br \/>\nExample: 1.0.2<br \/>\nDefault: Ignored<br \/>\n<\/code><\/p>\n<p>For example, to launch Cassandra 1.2.8 instances, your user data options will be something like the following:<\/p>\n<p><code><br \/>\n--clustername myDSCcluster --totalnodes # --version community --release 1.2.8<br \/>\n<\/code><\/p>\n<p>Remember to change\u00a0# to the number of nodes you are launching.<\/p>\n<p>Alternatively, I found another python tool called <a href=\"https:\/\/github.com\/joaquincasares\/cassandralauncher\" target=\"_blank\" rel=\"noopener noreferrer\">cassandralauncher<\/a> written by the author of ComboAMI. It is a CLI tool designed to handle configuring and launching a cluster of nodes for you right from the comfort of your command prompt.<\/p>\n<h2>3. Preparing the new nodes<\/h2>\n<p>Follow the <a href=\"http:\/\/www.datastax.com\/documentation\/cassandra\/2.1\/cassandra\/operations\/ops_add_node_to_cluster_t.html\" target=\"_blank\" rel=\"noopener noreferrer\">documentation<\/a> for adding nodes to an existing cluster.<\/p>\n<p>Stop Cassandra, remove the data, and start making the config changes.<\/p>\n<p>Since I was adding nodes running on m1.large instances to a cluster of nodes running on m1.xlarge instances, I halved the num_tokens value to 128 on the new nodes to ensure their token allocation is proportional to their instance capabilities.<\/p>\n<p>At this point I also enabled incremental_backups for a backup script I wrote.<\/p>\n<p>Changing the cluster_name and seed_ips options to match your existing cluster will mean that once Cassandra is restarted on these new nodes with this config, they will be introduced to the existing cluster.<\/p>\n<p>Also make sure you set auto_bootstrap to true to make sure the new node streams its portion of data from other nodes when it joins the cluster.<\/p>\n<h2>4. New nodes, meet the cluster<\/h2>\n<p>Once you&#8217;re happy with the config, it&#8217;s time to restart Cassandra on each new node so they join the cluster. Before starting Cassandra back up, double check your config to ensure the cluster name, seed IPs, snitch, auto_bootstrap and any other config values are all set and correct. Also check that the security group settings for the nodes&#8217; instances are correct to ensure there won&#8217;t be any firewalling getting in the way of node comms.<\/p>\n<p>Slowly add the new nodes to your existing cluster by running <code>service cassandra start<\/code> on each one. The docs say you should wait two minutes between node initialisations, but I actually prefer to wait until all the data has finished streaming to the new node, or at least until it shows up in <code>nodetool status<\/code>. How many nodes you can add at a time depends on your replication factor and number of nodes in the cluster, but for safety it&#8217;s simpler to add one at a time.<\/p>\n<p>Once you start Cassandra on a new node, it will contact the seed IP for ring information, and begin the data streaming process and joining the cluster. Once streaming is complete, it will show up as part of the cluster. This could take a while depending on how much data needs to be transferred to the new node.<\/p>\n<p>While you&#8217;re waiting, the OpsCenter ring view offers a useful visualisation of node states and data migration:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-360\" alt=\"DataStax Cassandra node visualisation\" src=\"https:\/\/www.gosquared.com\/blog\/wp-content\/uploads\/2013\/10\/Screen-Shot-2013-10-11-at-21.33.40.png\" width=\"883\" height=\"843\" \/><\/p>\n<h2>5. Decommissioning old nodes<\/h2>\n<p>If you only needed to add nodes to an existing cluster, congratulations, you&#8217;re done! If you&#8217;re migrating an existing cluster, you&#8217;re nearly there, this is the last step.<\/p>\n<p>Assuming you&#8217;ve booted at least the number of new nodes you&#8217;ll need to take on the load of the original nodes, you can now start to decommission the old nodes.<\/p>\n<p>Before doing so, make sure your applications have been updated to use the new nodes as their Cassandra hosts, so we don&#8217;t get any nasty surprises when the original nodes are shut down.<\/p>\n<p>Run <code>nodetool decommission<\/code> on each original node. This will tell the node to stop receiving writes, flush its data to disk, and start transferring its data to other nodes in the cluster. Wait until the node has finished fully decommissioning and no longer shows up in <code>nodetool status<\/code> before shutting down the instance and moving onto the next node.<\/p>\n<h2>Wrapping up<\/h2>\n<p>It&#8217;s useful to inspect the logs on nodes at every step of this process, just so you can observe what&#8217;s going on and follow what Cassandra is doing: <code>tail -f \/var\/log\/cassandra\/*.log<\/code><\/p>\n<p>The OpsCenter UI is also useful for stats and visualisations of cluster activity.<\/p>\n<p>Even though I was working with Cassandra 1.2.8, the links to official DataStax Cassandra documentation (as of today) were for the v2 documentation rather than v1.2. By and large the documentation pages I linked to did not differ in crucial content, and the v2 docs as a whole are probably more up to date. Be aware of the versions of Cassandra the docs are written for, though, to make sure you don&#8217;t try something incompatible.<\/p>\n","protected":false},"excerpt":{"rendered":"<p><img decoding=\"async\" src=\"\/\/static.gosquared.com\/images\/liquidicity\/13_10_15_cassandra_01.png\" alt=\"DataStax Cassandra at GoSquared\" \/><\/p>\n<p>Recently I was tasked with migrating an existing DataStax Cassandra cluster to a different availability zone (AZ) in AWS EC2. <\/p>\n<p>The migration strategy is fairly simple. The cluster can be migrated one node at a time, by setting up an equivalent number of nodes in the other AZ, adding them into the existing cluster, and then decommissioning each node in the original AZ one by one. This way, the migration is performed gradually while the cluster is online, and without any interruption in service.<\/p>\n<p>This post is a step-by-step guide to migrating or expanding a live Cassandra cluster.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1452],"tags":[],"class_list":["post-8352","post","type-post","status-publish","format-standard","hentry","category-engineering"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v18.6 (Yoast SEO v19.0) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Migrating or expanding a Cassandra Cluster - GoSquared Engineering<\/title>\n<meta name=\"description\" content=\"A step-by-step guide to migrating or expanding a Cassandra cluster live.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.gosquared.com\/blog\/expanding-a-cassandra-cluster\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Migrating or expanding a Cassandra cluster\" \/>\n<meta property=\"og:description\" content=\"A step-by-step guide to migrating or expanding a Cassandra cluster live.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.gosquared.com\/blog\/expanding-a-cassandra-cluster\" \/>\n<meta property=\"og:site_name\" content=\"GoSquared Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/GoSquared\" \/>\n<meta property=\"article:published_time\" content=\"2013-10-15T11:34:59+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-11-28T12:26:44+00:00\" \/>\n<meta property=\"og:image\" content=\"\/\/static.gosquared.com\/images\/liquidicity\/13_10_15_cassandra_01.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@TheDeveloper\" \/>\n<meta name=\"twitter:site\" content=\"@GoSquared\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Geoff Wagstaff\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.gosquared.com\/blog\/#organization\",\"name\":\"GoSquared\",\"url\":\"https:\/\/www.gosquared.com\/blog\/\",\"sameAs\":[\"https:\/\/instagram.com\/gosquaredteam\",\"https:\/\/www.linkedin.com\/company\/go-squared-ltd.\",\"https:\/\/www.facebook.com\/GoSquared\",\"https:\/\/twitter.com\/GoSquared\"],\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.gosquared.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.gosquared.com\/blog\/wp-content\/uploads\/2015\/07\/gosquared.png\",\"contentUrl\":\"https:\/\/www.gosquared.com\/blog\/wp-content\/uploads\/2015\/07\/gosquared.png\",\"width\":1270,\"height\":250,\"caption\":\"GoSquared\"},\"image\":{\"@id\":\"https:\/\/www.gosquared.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.gosquared.com\/blog\/#website\",\"url\":\"https:\/\/www.gosquared.com\/blog\/\",\"name\":\"GoSquared Blog\",\"description\":\"Turn visitors into customers.\",\"publisher\":{\"@id\":\"https:\/\/www.gosquared.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.gosquared.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.gosquared.com\/blog\/expanding-a-cassandra-cluster#primaryimage\",\"url\":\"https:\/\/www.gosquared.com\/blog\/wp-content\/uploads\/2013\/10\/Screen-Shot-2013-10-11-at-21.33.40.png\",\"contentUrl\":\"https:\/\/www.gosquared.com\/blog\/wp-content\/uploads\/2013\/10\/Screen-Shot-2013-10-11-at-21.33.40.png\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.gosquared.com\/blog\/expanding-a-cassandra-cluster#webpage\",\"url\":\"https:\/\/www.gosquared.com\/blog\/expanding-a-cassandra-cluster\",\"name\":\"Migrating or expanding a Cassandra Cluster - GoSquared Engineering\",\"isPartOf\":{\"@id\":\"https:\/\/www.gosquared.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.gosquared.com\/blog\/expanding-a-cassandra-cluster#primaryimage\"},\"datePublished\":\"2013-10-15T11:34:59+00:00\",\"dateModified\":\"2019-11-28T12:26:44+00:00\",\"description\":\"A step-by-step guide to migrating or expanding a Cassandra cluster live.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.gosquared.com\/blog\/expanding-a-cassandra-cluster#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.gosquared.com\/blog\/expanding-a-cassandra-cluster\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.gosquared.com\/blog\/expanding-a-cassandra-cluster#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.gosquared.com\/blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Migrating or expanding a Cassandra cluster\"}]},{\"@type\":\"Article\",\"@id\":\"https:\/\/www.gosquared.com\/blog\/expanding-a-cassandra-cluster#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.gosquared.com\/blog\/expanding-a-cassandra-cluster#webpage\"},\"author\":{\"@id\":\"https:\/\/www.gosquared.com\/blog\/#\/schema\/person\/56a3341790c8a0603f96066fb8d42448\"},\"headline\":\"Migrating or expanding a Cassandra cluster\",\"datePublished\":\"2013-10-15T11:34:59+00:00\",\"dateModified\":\"2019-11-28T12:26:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.gosquared.com\/blog\/expanding-a-cassandra-cluster#webpage\"},\"wordCount\":1221,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\/\/www.gosquared.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.gosquared.com\/blog\/expanding-a-cassandra-cluster#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.gosquared.com\/blog\/wp-content\/uploads\/2013\/10\/Screen-Shot-2013-10-11-at-21.33.40.png\",\"articleSection\":[\"Engineering\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.gosquared.com\/blog\/expanding-a-cassandra-cluster#respond\"]}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.gosquared.com\/blog\/#\/schema\/person\/56a3341790c8a0603f96066fb8d42448\",\"name\":\"Geoff Wagstaff\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.gosquared.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/66792d2e4d04406697b9a5f322664691590a386bc15b7146d143bbca07aa8889?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/66792d2e4d04406697b9a5f322664691590a386bc15b7146d143bbca07aa8889?s=96&d=mm&r=g\",\"caption\":\"Geoff Wagstaff\"},\"sameAs\":[\"https:\/\/twitter.com\/TheDeveloper\"],\"url\":\"https:\/\/www.gosquared.com\/blog\/author\/echo\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Migrating or expanding a Cassandra Cluster - GoSquared Engineering","description":"A step-by-step guide to migrating or expanding a Cassandra cluster live.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.gosquared.com\/blog\/expanding-a-cassandra-cluster","og_locale":"en_US","og_type":"article","og_title":"Migrating or expanding a Cassandra cluster","og_description":"A step-by-step guide to migrating or expanding a Cassandra cluster live.","og_url":"https:\/\/www.gosquared.com\/blog\/expanding-a-cassandra-cluster","og_site_name":"GoSquared Blog","article_publisher":"https:\/\/www.facebook.com\/GoSquared","article_published_time":"2013-10-15T11:34:59+00:00","article_modified_time":"2019-11-28T12:26:44+00:00","og_image":[{"url":"\/\/static.gosquared.com\/images\/liquidicity\/13_10_15_cassandra_01.png"}],"twitter_card":"summary_large_image","twitter_creator":"@TheDeveloper","twitter_site":"@GoSquared","twitter_misc":{"Written by":"Geoff Wagstaff","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Organization","@id":"https:\/\/www.gosquared.com\/blog\/#organization","name":"GoSquared","url":"https:\/\/www.gosquared.com\/blog\/","sameAs":["https:\/\/instagram.com\/gosquaredteam","https:\/\/www.linkedin.com\/company\/go-squared-ltd.","https:\/\/www.facebook.com\/GoSquared","https:\/\/twitter.com\/GoSquared"],"logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.gosquared.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.gosquared.com\/blog\/wp-content\/uploads\/2015\/07\/gosquared.png","contentUrl":"https:\/\/www.gosquared.com\/blog\/wp-content\/uploads\/2015\/07\/gosquared.png","width":1270,"height":250,"caption":"GoSquared"},"image":{"@id":"https:\/\/www.gosquared.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"WebSite","@id":"https:\/\/www.gosquared.com\/blog\/#website","url":"https:\/\/www.gosquared.com\/blog\/","name":"GoSquared Blog","description":"Turn visitors into customers.","publisher":{"@id":"https:\/\/www.gosquared.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.gosquared.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.gosquared.com\/blog\/expanding-a-cassandra-cluster#primaryimage","url":"https:\/\/www.gosquared.com\/blog\/wp-content\/uploads\/2013\/10\/Screen-Shot-2013-10-11-at-21.33.40.png","contentUrl":"https:\/\/www.gosquared.com\/blog\/wp-content\/uploads\/2013\/10\/Screen-Shot-2013-10-11-at-21.33.40.png"},{"@type":"WebPage","@id":"https:\/\/www.gosquared.com\/blog\/expanding-a-cassandra-cluster#webpage","url":"https:\/\/www.gosquared.com\/blog\/expanding-a-cassandra-cluster","name":"Migrating or expanding a Cassandra Cluster - GoSquared Engineering","isPartOf":{"@id":"https:\/\/www.gosquared.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.gosquared.com\/blog\/expanding-a-cassandra-cluster#primaryimage"},"datePublished":"2013-10-15T11:34:59+00:00","dateModified":"2019-11-28T12:26:44+00:00","description":"A step-by-step guide to migrating or expanding a Cassandra cluster live.","breadcrumb":{"@id":"https:\/\/www.gosquared.com\/blog\/expanding-a-cassandra-cluster#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.gosquared.com\/blog\/expanding-a-cassandra-cluster"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.gosquared.com\/blog\/expanding-a-cassandra-cluster#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.gosquared.com\/blog"},{"@type":"ListItem","position":2,"name":"Migrating or expanding a Cassandra cluster"}]},{"@type":"Article","@id":"https:\/\/www.gosquared.com\/blog\/expanding-a-cassandra-cluster#article","isPartOf":{"@id":"https:\/\/www.gosquared.com\/blog\/expanding-a-cassandra-cluster#webpage"},"author":{"@id":"https:\/\/www.gosquared.com\/blog\/#\/schema\/person\/56a3341790c8a0603f96066fb8d42448"},"headline":"Migrating or expanding a Cassandra cluster","datePublished":"2013-10-15T11:34:59+00:00","dateModified":"2019-11-28T12:26:44+00:00","mainEntityOfPage":{"@id":"https:\/\/www.gosquared.com\/blog\/expanding-a-cassandra-cluster#webpage"},"wordCount":1221,"commentCount":2,"publisher":{"@id":"https:\/\/www.gosquared.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.gosquared.com\/blog\/expanding-a-cassandra-cluster#primaryimage"},"thumbnailUrl":"https:\/\/www.gosquared.com\/blog\/wp-content\/uploads\/2013\/10\/Screen-Shot-2013-10-11-at-21.33.40.png","articleSection":["Engineering"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.gosquared.com\/blog\/expanding-a-cassandra-cluster#respond"]}]},{"@type":"Person","@id":"https:\/\/www.gosquared.com\/blog\/#\/schema\/person\/56a3341790c8a0603f96066fb8d42448","name":"Geoff Wagstaff","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.gosquared.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/66792d2e4d04406697b9a5f322664691590a386bc15b7146d143bbca07aa8889?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/66792d2e4d04406697b9a5f322664691590a386bc15b7146d143bbca07aa8889?s=96&d=mm&r=g","caption":"Geoff Wagstaff"},"sameAs":["https:\/\/twitter.com\/TheDeveloper"],"url":"https:\/\/www.gosquared.com\/blog\/author\/echo"}]}},"wps_subtitle":"A how-to on growing your own Cassandra cluster","_links":{"self":[{"href":"https:\/\/www.gosquared.com\/blog\/wp-json\/wp\/v2\/posts\/8352","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gosquared.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gosquared.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gosquared.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gosquared.com\/blog\/wp-json\/wp\/v2\/comments?post=8352"}],"version-history":[{"count":0,"href":"https:\/\/www.gosquared.com\/blog\/wp-json\/wp\/v2\/posts\/8352\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gosquared.com\/blog\/wp-json\/wp\/v2\/media?parent=8352"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gosquared.com\/blog\/wp-json\/wp\/v2\/categories?post=8352"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gosquared.com\/blog\/wp-json\/wp\/v2\/tags?post=8352"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}