<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>LINBIT Blogs</title>
	<atom:link href="http://blogs.linbit.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogs.linbit.com</link>
	<description>Tips and Tricks, Hints and Solutions around Linux High-Availability</description>
	<lastBuildDate>Wed, 16 May 2012 09:39:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>&#8220;read-balancing&#8221; with 8.4.1+</title>
		<link>http://blogs.linbit.com/p/246/read-balancing/</link>
		<comments>http://blogs.linbit.com/p/246/read-balancing/#comments</comments>
		<pubDate>Wed, 09 May 2012 06:45:18 +0000</pubDate>
		<dc:creator>Flip</dc:creator>
				<category><![CDATA[drbd]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[read]]></category>

		<guid isPermaLink="false">http://blogs.linbit.com/?p=246</guid>
		<description><![CDATA[DRBD 8.4.1 introduces a new feature: read-balancing, which is configured in the disk section of the configuration file(s). This feature enables DRBD to balance read requests between the Primary/Secondary nodes. While writes occur on both sides of the cluster, by &#8230; <a href="http://blogs.linbit.com/p/246/read-balancing/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>DRBD 8.4.1 introduces a new feature: <code>read-balancing</code>, which is configured in the <code>disk</code> section of the configuration file(s). This feature enables DRBD to balance read requests between the Primary/Secondary nodes.</p>
<p>While writes occur on both sides of the cluster, by default the reads are served locally (ie., the value is <code>prefer-local</code>). This might not be optimal if you&#8217;ve got a big pipe to the other node and a heavily loaded IO subsystem.</p>
<p><code>read-balancing</code> has several options to choose from:</p>
<ul>
<li><code>32K-striping</code> up to <code>1M-striping</code> chooses the node to read from via the block address &#8211; eg. for <code>512K-striping</code> the first half of each MiByte would be read from one machine, and the second half from the other<sup class='footnote'><a href='http://blogs.linbit.com/p/246/read-balancing/#fn-246-1' id='fnref-246-1' onclick='return fdfootnote_show(246)'>1</a></sup>.<br />
This is a simple, static load-balancing.</li>
<li><code>round-robin</code> just passes the request to alternating nodes.<br />
This might go wrong if your application reads 4kiB, 1MiB, 4kiB, 1MiB, and so on &#8211; but this is fairly unlikely.</li>
<li><code>least-pending</code> chooses the node with the smallest number of open requests.</li>
<li><code>when-congested-remote</code> uses the remote node if there are local requests<sup class='footnote'><a href='http://blogs.linbit.com/p/246/read-balancing/#fn-246-2' id='fnref-246-2' onclick='return fdfootnote_show(246)'>2</a></sup>.</li>
<li><code>prefer-remote</code> is implemented for completeness, however as of this writing there is no viable use case.</li>
</ul>
<p>Please note that all this is still <strong>below</strong> the filesystem layer &#8211; so even if the secondary is used for reading, this won&#8217;t speed up a failover, as the pages read are not kept anywhere.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.linbit.com/p/246/read-balancing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LINBIT participates in the German Cloud (&#8220;Deutsche Wolke&#8221;)</title>
		<link>http://blogs.linbit.com/p/202/linbit-deutsche-wolke/</link>
		<comments>http://blogs.linbit.com/p/202/linbit-deutsche-wolke/#comments</comments>
		<pubDate>Mon, 23 Apr 2012 18:30:34 +0000</pubDate>
		<dc:creator>Flip</dc:creator>
				<category><![CDATA[drbd]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[deutsche wolke]]></category>
		<category><![CDATA[high availability]]></category>
		<category><![CDATA[partner]]></category>
		<category><![CDATA[storage]]></category>

		<guid isPermaLink="false">http://blogs.linbit.com/?p=202</guid>
		<description><![CDATA[Deutsche Wolke (“German Cloud”) was founded to establish Federal Cloud Infrastructure in Germany. This infrastructure will provide additional legal and security protections for hosted data.  No longer will small businesses be exposed to the legal risk of losing their website presence &#8230; <a href="http://blogs.linbit.com/p/202/linbit-deutsche-wolke/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a class="no-arrow" href="http://deutsche-wolke.de/"><img class="alignright size-full wp-image-203" title="deutsche_wolke_logo" src="http://blogs.linbit.com/wp-content/uploads/2012/04/deutsche_wolke_logo.png" alt="Deutsche Wolke, Logo" width="249" height="86" /></a></p>
<div>
<div>
<p><a title="Deutsche Wolke" href="http://deutsche-wolke.de/" target="_blank">Deutsche Wolke</a> (“German Cloud”) was founded to establish Federal Cloud Infrastructure in Germany.</p>
</div>
<p>This infrastructure will provide additional legal and security protections for hosted data.  No longer will small businesses be exposed to the legal risk of losing their website presence without a trial (an unfortunate reality when doing business on transatlantic clouds).</p>
<p>The natural partner for backend storage infrastructure is <a href="http://www.linbit.com/en">LINBIT</a>; as authors and maintainers of <a href="http://drbd.org/">DRBD</a>, we are best suited to provide the technical expertise to achieve High Availability.  Also, <a href="http://www.linbit.com/en/products-services/drbd-proxy/">DRBD Proxy</a> is the obvious choice for off-site or disaster recovery replication (from the office into the cloud).</p>
<p>We at LINBIT look forward to seeing this project grow and prosper!</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blogs.linbit.com/p/202/linbit-deutsche-wolke/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Monitoring: better safe than sorry&#8230;</title>
		<link>http://blogs.linbit.com/p/173/monitoring-strict/</link>
		<comments>http://blogs.linbit.com/p/173/monitoring-strict/#comments</comments>
		<pubDate>Tue, 03 Apr 2012 09:07:31 +0000</pubDate>
		<dc:creator>Flip</dc:creator>
				<category><![CDATA[drbd]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[monitor]]></category>
		<category><![CDATA[stop]]></category>

		<guid isPermaLink="false">http://blogs.linbit.com/?p=173</guid>
		<description><![CDATA[Stumbling upon the Holy time-travellin’ DRBD, batman! blog post there&#8217;s only one thing to be said &#8230; Be strict in what you emit, liberal in what you accept1 is simply not true when dealing with mission-critical systems. It&#8217;s ok to &#8230; <a href="http://blogs.linbit.com/p/173/monitoring-strict/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Stumbling upon the <a href="Holy time-travellin’ DRBD, batman!" target="_blank">Holy time-travellin’ DRBD, batman!</a> blog post there&#8217;s only one thing to be said &#8230;</p>
<blockquote><p>Be strict in what you emit, liberal in what you accept<sup class='footnote'><a href='http://blogs.linbit.com/p/173/monitoring-strict/#fn-173-1' id='fnref-173-1' onclick='return fdfootnote_show(173)'>1</a></sup></p></blockquote>
<p><strong>is simply not true</strong> when dealing with mission-critical systems.</p>
<p>It&#8217;s ok to be alerted on upgrading a machine because the &#8220;old, working&#8221; RegEx that did the parsing doesn&#8217;t match anymore<sup class='footnote'><a href='http://blogs.linbit.com/p/173/monitoring-strict/#fn-173-2' id='fnref-173-2' onclick='return fdfootnote_show(173)'>2</a></sup>; it&#8217;s not a problem to get an email when someone adds the 100th DRBD resource and causes the grep to fail; and so on.</p>
<p>Better to have a few false positives <strong>when you&#8217;re actively changing things</strong> than to get a false negative that costs you months of data; that&#8217;s what an <code>assert</code> (and monitoring isn&#8217;t <em>that</em> different) is for, after all.</p>
<p>Keep monitoring strict, and let it fail loudly on unexpected things &#8211; after the first few occurrences they&#8217;re not unexpected anymore and can be dealt with.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.linbit.com/p/173/monitoring-strict/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maximum volume size on DRBD</title>
		<link>http://blogs.linbit.com/p/169/maximum-volume-size/</link>
		<comments>http://blogs.linbit.com/p/169/maximum-volume-size/#comments</comments>
		<pubDate>Mon, 02 Apr 2012 12:25:04 +0000</pubDate>
		<dc:creator>Flip</dc:creator>
				<category><![CDATA[drbd]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[limit]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[size]]></category>

		<guid isPermaLink="false">http://blogs.linbit.com/?p=169</guid>
		<description><![CDATA[From time to time we get asked things like this: I want to use a 10TiB volume with DRBD, is that supported&#8221;? The easiest way to answer things like that is to say look for yourself on the public DRBD &#8230; <a href="http://blogs.linbit.com/p/169/maximum-volume-size/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>From time to time we get asked things like this:</p>
<blockquote><p>I want to use a 10TiB volume with DRBD, is that supported&#8221;?</p></blockquote>
<p>The easiest way to answer things like that is to say <a title="usage.drbd.org" href="http://usage.drbd.org" target="_blank">look for yourself</a> on the public DRBD usage page &#8211; the biggest <span style="text-decoration: underline;">public</span> device size is ~220TiB, so go figure <img src='http://blogs.linbit.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>The current maximum device size is 1EiB (1 ExiByte = 1024 TibiByte<sup class='footnote'><a href='http://blogs.linbit.com/p/169/maximum-volume-size/#fn-169-1' id='fnref-169-1' onclick='return fdfootnote_show(169)'>1</a></sup>), so there&#8217;s a bit of room left.</p>
<p>DRBD needs about 32MB RAM per TB storage, so for 1 EB storage you&#8217;ll need 32GiB of RAM <em>just for the DRBD bitmap</em><sup class='footnote'><a href='http://blogs.linbit.com/p/169/maximum-volume-size/#fn-169-2' id='fnref-169-2' onclick='return fdfootnote_show(169)'>2</a></sup>. Having a bit more for the OS, userspace and buffer cache is left as an exercise for the reader.</p>
<p>If you&#8217;ve got questions, ask the <a href="http://www.linbit.com/en/" title="DRBD experts" target="_blank">DRBD experts at LINBIT</a> &#8211; we wrote the code, after all!</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.linbit.com/p/169/maximum-volume-size/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trust, but verify</title>
		<link>http://blogs.linbit.com/p/138/trust-but-verify/</link>
		<comments>http://blogs.linbit.com/p/138/trust-but-verify/#comments</comments>
		<pubDate>Sat, 25 Feb 2012 20:16:36 +0000</pubDate>
		<dc:creator>Flip</dc:creator>
				<category><![CDATA[drbd]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[online-verify]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[sync]]></category>
		<category><![CDATA[write]]></category>

		<guid isPermaLink="false">http://blogs.linbit.com/?p=138</guid>
		<description><![CDATA[DRBD tries to ensure data integrity across different computers, and it&#8217;s quite good at it. But, as per the old saying Trust, But Verify1 it might be a good idea to periodically test whether the nodes really have identical data, &#8230; <a href="http://blogs.linbit.com/p/138/trust-but-verify/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>DRBD tries to ensure data integrity across different computers, and it&#8217;s quite good at it.</p>
<p>But, as per the old saying <em>Trust, But Verify</em><sup class='footnote'><a href='http://blogs.linbit.com/p/138/trust-but-verify/#fn-138-1' id='fnref-138-1' onclick='return fdfootnote_show(138)'>1</a></sup> it might be a good idea to periodically test whether the nodes <em>really</em> have identical data, similar to the checks that are<sup class='footnote'><a href='http://blogs.linbit.com/p/138/trust-but-verify/#fn-138-2' id='fnref-138-2' onclick='return fdfootnote_show(138)'>2</a></sup> done for RAID sets.<span id="more-138"></span></p>
<p>The <code>verify-alg</code> digest is used to save bandwidth during online verification; while without this setting the whole data has to be transferred<sup class='footnote'><a href='http://blogs.linbit.com/p/138/trust-but-verify/#fn-138-3' id='fnref-138-3' onclick='return fdfootnote_show(138)'>3</a></sup>, a value of <code>md5</code> means that only 20 bytes are needed for each 4KiByte block, resulting in bandwidth savings of about 99.5%.</p>
<p>The <a href="http://www.drbd.org/docs/about/">DRBD Users&#8217; Guide</a> has a nice <a href="http://www.drbd.org/users-guide-emb/s-use-online-verify.html">chapter</a> describing the configuration and usage, so I won&#8217;t get into this topic here.</p>
<hr width=40px>
<p>If the volume you&#8217;re checking is actively used, you might see a few <strong>false positives</strong> in the log messages:
<pre>kernel: block drbd0: Out of sync: start=56079768, size=8 (sectors)</pre>
<p>This is because some data block writes might have just been on the wire while the two nodes calculated their checksums, and so would see <strong>different generations</strong>of the data. If you do this check eg. every week and get different block numbers every time, you&#8217;re fine. If you get the <em>same block number(s)</em>, your storage might have stuck bits, and be unable to correctly write data in these blocks!</p>
<hr width=40px>
<p>Please note that the needed <code>verify-alg</code> setting here sounds similar to the <code>data-integrity-alg</code> option, but serves a different purpose. <code>data-integrity-alg</code> means more CPU-usage for every write; but, similar to <code>verify-alg</code>, it is subject to false-positives, see <a href="http://blogs.linbit.com/p/58/drbd-cpu-bound/">here</a> for details on both of these points.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.linbit.com/p/138/trust-but-verify/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>DRBD and the sync rate controller (8.3.9 and above)</title>
		<link>http://blogs.linbit.com/p/128/drbd-sync-rate-controller/</link>
		<comments>http://blogs.linbit.com/p/128/drbd-sync-rate-controller/#comments</comments>
		<pubDate>Thu, 05 Jan 2012 20:26:05 +0000</pubDate>
		<dc:creator>Flip</dc:creator>
				<category><![CDATA[drbd]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[sync]]></category>

		<guid isPermaLink="false">http://blogs.linbit.com/?p=128</guid>
		<description><![CDATA[The sync-rate controller is used for controlling the used bandwidth during resynchronization (not normal replication); it runs in the SyncTarget state, ie. on the (inconsistent) receiver side. It&#8217;s configured as follows: Set c-plan-ahead to approximately 10 times the RTT; so &#8230; <a href="http://blogs.linbit.com/p/128/drbd-sync-rate-controller/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The sync-rate controller is used for controlling the used bandwidth during resynchronization (<strong>not</strong> normal replication); it runs in the <code>SyncTarget</code> state, ie. on the (inconsistent) receiver side.<span id="more-128"></span></p>
<p>It&#8217;s configured as follows:</p>
<ul>
<li>Set <code>c-plan-ahead</code> to approximately 10 times the RTT; so if <code>ping</code> from one node to the other says 200msec, configure 2 seconds (ie. a value of <em>20</em>, as the unit is tenths of a second).<sup class='footnote'><a href='http://blogs.linbit.com/p/128/drbd-sync-rate-controller/#fn-128-1' id='fnref-128-1' onclick='return fdfootnote_show(128)'>1</a></sup><br />
Please note that the controller is only polling every 100msec; so <code>c-plan-ahead</code> values below <em>5</em> don&#8217;t make sense, as the controller hasn&#8217;t collected enough information to decide whether to request more data. We recommend to use at least 1 second (configured value is <em>10</em>).<br />
This value specifies the &#8220;thinking ahead&#8221; time of the controller, ie. the time period the controller has to achieve the actual sync-rate.</li>
<li>Configure minimum and maximum values via <code>c-min-rate</code> and <code>c-max-rate</code>; these depend mostly on the available bandwidth per resource.<br />
The <code>c-min-rate</code> is the minimum bandwidth that will be used during a resync, whereas <code>c-max-rate</code> is the most bandwidth that can be used by a resync.</li>
<li>Now decide whether to use <code>c-fill-target</code> or <code>c-delay-target</code> &#8211; you can choose only one.</li>
</ul>
<p><strong>Difference between delay and fill based control</strong></p>
<p>If you set <code>c-fill-target</code> to a non-zero value, DRBD will try to keep that much data on the wire; if application IO gets in, it will temporarily displace the synchronization traffic. This means that application data will have only a limited amount of synchronization data in the buffers before it, which helps latency a bit.<br />
The data still has to fit into the socket buffers, along with the application IO, so using multi-MB sizes here doesn&#8217;t make sense; 100kByte is a good starting value.</p>
<p>With a proxy you should use <code>c-delay-target</code>, so set the <code>c-fill-target</code> value to zero. This way the time interval that the synchronization data is on the wire is measured; if application IO gets in, this triggers the controller, and it will turn back the synchronization speed, to keep the communication latency at the specified value. Use 5 times the RTT as a starting point.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.linbit.com/p/128/drbd-sync-rate-controller/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>DRBD causes too much CPU-load</title>
		<link>http://blogs.linbit.com/p/58/drbd-cpu-bound/</link>
		<comments>http://blogs.linbit.com/p/58/drbd-cpu-bound/#comments</comments>
		<pubDate>Tue, 20 Dec 2011 11:36:26 +0000</pubDate>
		<dc:creator>Flip</dc:creator>
				<category><![CDATA[drbd]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[slow]]></category>

		<guid isPermaLink="false">http://blogs.linbit.com/?p=58</guid>
		<description><![CDATA[The TL;DR version: don&#8217;t use data-integrity-alg in a production setup. The users guide (8.3 version) describes the data-integrity-alg as DRBD can ensure the data integrity of the user&#8217;s data on the network by comparing hash values. [...] Too many people &#8230; <a href="http://blogs.linbit.com/p/58/drbd-cpu-bound/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The TL;DR version: don&#8217;t use <code>data-integrity-alg</code> in a production setup.<span id="more-58"></span></p>
<p>The <a href="http://www.drbd.org/docs/about/" target="_blank">users guide</a> (<a href="http://www.drbd.org/users-guide-8.3/" target="_blank">8.3 version</a>) describes the <code>data-integrity-alg</code> as</p>
<blockquote><p>DRBD can ensure the data integrity of the user&#8217;s data on the network by comparing hash values. [...]</p></blockquote>
<p>Too many people think this is a must-have setting &#8211; but are sadly wrong.</p>
<p>During initial installation and testing it does make sense to use this &#8211; it&#8217;s an easy way to find out whether the hardware (CPU, memory, network card, etc.) work as they should &#8211; if you get the famous <code>Digest integrity check FAILED</code> message<sup class='footnote'><a href='http://blogs.linbit.com/p/58/drbd-cpu-bound/#fn-58-1' id='fnref-58-1' onclick='return fdfootnote_show(58)'>1</a></sup> you can be worried (but not too much, since you found that during testing (;).</p>
<p>But in production this should not be set &#8211; apart from causing a lot of CPU load<sup class='footnote'><a href='http://blogs.linbit.com/p/58/drbd-cpu-bound/#fn-58-2' id='fnref-58-2' onclick='return fdfootnote_show(58)'>2</a></sup> it might cause frequent connection abort &#8211; and that means a short bit of time (re-sync) during which the secondary is inconsistent.</p>
<p>So: don&#8217;t use this in production.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.linbit.com/p/58/drbd-cpu-bound/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Editing the Pacemaker configuration with VIM</title>
		<link>http://blogs.linbit.com/p/63/vim-pacemake-highlightning/</link>
		<comments>http://blogs.linbit.com/p/63/vim-pacemake-highlightning/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 11:44:23 +0000</pubDate>
		<dc:creator>Flip</dc:creator>
				<category><![CDATA[pacemaker]]></category>
		<category><![CDATA[crm]]></category>
		<category><![CDATA[edit]]></category>
		<category><![CDATA[vi]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://blogs.linbit.com/?p=63</guid>
		<description><![CDATA[For people using the VIM editor I&#8217;ve got two small tips when editing Pacemaker configurations: Use syntax highlight. This helps to see unmatched quote characters easily. Whether it&#8217;s too colorful can be discussed, though A current version can be found &#8230; <a href="http://blogs.linbit.com/p/63/vim-pacemake-highlightning/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>For people using the <a href="http://www.vim.org/">VIM</a> editor I&#8217;ve got two small tips when editing Pacemaker configurations:</p>
<p>Use <strong>syntax highlight</strong>. This helps to see unmatched quote characters easily. Whether it&#8217;s <em>too</em> colorful can be discussed, though <img src='http://blogs.linbit.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
A current version can be found <a href="//oss.clusterlabs.org/pipermail/pacemaker/attachments/20110819/820f0a40/attachment-0001.obj">here</a>, and the mailing list post is <a href="//oss.clusterlabs.org/pipermail/pacemaker/2011-August/011259.html">here</a>.</p>
<p>For <strong>correlating resource names</strong> I recommend the <a href="http://www.vim.org/scripts/script.php?script_id=2666">Mark plugin</a>.<span id="more-63"></span> I&#8217;ve put an additional mapping in my <code>~/.vimrc</code>:</p>
<pre> nnoremap  &lt;F4&gt;   :call mark#MarkCurrentWord()</pre>
<p>With this I just put the cursor on a resource name and press <code>F4</code> &#8211; all occurrences of this word are highlighted, so it&#8217;s very easy to see where the name is used<sup class='footnote'><a href='http://blogs.linbit.com/p/63/vim-pacemake-highlightning/#fn-63-1' id='fnref-63-1' onclick='return fdfootnote_show(63)'>1</a></sup>. If I mark other words they get different colors, and with <code>F4</code> the highlightning can be turned off again, too.</p>
<p>I think that for people looking at more-than-minimal Pacemaker configurations this helps to quickly get (and keep!) an overview.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.linbit.com/p/63/vim-pacemake-highlightning/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>&#8220;al-extents&#8221; explained</title>
		<link>http://blogs.linbit.com/p/72/al-extents/</link>
		<comments>http://blogs.linbit.com/p/72/al-extents/#comments</comments>
		<pubDate>Sun, 18 Dec 2011 10:31:41 +0000</pubDate>
		<dc:creator>Flip</dc:creator>
				<category><![CDATA[drbd]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[slow]]></category>
		<category><![CDATA[write]]></category>

		<guid isPermaLink="false">http://blogs.linbit.com/?p=72</guid>
		<description><![CDATA[There is quite a bit of confusion about the DRBD configuration value al-extents (activity log extents), so here&#8217;s another shot at explaining it. Imagine a node having a DRBD resource in the secondary role. When it crashes, gets powered down, &#8230; <a href="http://blogs.linbit.com/p/72/al-extents/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>There is quite a bit of confusion about the DRBD configuration value <code>al-extents</code> (<em>a</em>ctivity <em>l</em>og <em>extents</em>), so here&#8217;s another shot at explaining it.<span id="more-72"></span></p>
<p>Imagine a node having a DRBD resource in the <code>secondary</code> role. When it crashes, gets powered down, or looses connection to the primary for any other reason, the primary will remember the changed blocks in its bitmap; so when the secondary node connects to the primary again, the primary can tell <em>exactly</em> what data has to be transferred to get it <code>Up-to-Date</code> again.</p>
<p>Now, when the node with the <code>Primary</code> role crashes, no one can say <em>with certainty</em> which blocks have been changed on its storage, but haven&#8217;t been sent to the secondary, or vice-versa.<br />
So the primary has to <strong>persistently</strong> remember which blocks it touched lately, so that on a crash it can ask the secondary node (which might have been promoted to primary in the meantime) for these blocks; they are fetched and written to the crashed primaries&#8217; storage, to get its data consistent with the other node.</p>
<p>The <code>al-extents</code> value defines how big the hot area (=active set) can get. As the AL has to be stored on persistent storage, each change to this set has to be written to the meta-data area, <strong>before</strong> the actual data can be written &#8211; and waiting for that can slow down DRBD. So you can choose between
<ul>
<li>a small activity log &#8211; this might make DRBD slower during load;</li>
<li>or a big activity log, which will cause more data to be re-synced in case of a primary crash.</li>
</ul>
<p>So, for the most part people are happy choosing a bigger activity log; in the 8.3 series the maximum value is 3833; for 8.4 the limit got raised to 6433, and who knows what 9.0 brings? <img src='http://blogs.linbit.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.linbit.com/p/72/al-extents/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Make the kernel start write-out earlier</title>
		<link>http://blogs.linbit.com/p/33/kernel-dirty_ratio/</link>
		<comments>http://blogs.linbit.com/p/33/kernel-dirty_ratio/#comments</comments>
		<pubDate>Sat, 03 Dec 2011 11:15:34 +0000</pubDate>
		<dc:creator>Flip</dc:creator>
				<category><![CDATA[kernel]]></category>
		<category><![CDATA[drbd]]></category>
		<category><![CDATA[memory]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[write]]></category>

		<guid isPermaLink="false">http://blogs.linbit.com/?p=33</guid>
		<description><![CDATA[Similar to the recent post about setting the vm.min_free_kbytes value there&#8217;s another sysctl that might improve the behaviour: the dirty ratio. To cite a bit of an lwn.net article: Imagine a machine with lots of memory &#8211; say 100Gig. [...] &#8230; <a href="http://blogs.linbit.com/p/33/kernel-dirty_ratio/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Similar to the <a title="Increase vm.min_free_kbytes for better OOM resistance" href="http://blogs.linbit.com/p/28/kernel-min_free_kbytes/">recent post</a> about setting the <code>vm.min_free_kbytes</code> value there&#8217;s another sysctl that might improve the behaviour: the dirty ratio.<span id="more-33"></span></p>
<p>To cite a bit of an <a href="lwn.net article" target="_blank">lwn.net article</a>:</p>
<blockquote><p>Imagine a machine with lots of memory &#8211; say 100Gig. [...]<br />
Suppose this filesystem is being written to steadily so that the maximum amount of memory is always dirty. With the default vm.dirty_ratio of 40%, this could be 40Gig.[...]<br />
Waiting for 40gig to flush for an atime update to complete is clearly unsatisfactory.</p></blockquote>
<p>Now this isn&#8217;t entirely correct anymore; recent kernels do some tuning of these values, but you get the gist.</p>
<p>Even if you have a super-fast storage subsystem, you&#8217;ll have to process that data &#8211; and if you use DRBD for that filesystem, DRBD has to push that data through your network to the other node(s) &#8211; which will take some time, even with 10Gbit Ethernet &#8230;<br />
Another advantage is that you will not as easily get into OOM situations.</p>
<p>So, the simple conclusion: for (possibly) heavily I/O loaded systems, set some sane value for the <code>vm.dirty_background_bytes</code> sysctl; again, see the <a title="Increase vm.min_free_kbytes for better OOM resistance" href="http://blogs.linbit.com/p/28/kernel-min_free_kbytes/">recent post</a> for more details.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.linbit.com/p/33/kernel-dirty_ratio/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

