<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Cassandra on Alteroot:~#</title>
    <link>https://blog.alteroot.org/categories/cassandra.html</link>
    <description>Recent content in Cassandra on Alteroot:~#</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Tue, 22 Sep 2015 13:00:00 +0000</lastBuildDate>
    <atom:link href="https://blog.alteroot.org/categories/cassandra/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Enhance Apache Cassandra Logging</title>
      <link>https://blog.alteroot.org/articles/2015-09-22/enhance-apache-cassandra-logging.html</link>
      <pubDate>Tue, 22 Sep 2015 13:00:00 +0000</pubDate>
      <guid>https://blog.alteroot.org/articles/2015-09-22/enhance-apache-cassandra-logging.html</guid>
      <description>&lt;p&gt;Cassandra usually output all its logs in a system.log file. It uses log4j &lt;a href=&#34;https://logging.apache.org/log4j/1.2/&#34;&gt;old 1.2 version&lt;/a&gt; for cassandra 2.0, and &lt;a href=&#34;https://issues.apache.org/jira/browse/CASSANDRA-5883&#34;&gt;since 2.1&lt;/a&gt;, &lt;a href=&#34;http://logback.qos.ch/&#34;&gt;logback&lt;/a&gt;, which of course use different syntax :)&lt;br&gt;&#xA;Logs can be enhanced with some configuration. These explanations works with Cassandra 2.0.x and Cassandra 2.1.x, I haven&amp;rsquo;t tested others versions yet.&lt;/p&gt;&#xA;&lt;p&gt;I wanted to split logs in different files, depending on their &amp;ldquo;sources&amp;rdquo; (repair, compaction, tombstones etc), to ease debugging, while keeping the system.log as usual.&lt;/p&gt;&#xA;&lt;p&gt;For example, to declare 2 new files to handle, say Repair and Tombstones logs :&lt;/p&gt;&#xA;&lt;p&gt;Cassandra 2.0 :&lt;/p&gt;&#xA;&lt;p&gt;You need to declare each new log files in &lt;a href=&#34;http://docs.datastax.com/en/cassandra/2.0/cassandra/configuration/configLoggingLevels_t.html&#34;&gt;log4j-server.properties&lt;/a&gt; file.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;...&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## Repair&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;log4j.appender.Repair&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;org.apache.log4j.RollingFileAppender&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;log4j.appender.Repair.maxFileSize&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;20MB&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;log4j.appender.Repair.maxBackupIndex&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;log4j.appender.Repair.layout&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;org.apache.log4j.PatternLayout&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;log4j.appender.Repair.layout.ConversionPattern&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;%5p &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;%t&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; %d&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;ISO8601&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; %F &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line %L&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; %m%n&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## Edit the next line to point to your logs directory&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;log4j.appender.Repair.File&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/var/log/cassandra/repair.log&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## Tombstones&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;log4j.appender.Tombstones&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;org.apache.log4j.RollingFileAppender&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;log4j.appender.Tombstones.maxFileSize&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;20MB&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;log4j.appender.Tombstones.maxBackupIndex&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;log4j.appender.Tombstones.layout&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;org.apache.log4j.PatternLayout&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;log4j.appender.Tombstones.layout.ConversionPattern&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;%5p &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;%t&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; %d&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;ISO8601&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; %F &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line %L&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; %m%n&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;### Edit the next line to point to your logs directory&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;log4j.appender.Tombstones.File&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/home/log/cassandra/tombstones.log&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Cassandra 2.1 :&lt;/p&gt;&#xA;&lt;p&gt;It is in the &lt;a href=&#34;http://docs.datastax.com/en/cassandra/2.1/cassandra/configuration/configLoggingLevels_r.html&#34;&gt;logback.xml&lt;/a&gt; file.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;appender name&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Repair&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;=&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ch&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;qos&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;logback&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;core&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;rolling&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;RollingFileAppender&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    &amp;lt;file&amp;gt;${cassandra.logdir}/repair.log&amp;lt;/file&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    &amp;lt;rollingPolicy class=&amp;#34;&lt;/span&gt;ch.&lt;span style=&#34;color:#a6e22e&#34;&gt;qos&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;logback&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;core&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;rolling&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;FixedWindowRollingPolicy&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      &amp;lt;fileNamePattern&amp;gt;${cassandra.logdir}/system.log.%i.zip&amp;lt;/fileNamePattern&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      &amp;lt;minIndex&amp;gt;1&amp;lt;/minIndex&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      &amp;lt;maxIndex&amp;gt;20&amp;lt;/maxIndex&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    &amp;lt;/rollingPolicy&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    &amp;lt;triggeringPolicy class=&amp;#34;&lt;/span&gt;ch.&lt;span style=&#34;color:#a6e22e&#34;&gt;qos&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;logback&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;core&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;rolling&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SizeBasedTriggeringPolicy&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      &amp;lt;maxFileSize&amp;gt;20MB&amp;lt;/maxFileSize&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    &amp;lt;/triggeringPolicy&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    &amp;lt;encoder&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      &amp;lt;pattern&amp;gt;%-5level [%thread] %date{ISO8601} %F:%L - %msg%n&amp;lt;/pattern&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      &amp;lt;!-- old-style log format&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      &amp;lt;pattern&amp;gt;%5level [%thread] %date{ISO8601} %F (line %L) %msg%n&amp;lt;/pattern&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      --&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    &amp;lt;/encoder&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;lt;/appender&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;lt;appender name=&amp;#34;&lt;/span&gt;Tombstones&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; class=&amp;#34;&lt;/span&gt;ch.&lt;span style=&#34;color:#a6e22e&#34;&gt;qos&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;logback&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;core&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;rolling&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;RollingFileAppender&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    &amp;lt;file&amp;gt;${cassandra.logdir}/tombstones.log&amp;lt;/file&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    &amp;lt;rollingPolicy class=&amp;#34;&lt;/span&gt;ch.&lt;span style=&#34;color:#a6e22e&#34;&gt;qos&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;logback&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;core&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;rolling&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;FixedWindowRollingPolicy&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      &amp;lt;fileNamePattern&amp;gt;${cassandra.logdir}/tombstones.log.%i.zip&amp;lt;/fileNamePattern&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      &amp;lt;minIndex&amp;gt;1&amp;lt;/minIndex&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      &amp;lt;maxIndex&amp;gt;20&amp;lt;/maxIndex&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    &amp;lt;/rollingPolicy&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    &amp;lt;triggeringPolicy class=&amp;#34;&lt;/span&gt;ch.&lt;span style=&#34;color:#a6e22e&#34;&gt;qos&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;logback&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;core&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;rolling&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SizeBasedTriggeringPolicy&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      &amp;lt;maxFileSize&amp;gt;20MB&amp;lt;/maxFileSize&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    &amp;lt;/triggeringPolicy&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    &amp;lt;encoder&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      &amp;lt;pattern&amp;gt;%-5level [%thread] %date{ISO8601} %F:%L - %msg%n&amp;lt;/pattern&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      &amp;lt;!-- old-style log format&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      &amp;lt;pattern&amp;gt;%5level [%thread] %date{ISO8601} %F (line %L) %msg%n&amp;lt;/pattern&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      --&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    &amp;lt;/encoder&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;lt;/appender&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now that theses new files are declared, we need to fill them with logs. To do that, simply redirect some Java class to the good file. To redirect the class org.apache.cassandra.db.filter.SliceQueryFilter, loglevel WARN  to the Tombstone file, simply add :&lt;/p&gt;&#xA;&lt;p&gt;Cassandra 2.0 :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;log4j.logger.org.apache.cassandra.db.filter.SliceQueryFilter&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;WARN,Tombstones&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Cassandra 2.1 :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;logger name&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;org.apache.cassandra.db.filter.SliceQueryFilter&amp;#34;&lt;/span&gt; level&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;WARN&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;appender&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;ref ref&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Tombstones&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/&lt;/span&gt;logger&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It&amp;rsquo;s a on-the-fly configuration, so no need to restart Cassandra !&lt;br&gt;&#xA;Now you will have dedicated files for each kind of logs.&lt;/p&gt;&#xA;&lt;p&gt;A list of interesting Cassandra classes :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;org.apache.cassandra.service.StorageService, WARN : Repair&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;org.apache.cassandra.net.OutboundTcpConnection, DEBUG : Repair &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;haha, theses fucking stuck repair&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;org.apache.cassandra.repair, INFO : Repair&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;org.apache.cassandra.db.HintedHandOffManager, DEBUG : Repair&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;org.apache.cassandra.streaming.StreamResultFuture, DEBUG : Repair &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;org.apache.cassandra.cql3.statements.BatchStatement, WARN : Statements&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;org.apache.cassandra.db.filter.SliceQueryFilter, WARN : Tombstones&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can find from which java class a log message come from by adding &amp;ldquo;%c&amp;rdquo; in log4j/logback &amp;ldquo;ConversionPattern&amp;rdquo; :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;org.apache.cassandra.db.ColumnFamilyStore INFO  &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;BatchlogTasks:1&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; 2015-09-18 16:43:48,261 ColumnFamilyStore.java:939 - Enqueuing flush of batchlog: &lt;span style=&#34;color:#ae81ff&#34;&gt;226172&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;0%&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; on-heap, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;0%&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; off-heap&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;org.apache.cassandra.db.Memtable INFO  &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;MemtableFlushWriter:4213&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; 2015-09-18 16:43:48,262 Memtable.java:347 - Writing Memtable-batchlog@1145616338&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;195.566KiB serialized bytes, &lt;span style=&#34;color:#ae81ff&#34;&gt;205&lt;/span&gt; ops, 0%/0% of on/off-heap limit&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;org.apache.cassandra.db.Memtable INFO  &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;MemtableFlushWriter:4213&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; 2015-09-18 16:43:48,264 Memtable.java:393 - Completed flushing /home/cassandra/data/system/batchlog/system-batchlog-tmp-ka-4267-Data.db; nothing needed to be retained.  Commitlog position was ReplayPosition&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;segmentId&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;1442331704273, position&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;17281204&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can disable &amp;ldquo;additivity&amp;rdquo; (i.e avoid adding messages in system.log for example) in log4j for a specific class by adding :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;log4j.additivity.org.apache.cassandra.db.filter.SliceQueryFilter&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;false&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For logback, you can add additivity=&amp;ldquo;false&amp;rdquo; to &amp;lt;logger .../&amp;gt; elements.&lt;/p&gt;&#xA;&lt;p&gt;To migrate from log4j logs to logback.xml, you can look at &lt;a href=&#34;http://logback.qos.ch/translator/&#34;&gt;http://logback.qos.ch/translator/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Sources :&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://docs.datastax.com/en/cassandra/2.1/cassandra/configuration/configLoggingLevels_r.html&#34;&gt;http://docs.datastax.com/en/cassandra/2.1/cassandra/configuration/configLoggingLevels_r.html&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://docs.datastax.com/en/cassandra/2.0/cassandra/configuration/configLoggingLevels_t.html&#34;&gt;http://docs.datastax.com/en/cassandra/2.0/cassandra/configuration/configLoggingLevels_t.html&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://logging.apache.org/log4j/1.2/manual.html&#34;&gt;https://logging.apache.org/log4j/1.2/manual.html&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://logback.qos.ch/manual/appenders.html&#34;&gt;http://logback.qos.ch/manual/appenders.html&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Note: you can add &lt;a href=&#34;http://blog.alteroot.org/feed.cassandra.xml&#34;&gt;http://blog.alteroot.org/feed.cassandra.xml&lt;/a&gt; to your rss aggregator to follow all my Cassandra posts :)&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>How to change Cassandra compaction strategy on a production cluster</title>
      <link>https://blog.alteroot.org/articles/2015-04-20/how-to-change-cassandra-compaction-strategy-on-a-production-cluster.html</link>
      <pubDate>Mon, 20 Apr 2015 12:00:00 +0000</pubDate>
      <guid>https://blog.alteroot.org/articles/2015-04-20/how-to-change-cassandra-compaction-strategy-on-a-production-cluster.html</guid>
      <description>&lt;p&gt;I&amp;rsquo;ll talk about changing Cassandra CompactionStrategy on a live production Cluster.&lt;br&gt;&#xA;First of all, an extract of the &lt;a href=&#34;http://docs.datastax.com/en/cassandra/2.0/cassandra/dml/dml_write_path_c.html&#34;&gt;Cassandra documentation&lt;/a&gt; :&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Periodic compaction is essential to a healthy Cassandra database because Cassandra does not insert/update in place. As inserts/updates occur, instead of overwriting the rows, Cassandra writes a new timestamped version of the inserted or updated data in another SSTable. Cassandra manages the accumulation of SSTables on disk using compaction. Cassandra also does not delete in place because the SSTable is immutable. Instead, Cassandra marks data to be deleted using a tombstone.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;By default, Cassandra use SizeTieredCompactionStrategyi (STC). This strategy triggers a minor compaction when there are a number of similar sized SSTables on disk as configured by the table subproperty, 4 by default.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Another compaction strategy available since &lt;a href=&#34;http://www.datastax.com/dev/blog/leveled-compaction-in-apache-cassandra&#34;&gt;Cassandra 1.0 &lt;/a&gt; is &lt;a href=&#34;http://www.datastax.com/dev/blog/leveled-compaction-in-apache-cassandra&#34;&gt;LeveledCompactionStrategy (LCS)&lt;/a&gt; based on &lt;a href=&#34;https://github.com/google/leveldb&#34;&gt;LevelDB&lt;/a&gt;.&lt;br&gt;&#xA;Since 2.0.11, &lt;a href=&#34;http://www.datastax.com/dev/blog/datetieredcompactionstrategy&#34;&gt;DateTieredCompactionStrategy&lt;/a&gt; is also available.&lt;/p&gt;&#xA;&lt;p&gt;Depending on your needs, you may need to change the compaction strategy on a running cluster. Change this setting involves rewrite ALL sstables to the new strategy, which may take long time and can be cpu / i/o intensive.&lt;/p&gt;&#xA;&lt;p&gt;I needed to change the compaction strategy on my production cluster to LeveledCompactionStrategy because of our workflow : lot of updates and deletes, wide rows etc.&lt;br&gt;&#xA;Moreover, with the default STC, progressively the largest SSTable that is created will not be compacted until the amount of actual data increases four-fold. So it can take long time before old data are really deleted !&lt;/p&gt;&#xA;&lt;p&gt;Note: You can test a new compactionStrategy on one new node with the write_survey bootstrap option. See the &lt;a href=&#34;http://www.datastax.com/dev/blog/whats-new-in-cassandra-1-1-live-traffic-sampling&#34;&gt;datastax blogpost&lt;/a&gt; about it.&lt;/p&gt;&#xA;&lt;p&gt;The basic procedure to change the CompactionStrategy is to alter the table via cql :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cqlsh&amp;gt; ALTER TABLE mykeyspace.mytable  WITH compaction &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;class&amp;#39;&lt;/span&gt; :  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;LeveledCompactionStrategy&amp;#39;&lt;/span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If you run alter table to change to LCS like that, all nodes will recompact data at the same time, so performances problems can occurs for hours/days…&lt;/p&gt;&#xA;&lt;p&gt;A better solution is to &lt;strong&gt;migrate nodes by nodes&lt;/strong&gt; !&lt;/p&gt;&#xA;&lt;p&gt;You need to change the compaction locally on-the-fly, via the JMX, like in write_survey mode.&lt;br&gt;&#xA;I use &lt;a href=&#34;http://wiki.cyclopsgroup.org/jmxterm/&#34;&gt;jmxterm&lt;/a&gt; for that. I think I&amp;rsquo;ll write articles about all theses jmx things :)&lt;br&gt;&#xA;For example, to change to LCS on &lt;em&gt;mytable&lt;/em&gt; table with jmxterm :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;~ java -jar jmxterm-1.0-alpha-4-uber.jar --url instance1:7199                                                      &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Welcome to JMX terminal. Type &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;help&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; available commands.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$&amp;gt;domain org.apache.cassandra.db&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#domain is set to org.apache.cassandra.db&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$&amp;gt;bean org.apache.cassandra.db:columnfamily&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;mytable,keyspace&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;mykeyspace,type&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;ColumnFamilies&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#bean is set to org.apache.cassandra.db:columnfamily=mytable,keyspace=mykeyspace,type=ColumnFamilies&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$&amp;gt;get CompactionStrategyClass&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#mbean = org.apache.cassandra.db:columnfamily=mytable,keyspace=mykeyspace,type=ColumnFamilies:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CompactionStrategyClass &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$&amp;gt;set CompactionStrategyClass &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;org.apache.cassandra.db.compaction.LeveledCompactionStrategy&amp;#34;&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#Value of attribute CompactionStrategyClass is set to &amp;#34;org.apache.cassandra.db.compaction.LeveledCompactionStrategy&amp;#34; &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A nice one-liner :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;~ echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;set -b org.apache.cassandra.db:columnfamily=mytable,keyspace=mykeyspace,type=ColumnFamilies CompactionStrategyClass org.apache.cassandra.db.compaction.LeveledCompactionStrategy&amp;#34;&lt;/span&gt; | java -jar jmxterm-1.0-alpha-4-uber.jar --url instance1:7199&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On next commitlog flush, the node will start it compaction to rewrite all it &lt;em&gt;mytable&lt;/em&gt; sstables to the new strategy.&lt;/p&gt;&#xA;&lt;p&gt;You can see the progression with nodetool :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;~ nodetool compactionstats&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pending tasks: &lt;span style=&#34;color:#ae81ff&#34;&gt;48&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;compaction type        keyspace           table       completed           total      unit  progress&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Compaction        mykeyspace       mytable      &lt;span style=&#34;color:#ae81ff&#34;&gt;4204151584&lt;/span&gt;     &lt;span style=&#34;color:#ae81ff&#34;&gt;25676012644&lt;/span&gt;     bytes    16.37%&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Active compaction remaining time :   0h23m30s&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You need to wait for the node to recompact all it sstables, then change the strategy to instance2, etc.&lt;br&gt;&#xA;The transition will be done in multiple compactions if you have lots of data. By default new sstables will be 160MB large.&lt;/p&gt;&#xA;&lt;p&gt;you can monitor you table with nodetool cfstats too :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;~ nodetool cfstats mykeyspace.mytable&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;...&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Pending Tasks: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;Table: sort&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;SSTable count: &lt;span style=&#34;color:#ae81ff&#34;&gt;31&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;SSTables in each level: &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;31/4, 0, 0, 0, 0, 0, 0, 0, 0&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;...&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can see the 31/4 : it means that there is 31 sstables in L0, whereas cassandra try to have only 4 in L0.&lt;/p&gt;&#xA;&lt;p&gt;Taken from the code ( src/java/org/apache/cassandra/db/compaction/LeveledManifest.java )&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;...&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// L0: 988 [ideal: 4]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// L1: 117 [ideal: 10]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// L2: 12  [ideal: 100]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;...&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When all nodes have the new strategy, let&amp;rsquo;s go for the global alter table.&#xA;&lt;strong&gt;/!\ If a node restart before the final alter table, it will recompact to default strategy (SizeTiered)!&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;~ cqlsh &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cqlsh&amp;gt; ALTER TABLE mykeyspace.mytable  WITH compaction &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;class&amp;#39;&lt;/span&gt; :  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;LeveledCompactionStrategy&amp;#39;&lt;/span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et voilà, I hope this article will help you :)&lt;/p&gt;&#xA;&lt;p&gt;My latest Cassandra blogpost was &lt;a href=&#34;http://blog.alteroot.org/articles/2014-03-12/replace-a-dead-node-in-cassandra.html&#34;&gt;one year ago&lt;/a&gt;…  I have several in mind (jmx things !) so stay tuned !&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Replace a dead node in Cassandra</title>
      <link>https://blog.alteroot.org/articles/2014-03-12/replace-a-dead-node-in-cassandra.html</link>
      <pubDate>Wed, 12 Mar 2014 00:00:00 +0000</pubDate>
      <guid>https://blog.alteroot.org/articles/2014-03-12/replace-a-dead-node-in-cassandra.html</guid>
      <description>&lt;p&gt;Note (June 2020): this article is old and not really revelant anymore. If you use a modern version of cassandra, look at &lt;a href=&#34;https://cassandra.apache.org/doc/latest/operating/topo_changes.html#replacing-a-dead-node&#34;&gt;&lt;code&gt;-Dcassandra.replace_address_first_boot&lt;/code&gt;&lt;/a&gt; option !&lt;/p&gt;&#xA;&lt;p&gt;I want to share some tips about my experimentations with Cassandra (version 2.0.x).&lt;/p&gt;&#xA;&lt;p&gt;I found some documentations on &lt;a href=&#34;http://www.datastax.com&#34;&gt;datastax&lt;/a&gt; website about &lt;a href=&#34;http://www.datastax.com/documentation/cassandra/2.0/cassandra/operations/ops_replace_node_t.html&#34;&gt;replacing a dead node&lt;/a&gt;, but it is not suitable for our needs, because in case of hardware crash, we will set up a new node with exactly the same IP (replace &amp;ldquo;in place&amp;rdquo;). &lt;em&gt;Update : the documentation in now up to date on datastax !&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you try to start the new node with the same IP, cassandra doesn&amp;rsquo;t start with :&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;java.lang.RuntimeException: A node with address /10.20.10.2 already exists, cancelling join. Use cassandra.replace_address if you want to replace this node.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So, we need to use the &amp;ldquo;cassandra.replace_address&amp;rdquo; directive (which is not really documented ? :()&#xA;See &lt;a href=&#34;https://git-wip-us.apache.org/repos/asf?p=cassandra.git;a=commitdiff;h=351d43ef&#34;&gt;this commit&lt;/a&gt; and &lt;a href=&#34;https://issues.apache.org/jira/browse/CASSANDRA-5916&#34;&gt;this bug report&lt;/a&gt;, available since 1.2.11/2.0.0, it&amp;rsquo;s an easier solution and it works.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;+    - New replace_address to supplant the (now removed) replace_token and&#xA;+      replace_node workflows to replace a dead node in place.  Works like the&#xA;+      old options, but takes the IP address of the node to be replaced.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;It&amp;rsquo;s a JVM directive, so we can add it at the end of /etc/cassandra/cassandra-env.sh (debian package), for example:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;JVM_OPTS=&amp;quot;$JVM_OPTS -Dcassandra.replace_address=10.20.10.2&amp;quot; &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Of course, 10.20.10.2 = ip of your dead/new node.&lt;/p&gt;&#xA;&lt;p&gt;Now, start cassandra, and in logs you will see :&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;INFO [main] 2014-03-10 14:58:17,804 StorageService.java (line 941) JOINING: schema complete, ready to bootstrap&#xA;INFO [main] 2014-03-10 14:58:17,805 StorageService.java (line 941) JOINING: waiting for pending range calculation&#xA;INFO [main] 2014-03-10 14:58:17,805 StorageService.java (line 941) JOINING: calculation complete, ready to bootstrap&#xA;INFO [main] 2014-03-10 14:58:17,805 StorageService.java (line 941) JOINING: Replacing a node with token(s): [...]&#xA;[...]&#xA;INFO [main] 2014-03-10 14:58:17,844 StorageService.java (line 941) JOINING: Starting to bootstrap...&#xA;INFO [main] 2014-03-10 14:58:18,551 StreamResultFuture.java (line 82) [Stream #effef960-6efe-11e3-9a75-3f94ec5476e9] Executing streaming plan for Bootstrap&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Node is in boostraping mode and will retrieve data from cluster. This may take lots of time.&lt;br&gt;&#xA;If the node is a seed node, a warning will indicate that the node did not auto bootstrap. This is normal, you need to run a &lt;a href=&#34;http://www.datastax.com/documentation/cassandra/2.0/cassandra/operations/ops_replace_seed_node.html&#34;&gt;nodetool repair&lt;/a&gt; on the node.&lt;/p&gt;&#xA;&lt;p&gt;On the new node :&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;# nodetools netstats&#xA;&#xA;Mode: JOINING&#xA;Bootstrap effef960-6efe-11e3-9a75-3f94ec5476e9&#xA;    /10.20.10.1&#xA;&#x9;Receiving 102 files, 17467071157 bytes total&#xA;[...]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;After some time, you will see some informations on logs !&lt;br&gt;&#xA;On the new node :&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; INFO [STREAM-IN-/10.20.10.1] 2014-03-10 15:15:40,363 StreamResultFuture.java (line 215) [Stream #effef960-6efe-11e3-9a75-3f94ec5476e9] All sessions completed&#xA; INFO [main] 2014-03-10 15:15:40,366 StorageService.java (line 970) Bootstrap completed! for the tokens [...]&#xA;[...]&#xA; INFO [main] 2014-03-10 15:15:40,412 StorageService.java (line 1371) Node /10.20.10.2 state jump to normal&#xA; WARN [main] 2014-03-10 15:15:40,413 StorageService.java (line 1378) Not updating token metadata for /10.20.30.51 because I am replacing it&#xA; INFO [main] 2014-03-10 15:15:40,419 StorageService.java (line 821) Startup completed! Now serving reads.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;And on other nodes :&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; INFO [GossipStage:1] 2014-03-10 15:15:40,625 StorageService.java (line 1371) Node /10.20.10.2 state jump to normal&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Et voilà, dead node has been replaced !&lt;br&gt;&#xA;Don&amp;rsquo;t forget to &lt;strong&gt;REMOVE&lt;/strong&gt; modifications on cassandra-env.sh after the complete bootstrap !&lt;/p&gt;&#xA;&lt;p&gt;Enjoy !&lt;/p&gt;&#xA;</description>
    </item>
  </channel>
</rss>
