<?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>A Million Monkeys &#187; server</title>
	<atom:link href="http://www.monkeedev.co.uk/blog/tag/server/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.monkeedev.co.uk/blog</link>
	<description>Surviving life as a sysadmin.</description>
	<lastBuildDate>Mon, 16 May 2011 09:49:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>The best ways to copy large amounts of data between servers</title>
		<link>http://www.monkeedev.co.uk/blog/2010/02/23/the-best-ways-to-copy-large-amounts-of-data-between-servers/</link>
		<comments>http://www.monkeedev.co.uk/blog/2010/02/23/the-best-ways-to-copy-large-amounts-of-data-between-servers/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 15:20:03 +0000</pubDate>
		<dc:creator>Kris</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[gzip]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[netcat]]></category>
		<category><![CDATA[rsync]]></category>
		<category><![CDATA[scp]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://www.monkeedev.co.uk/blog/?p=166</guid>
		<description><![CDATA[As a sysadmin, I often have to copy large amounts of data between servers, and there are a few ways of doing this (each with their own pros and cons). I&#8217;ll try to explain the most common methods here, and give examples and benchmarks. 1, Simple compression and encrypted transmission This is probably the most [...]]]></description>
			<content:encoded><![CDATA[<p>As a sysadmin, I often have to copy large amounts of data between servers, and there are a few ways of doing this (each with their own pros and cons).</p>
<p>I&#8217;ll try to explain the most common methods here, and give examples and benchmarks.</p>
<p><strong>1, Simple compression and encrypted transmission</strong></p>
<p>This is probably the most common way to copy data, and it&#8217;s simply tar and gzip the data and then send it to another machine over scp:</p>
<blockquote><p>machine1$ tar -zcvf backup.tgz /home/backupdata/<br />
machine1$ scp backup.tgz root@machine2:/home/backups/</p>
<p>machine2$ tar -zxvf backup.tgz</p></blockquote>
<p>The problem with this method is that disk reads and writes can be intensive because you need to read from machine1&#8242;s hard drive and then write to it during the gzip process, then read from it and write to machine2&#8242;s hard drive during the scp. This can slow down the process. Also you&#8217;re required to log in to machine2 and unzip the resulting file.</p>
<p><strong>2, rsync</strong></p>
<p>rsync is good for syncing data between two machines, and for incremental copying (ie if a copy is interrupted, it can resume). I won&#8217;t go into the actual details here because there are many ways of using rsync and this article is mainly aimed at one shot copying of data. It&#8217;s definitely worth checking &#8216;man rsync&#8217; to see if it will be relevant for your needs though.</p>
<p>I tend to use rsync for backups where I want to keep an exact copy of a directory on another server, and keep it up to date. rsync is useful here because any time I run the rsync command it will only copy changes over between the servers. An example of this usage is:</p>
<blockquote><p>machine1$ rsync -Ravr &#8211;delete &#8211;delete-after ./backupdata/ root@machine2:/home/backups/</p></blockquote>
<p>The flags I&#8217;ve passed are: <strong>R</strong> &#8211; relative, <strong>r</strong> &#8211; recursive, <strong>a</strong> &#8211; archive mode, <strong>v</strong> &#8211; verbose.</p>
<p><strong>3, Gzip and SCP in one command</strong></p>
<p>This will usually perform better than option 1 simply because you aren&#8217;t writing the gzip data to the disk on machine1 before sending it to machine2. Basically, this is the commands from option 1 in one line, so the data is gzipped and piped to ssh on machine2 rather than writing to the disk on machine1 and then copying over.</p>
<blockquote><p>machine1$ tar -zcvf &#8211; /home/backupdata/* | ssh root@machine2 &#8220;cd /home/backups/; tar -zxvf -&#8221;</p></blockquote>
<p><strong>4, Netcat</strong></p>
<p>In theory, this should be the best solution because the data isn&#8217;t encrypted or decrypted as it is in ssh/scp (a little less cpu overhead), and there isn&#8217;t any needless IO activity as in option 1. First you will need to tell machine2 to &#8216;listen&#8217; on a specific port (98765 in this example), and uncompress anything which arrives on that port:</p>
<blockquote><p>machine2$ nc -l -p 98765 | tar -zxvf -</p></blockquote>
<p>Then gzip and send the data from machine1 to the specified port on machine2:</p>
<blockquote><p>machine1$ tar -zcvf &#8211; /home/backupdata/ | nc -q 1 machine2 98765</p></blockquote>
<p>As we&#8217;re using the verbose (-v) option in tar, you will see the output on both machines. I find netcat more convenient if I need to send a lot of data from one server to another as I can just leave netcat running on machine2 and send data to it multiple times from server1 (or any other server).</p>
<p><strong>5, SMB or NFS</strong></p>
<p>These are also decent alternatives, and if you already have NFS or SMB shares set up then it may be worth just compressing the data and copying it to a mounted share using &#8216;cp&#8217;. An example would be (assuming the share name is &#8216;backups&#8217;).</p>
<blockquote><p>machine1$ tar -zcvf backup.tgz /home/backupdata/<br />
<strong>(SMB) </strong>machine1$ mount -t smbfs //machine2/backups /mnt/machine2<br />
<strong>(NFS) </strong>machine1$ mount machine2:/home/backups /mnt/machine2<br />
machine1$ cp backup.tgz /mnt/machine2/</p></blockquote>
<p><strong>Benchmarks</strong></p>
<p>For my tests, I&#8217;m using 2 servers with the following basic specs:<br />
Dual CPU Intel E5520<br />
16gb RAM<br />
Hardware RAID1.</p>
<p>I&#8217;ll be sending a few log files which total 7GB of data.</p>
<p>1 &#8211; The initial gzip took 114 seconds and scp took 6 seconds for a total of 120 seconds.<br />
2 &#8211; This took a total of around 140 seconds, so was the slowest in this test. You would notice the benefits of rsync when doing incremental backups so only differences are copied over rather than redoing the whole copy.<br />
3 &#8211; Total of 119 seconds (so not really any faster but you don&#8217;t need to log in to machine2 to unzip).<br />
4 &#8211; Total of 109  seconds, so this is the fastest option but not by a huge margin.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http%3A%2F%2Fwww.monkeedev.co.uk%2Fblog%2F2010%2F02%2F23%2Fthe-best-ways-to-copy-large-amounts-of-data-between-servers%2F&amp;title=The+best+ways+to+copy+large+amounts+of+data+between+servers" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.monkeedev.co.uk/blog/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.monkeedev.co.uk%2Fblog%2F2010%2F02%2F23%2Fthe-best-ways-to-copy-large-amounts-of-data-between-servers%2F&amp;title=The+best+ways+to+copy+large+amounts+of+data+between+servers" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.monkeedev.co.uk/blog/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.monkeedev.co.uk%2Fblog%2F2010%2F02%2F23%2Fthe-best-ways-to-copy-large-amounts-of-data-between-servers%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.monkeedev.co.uk/blog/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.monkeedev.co.uk%2Fblog%2F2010%2F02%2F23%2Fthe-best-ways-to-copy-large-amounts-of-data-between-servers%2F&amp;title=The+best+ways+to+copy+large+amounts+of+data+between+servers" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.monkeedev.co.uk/blog/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http%3A%2F%2Fwww.monkeedev.co.uk%2Fblog%2F2010%2F02%2F23%2Fthe-best-ways-to-copy-large-amounts-of-data-between-servers%2F&amp;title=The+best+ways+to+copy+large+amounts+of+data+between+servers" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://www.monkeedev.co.uk/blog/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.monkeedev.co.uk%2Fblog%2F2010%2F02%2F23%2Fthe-best-ways-to-copy-large-amounts-of-data-between-servers%2F&amp;title=The+best+ways+to+copy+large+amounts+of+data+between+servers" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.monkeedev.co.uk/blog/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http%3A%2F%2Fwww.monkeedev.co.uk%2Fblog%2F2010%2F02%2F23%2Fthe-best-ways-to-copy-large-amounts-of-data-between-servers%2F" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.monkeedev.co.uk/blog/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+The+best+ways+to+copy+large+amounts+of+data+between+servers+@+http%3A%2F%2Fwww.monkeedev.co.uk%2Fblog%2F2010%2F02%2F23%2Fthe-best-ways-to-copy-large-amounts-of-data-between-servers%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.monkeedev.co.uk/blog/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.monkeedev.co.uk/blog/2010/02/23/the-best-ways-to-copy-large-amounts-of-data-between-servers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installing and using memcache on ubuntu and debian</title>
		<link>http://www.monkeedev.co.uk/blog/2009/05/07/installing-and-using-memcache-on-ubuntu-and-debian/</link>
		<comments>http://www.monkeedev.co.uk/blog/2009/05/07/installing-and-using-memcache-on-ubuntu-and-debian/#comments</comments>
		<pubDate>Thu, 07 May 2009 19:56:07 +0000</pubDate>
		<dc:creator>Kris</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.monkeedev.co.uk/blog/?p=123</guid>
		<description><![CDATA[If you don&#8217;t know what memcache is, the official site says the following: &#8220;memcached is a high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load.&#8221; Basically, what this means is that memcached is a daemon running on a server which allows [...]]]></description>
			<content:encoded><![CDATA[<p>If you don&#8217;t know what memcache is, the <a title="memcached" href="http://danga.com/memcached/" target="_blank">official site</a> says the following:</p>
<p>&#8220;memcached is a high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load.&#8221;</p>
<p>Basically, what this means is that memcached is a daemon running on a server which allows you to save and retrieve variables in the server memory. This is primarily used to ease database load on websites and applications. The logic for doing something like this is&#8230;</p>
<p>- Before running a query, check if the result is available in memcache.<br />
- If the result is in memcache, return the cached result.<br />
- If not, run the query on the database, and store the result in memcache.</p>
<p>To install memcached, simply run the following command:</p>
<blockquote><p>sudo apt-get install memcached</p></blockquote>
<p>Once it&#8217;s installed, edit /etc/memcached.conf and change the line beginning &#8216;-m&#8217; which is the amount of memory (in megabytes) to allocate to the server. You can also change the IP address that the server listens on  in the line beginning &#8216;-l&#8217;.</p>
<p>Now restart the daemon by running</p>
<blockquote><p>/etc/init.d/memcached restart</p></blockquote>
<p>Now you have memcache set up and running on your server. A great feature of memcached is that you can easily cluster servers. If you want to do this, simply install memcache on your other servers before continuing.</p>
<p>At this point, I&#8217;d recommend downloading <a href="http://livebookmark.net/journal/2008/05/21/memcachephp-stats-like-apcphp/" target="_blank">memcache.php</a> which is a php script showing you a lot of useful information about your memcached servers. Once downloaded, put it in a web facing directory on your server, and modify the $MEMCACHE_SERVERS array with your server addresses.</p>
<p>Using memcache in php scripts is very easy. There are either procedural, or object oriented functions already available. Here is an example of a script which will store a simple variable and then retrieve it and display it.</p>
<blockquote><p>&lt;?php<br />
$memcache = new Memcache;</p>
<p>$memcache-&gt;addServer(&#8217;10.2.0.245&#8242;, 11211) or die (&#8220;Could not connect&#8221;);<br />
$memcache-&gt;addServer(&#8217;10.2.0.249&#8242;, 11211) or die (&#8220;Could not connect&#8221;);</p>
<p>$memcache-&gt;set(&#8216;mytestvariable&#8217;, &#8220;this is the data in my test variable&#8221;, false, 60) or die (&#8220;Unable to save the data to the server&#8221;);<br />
echo &#8220;Data has been stored in the cache&lt;br /&gt;&#8221;;</p>
<p>$result = $memcache-&gt;get(&#8216;mytestvariable&#8217;);<br />
echo &#8220;Retrieved data from the server:&lt;br/&gt;&#8221;;</p>
<p>var_dump($result);</p>
<p>?&gt;</p></blockquote>
<p>Obviously if you only have one server then only use one addServer line.</p>
<p>The script above will store the test variable in the cache for 60 seconds. If you drop the timeout down to something like 1 second, and then sleep for 3 seconds before attempting to get the data, you will find that the data has expired and nothing will be returned.</p>
<p>It&#8217;s also useful to know that you can store anything which can be serialized in memcache. This means it&#8217;s safe to store things like arrays in the cache without having to &#8216;flatten&#8217; the data beforehand.</p>
<p>Obviously how and where you implement a cache is entirely dependant on how your system works. If you have a lot of intense database usage then you will find that even caching with a short timeout will vastly reduce the amount of database queries. You should find that memcache is considerably faster than normal database access, and even faster than the mysql query cache. You also have total control over what data is cached, and how long it is cached for before your queries fall back to checking a database.</p>
<p>Some further reading:<br />
<a href="http://www.facebook.com/home.php#/note.php?note_id=39391378919&amp;ref=mf" target="_blank">Facebook engineering blog</a> &#8211; How facebook use memcache<br />
<a href="http://highscalability.com/secrets-fotologs-scaling-success" target="_blank">Fotolog case study</a></p>
<p>Also, it&#8217;s worth checking out the <a href="http://uk2.php.net/manual/en/ref.memcache.php" target="_blank">PHP manual</a> page.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http%3A%2F%2Fwww.monkeedev.co.uk%2Fblog%2F2009%2F05%2F07%2Finstalling-and-using-memcache-on-ubuntu-and-debian%2F&amp;title=Installing+and+using+memcache+on+ubuntu+and+debian" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.monkeedev.co.uk/blog/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.monkeedev.co.uk%2Fblog%2F2009%2F05%2F07%2Finstalling-and-using-memcache-on-ubuntu-and-debian%2F&amp;title=Installing+and+using+memcache+on+ubuntu+and+debian" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.monkeedev.co.uk/blog/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.monkeedev.co.uk%2Fblog%2F2009%2F05%2F07%2Finstalling-and-using-memcache-on-ubuntu-and-debian%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.monkeedev.co.uk/blog/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.monkeedev.co.uk%2Fblog%2F2009%2F05%2F07%2Finstalling-and-using-memcache-on-ubuntu-and-debian%2F&amp;title=Installing+and+using+memcache+on+ubuntu+and+debian" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.monkeedev.co.uk/blog/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http%3A%2F%2Fwww.monkeedev.co.uk%2Fblog%2F2009%2F05%2F07%2Finstalling-and-using-memcache-on-ubuntu-and-debian%2F&amp;title=Installing+and+using+memcache+on+ubuntu+and+debian" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://www.monkeedev.co.uk/blog/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.monkeedev.co.uk%2Fblog%2F2009%2F05%2F07%2Finstalling-and-using-memcache-on-ubuntu-and-debian%2F&amp;title=Installing+and+using+memcache+on+ubuntu+and+debian" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.monkeedev.co.uk/blog/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http%3A%2F%2Fwww.monkeedev.co.uk%2Fblog%2F2009%2F05%2F07%2Finstalling-and-using-memcache-on-ubuntu-and-debian%2F" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.monkeedev.co.uk/blog/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Installing+and+using+memcache+on+ubuntu+and+debian+@+http%3A%2F%2Fwww.monkeedev.co.uk%2Fblog%2F2009%2F05%2F07%2Finstalling-and-using-memcache-on-ubuntu-and-debian%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.monkeedev.co.uk/blog/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.monkeedev.co.uk/blog/2009/05/07/installing-and-using-memcache-on-ubuntu-and-debian/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Setting up MySQL 5.0 Cluster on Debian and Ubuntu</title>
		<link>http://www.monkeedev.co.uk/blog/2009/04/01/setting-up-mysql-50-cluster-on-debian-and-ubuntu/</link>
		<comments>http://www.monkeedev.co.uk/blog/2009/04/01/setting-up-mysql-50-cluster-on-debian-and-ubuntu/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 12:51:43 +0000</pubDate>
		<dc:creator>Kris</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[cluster]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.monkeedev.co.uk/blog/?p=100</guid>
		<description><![CDATA[This guide explains how to turn standard debian or ubuntu mysql-server installs into a full ndb cluster. As we&#8217;re using the standard mysql-server package, you won&#8217;t need to download any non .deb binaries or do any compiling. If everything goes well, this should take under 10 minutes to get working. I don&#8217;t plan to cover [...]]]></description>
			<content:encoded><![CDATA[<p>This guide explains how to turn standard debian or ubuntu mysql-server installs into a full ndb cluster. As we&#8217;re using the standard mysql-server package, you won&#8217;t need to download any non .deb binaries or do any compiling. If everything goes well, this should take under 10 minutes to get working. I don&#8217;t plan to cover much theory here, as it is just a guide to getting the server up and running.</p>
<p>Please note that clustering works differently in MySQL 5.1, so this guide may not be relevant for that.</p>
<p>I also recommend the book &#8216;MySQL Clustering&#8217; by Alex Davies and Harrison Fisk (ISBN 0-672-32855-0) as it explains how the cluster works in a lot more detail than I plan to here.</p>
<p>I will explain how to set up 3 servers, with the following roles:</p>
<p>server-a = management node (IP 10.1.0.10)<br />
server-b = storage and sql node (IP 10.1.0.11)<br />
server-c = storage and sql node (IP 10.1.0.12)</p>
<p>It is easy to have storage and sql nodes on separate servers, but to make this guide easier to follow (and so we don&#8217;t need 5 machines), I&#8217;ll use 3 servers.</p>
<p>All servers will need to have mysql-server installed. If you need help doing this, have a look at <a title="Installing MySQL Server on Debian and Ubunut" href="http://www.monkeedev.co.uk/blog/2009/03/06/installing-mysql-server-on-debian-and-ubuntu/" target="_blank">this guide</a>.</p>
<p><strong>Setting up the management node (10.1.0.10)</strong></p>
<p>Default debian/ubuntu installs look for /etc/mysql/ndb_mgmd.cnf for the management node, so we need to create this file, with the following contents:</p>
<blockquote><p>[NDBD DEFAULT]<br />
NoOfReplicas=2<br />
DataDir= /var/lib/mysql-cluster</p>
<p># Management Node<br />
[NDB_MGMD]<br />
HostName=10.1.0.10<br />
DataDir=/var/lib/mysql-cluster</p>
<p># Storage Nodes (one for each node)<br />
[NDBD]<br />
HostName=10.1.0.11<br />
DataDir=/var/lib/mysql-cluster<br />
[NDBD]<br />
HostName=10.1.0.12<br />
DataDir=/var/lib/mysql-cluster</p>
<p># SQL Nodes (one for each node)<br />
[MYSQLD]<br />
HostName=10.1.0.11<br />
[MYSQLD]<br />
HostName=10.1.0.12</p></blockquote>
<p>The line beginning NoOfReplicas tells the cluster how many copies of data should be kept.</p>
<p>Now we start the management node, and it will sit waiting for connections from the storage and SQL nodes:</p>
<blockquote><p>/etc/init.d/mysql-ndb-mgm start</p></blockquote>
<p><strong>Setting up SQL and data nodes</strong></p>
<p>All we need to do here is make a few changes to /etc/mysql/my.cnf (the mysql config file)</p>
<p>First, add the following 2 lines (using the IP of your management node) inside the [mysqld] section of the config file:</p>
<blockquote><p>ndbcluster<br />
ndb-connectstring=10.1.0.10</p></blockquote>
<p>And near the bottom of the file there will be a section for [MYSQL_CLUSTER] which you will need to uncomment, and change the ndb-connectstring line to your management nodes IP.</p>
<p>If you are using separate data and sql nodes, the [mysqld] part is relevant to the sql nodes only, and the [MYSQL_CLUSTER] part is relevant to the data nodes only.</p>
<p>Before we start the services, we have to create the /var/lib/mysql-cluster directory and set it to be owned by the mysql user:</p>
<blockquote><p>mkdir /var/lib/mysql-cluster<br />
chown mysql:mysql /var/lib/mysql-cluster</p></blockquote>
<p>Now we need to start the node services:</p>
<blockquote><p>/etc/init.d/mysql restart<br />
(which starts the sql node)<br />
/etc/init.d/mysql-ndb restart<br />
(which starts the data node)</p></blockquote>
<p>By now, everything should be running, so we connect to the management node (by running ndb_mgm from the command line) and check that the other nodes have connected properly (using the show command):</p>
<blockquote><p>ndb_mgm&gt; show;<br />
Cluster Configuration<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
[ndbd(NDB)]     2 node(s)<br />
id=2    @10.1.0.11  (Version: 5.0.51, Nodegroup: 0)<br />
id=3    @10.1.0.12  (Version: 5.0.51, Nodegroup: 0, Master)</p>
<p>[ndb_mgmd(MGM)] 1 node(s)<br />
id=1    @10.1.0.10  (Version: 5.0.51)</p>
<p>[mysqld(API)]   2 node(s)<br />
id=4    @10.1.0.11  (Version: 5.0.51)<br />
id=5    @10.1.0.12  (Version: 5.0.51)</p></blockquote>
<p>This shows that everything has connected properly. If connections are missing, then it&#8217;s worth checking /var/log/syslog on the affected server to see if there are any error messages.</p>
<p><strong>Using the cluster</strong></p>
<p>It&#8217;s worth noting that any databases already on the servers will continue to work as before. Tables only become part of the cluster when their engine type is changed to &#8216;ndbcluster&#8217; by issuing this command (from a mysql prompt):</p>
<blockquote><p>alter table tablename engine=ndbcluster;</p></blockquote>
<p>But for now we will create a new database and clustered table, and test that the data is clustered. The cluster setup applies to tables only, not databases, so we first need to create the database on both sql nodes:</p>
<blockquote><p>create database cluster;</p></blockquote>
<p>Now, when we create a table inside the cluster database, as long as the engine is ndbcluster, the data will be synced across data nodes, which we can test by doing the following (from a mysql prompt on either sql node):</p>
<blockquote><p>create table clustertest (i int) engine=ndbcluster;<br />
insert into clustertest () values (1);<br />
select i from clustertest;</p></blockquote>
<p>Which should return the single row with the value of 1. Now connect to the other SQL node and try&#8230;</p>
<blockquote><p>insert into clustertest () values (2);<br />
select i from clustertest;</p></blockquote>
<p>Which should return both rows, which will happen whichever SQL node you connect to as the table is now stored in the cluster.</p>
<p>If you receive an error like:</p>
<blockquote><p>ERROR 1015 (HY000): Can&#8217;t lock file (errno: 4009)</p></blockquote>
<p>Then it is likely that some of your cluster nodes haven&#8217;t started correctly, so its worth checking the management interface again.</p>
<p><strong>Shutting down and restarting the cluster</strong></p>
<p>To shutdown the data nodes and management node, all you need to do is enter the command &#8216;shutdown&#8217; in the management interface.</p>
<p>To restart, simply run</p>
<blockquote><p>/etc/init.d/mysql-ndb-mgm start</p></blockquote>
<p>On the management node, and</p>
<blockquote><p>/etc/init.d/mysql-ndb start</p></blockquote>
<p>On the data nodes. The SQL nodes continue running, and can be stopped/started using the standard mysql init script.</p>
<p>That&#8217;s it, you&#8217;ve now should have a working MySQL cluster. As you have NoOfReplicas=2 in the management config, you should be able to unplug either data node at any time and still have access to all of the clustered tables.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http%3A%2F%2Fwww.monkeedev.co.uk%2Fblog%2F2009%2F04%2F01%2Fsetting-up-mysql-50-cluster-on-debian-and-ubuntu%2F&amp;title=Setting+up+MySQL+5.0+Cluster+on+Debian+and+Ubuntu" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.monkeedev.co.uk/blog/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.monkeedev.co.uk%2Fblog%2F2009%2F04%2F01%2Fsetting-up-mysql-50-cluster-on-debian-and-ubuntu%2F&amp;title=Setting+up+MySQL+5.0+Cluster+on+Debian+and+Ubuntu" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.monkeedev.co.uk/blog/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.monkeedev.co.uk%2Fblog%2F2009%2F04%2F01%2Fsetting-up-mysql-50-cluster-on-debian-and-ubuntu%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.monkeedev.co.uk/blog/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.monkeedev.co.uk%2Fblog%2F2009%2F04%2F01%2Fsetting-up-mysql-50-cluster-on-debian-and-ubuntu%2F&amp;title=Setting+up+MySQL+5.0+Cluster+on+Debian+and+Ubuntu" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.monkeedev.co.uk/blog/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http%3A%2F%2Fwww.monkeedev.co.uk%2Fblog%2F2009%2F04%2F01%2Fsetting-up-mysql-50-cluster-on-debian-and-ubuntu%2F&amp;title=Setting+up+MySQL+5.0+Cluster+on+Debian+and+Ubuntu" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://www.monkeedev.co.uk/blog/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.monkeedev.co.uk%2Fblog%2F2009%2F04%2F01%2Fsetting-up-mysql-50-cluster-on-debian-and-ubuntu%2F&amp;title=Setting+up+MySQL+5.0+Cluster+on+Debian+and+Ubuntu" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.monkeedev.co.uk/blog/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http%3A%2F%2Fwww.monkeedev.co.uk%2Fblog%2F2009%2F04%2F01%2Fsetting-up-mysql-50-cluster-on-debian-and-ubuntu%2F" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.monkeedev.co.uk/blog/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Setting+up+MySQL+5.0+Cluster+on+Debian+and+Ubuntu+@+http%3A%2F%2Fwww.monkeedev.co.uk%2Fblog%2F2009%2F04%2F01%2Fsetting-up-mysql-50-cluster-on-debian-and-ubuntu%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.monkeedev.co.uk/blog/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.monkeedev.co.uk/blog/2009/04/01/setting-up-mysql-50-cluster-on-debian-and-ubuntu/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>How to upgrade Debian Etch to Lenny</title>
		<link>http://www.monkeedev.co.uk/blog/2009/03/21/how-to-upgrade-debian-etch-to-lenny/</link>
		<comments>http://www.monkeedev.co.uk/blog/2009/03/21/how-to-upgrade-debian-etch-to-lenny/#comments</comments>
		<pubDate>Sat, 21 Mar 2009 10:52:38 +0000</pubDate>
		<dc:creator>Kris</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[aptitude]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[etch]]></category>
		<category><![CDATA[lenny]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[upgrade]]></category>

		<guid isPermaLink="false">http://www.monkeedev.co.uk/blog/?p=83</guid>
		<description><![CDATA[I finally decided to take the plunge and upgrade a few of my Etch servers to Lenny, and the process was a lot less painful than I was expecting. These are basically the steps from the official manual, but I cant guarantee that your system will upgrade as easily as mine &#8211; as always when [...]]]></description>
			<content:encoded><![CDATA[<p>I finally decided to take the plunge and upgrade a few of my Etch servers to Lenny, and the process was a lot less painful than I was expecting.</p>
<p>These are basically the steps from the official manual, but I cant guarantee that your system will upgrade as easily as mine &#8211; as always when  upgrading you should backup your data and be prepared for the worst.</p>
<p>Usually I prefer apt-get over aptitude, but the official documentation recommends aptitude to do the upgrade, so heres what you need to do (as root)</p>
<p>First, edit /etc/apt/sources.list and change all mentions of etch to lenny. If you use vim, you can simply do the following:</p>
<blockquote><p>vim /etc/apt/sources.list<br />
(then, in vim)<br />
:%s/etch/lenny/g<br />
:wq</p></blockquote>
<p>Then update&#8230;</p>
<blockquote><p>aptitude update</p></blockquote>
<p>At this point, you might receive the following error (I did on every server I upgraded)</p>
<blockquote><p>W: There is no public key available for the following key IDs:<br />
4D270D06F42584E6</p>
<p>W: You may want to run apt-get update to correct these problems</p></blockquote>
<p>To fix this, you need to install the following:</p>
<blockquote><p>aptitude install debian-archive-keyring<br />
aptitude update</p></blockquote>
<p>Now you&#8217;re ready to do the upgrade. The safest way to do this is in 3 parts</p>
<blockquote><p>aptitude install aptitude<br />
(updating apt first is a safe way of doing things)<br />
aptitude upgrade<br />
(when this finishes)<br />
aptitude dist-upgrade</p></blockquote>
<p>When this has finished, your system is upgraded to Lenny! All you need to do now is reboot, and hopefully the system will come back up and be running Lenny.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http%3A%2F%2Fwww.monkeedev.co.uk%2Fblog%2F2009%2F03%2F21%2Fhow-to-upgrade-debian-etch-to-lenny%2F&amp;title=How+to+upgrade+Debian+Etch+to+Lenny" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.monkeedev.co.uk/blog/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.monkeedev.co.uk%2Fblog%2F2009%2F03%2F21%2Fhow-to-upgrade-debian-etch-to-lenny%2F&amp;title=How+to+upgrade+Debian+Etch+to+Lenny" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.monkeedev.co.uk/blog/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.monkeedev.co.uk%2Fblog%2F2009%2F03%2F21%2Fhow-to-upgrade-debian-etch-to-lenny%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.monkeedev.co.uk/blog/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.monkeedev.co.uk%2Fblog%2F2009%2F03%2F21%2Fhow-to-upgrade-debian-etch-to-lenny%2F&amp;title=How+to+upgrade+Debian+Etch+to+Lenny" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.monkeedev.co.uk/blog/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http%3A%2F%2Fwww.monkeedev.co.uk%2Fblog%2F2009%2F03%2F21%2Fhow-to-upgrade-debian-etch-to-lenny%2F&amp;title=How+to+upgrade+Debian+Etch+to+Lenny" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://www.monkeedev.co.uk/blog/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.monkeedev.co.uk%2Fblog%2F2009%2F03%2F21%2Fhow-to-upgrade-debian-etch-to-lenny%2F&amp;title=How+to+upgrade+Debian+Etch+to+Lenny" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.monkeedev.co.uk/blog/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http%3A%2F%2Fwww.monkeedev.co.uk%2Fblog%2F2009%2F03%2F21%2Fhow-to-upgrade-debian-etch-to-lenny%2F" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.monkeedev.co.uk/blog/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+How+to+upgrade+Debian+Etch+to+Lenny+@+http%3A%2F%2Fwww.monkeedev.co.uk%2Fblog%2F2009%2F03%2F21%2Fhow-to-upgrade-debian-etch-to-lenny%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.monkeedev.co.uk/blog/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.monkeedev.co.uk/blog/2009/03/21/how-to-upgrade-debian-etch-to-lenny/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

