Excellent talk from Pat Helland, “Immutability Changes Everything” :
I started reading James Gleick’s “The Information” last week and haven’t been able to put it down yet – so good!
I just found this video of a talk he presented at Google last year on the book, looks ace, i’ll save it for watching this evening.
I’ve been trying to track down problems with really slow network transfer speeds between my servers and several DSPs. I knew it wasn’t local I/O, as we could hit around 60Mb/s to some services, whereas the problematic ones were a sluggish 0.30Mb/s; I knew we weren’t hitting our bandwidth limit, as cacti showed us daily peaks of only around 500Mb/s of our 600Mb/s line.
I was working with the network engineer on the other side, running tcpdump captures while uploading a file and analysing that in Wireshark’s IO Graphs – stream looked absolutely fine, no lost packets, big non-changing tcp receive windows. We were pretty much stumped, and the other engineer recommend i look into HPN-SSH, which does indeed sound very good, but first i started playing around with trying different ciphers and compression.
Our uploads are all run via a perl framework, which utilises Net::SFTP in order to do the transfers. My test program was also written in perl and using the same library. In order to try different cyphers i started testing uploads with the interactive command line SFTP. Boom! 6Mb/s upload speed. Biiiig difference from the Net::SFTP client. I started playing with blowfish cipher and trying to enable compression with Net::SFTP – it wasn’t really working, it can only do Zlib compression, which my SSHD server wouldn’t play with until i specifically enabled compression in the sshd_config file.
After much more digging around, i came across reference to Net::SFTP::Foreign, which uses the installed ssh binary on your system for transport rather than relying on the pure perl Net::SSH.
Syntax is very similar, so it was a minor rewrite to switch modules, yet such a massive payback, from 0.30Mb/s up to 6Mb/s.
(It turns out the DSPs i mentioned earlier who could achieve 60Mb/s were actually FTP transfers, not SFTP)
Really enjoyed programming along with this perl Moose introduction at Linux Journal – The piece and code are nice and concise.
I put together a quick perl script for comparing installed CPAN modules between two hosts. Find it here.
Quite easy to use:
Usage: ./CompareHostCpanModules.pl login@host1 login@host2
The script ssh’s into both hosts (so it’s easier if you have your ssh-keys setup) and grabs a list of installed CPAN modules and versions, then outputs the differences – it returns two lists – one of modules installed but having different versions, and another list of modules missing from the second host.
I’ve been working pretty extensively with Xen and Puppet in my new job, really loving it! I’ve been creating a whole load of Xen hosts, most of which are cloned from an initial image I built using Xen-tools. I’ve just finished a script which is over on my github page, which basically automates what was previously a manual process.
Basically, it copies your existing disk.img and swap.img, generates a new xen.cfg file based on some interactive input (desired hostname, IP, memory and number of vCPUs) plus a random Xen mac address, then mounts the disk.img file and changes some appropriate system files – /etc/hostname, hosts, and network/interfaces.
All quite simple and straight forward, but quite nice to have automated.
Here’s the README:
A script for automating Xen VM deployment.
It requires that you have a base disk.img and swap.img already created.
I created mine with:
xen-create-image –pygrub –size=50Gb –swap=9Gb –vcpus=2 –memory 6Gb –dist=squeeze –dhcp –passwd –dir=/var/virt-machines –hostname=xen-squeeze-base
Fill in some of the variables at the top of GenXen.pl before running, then simply:
The interactive part will ask for hostname, memory size, vCPUs, IP address, then generate a unique Xen mac address, and write these all to a xen config file which will be saved in /etc/xen/
It’ll copy your disk.img and swap.img to destination dir, mount the disk.img and create appropriate files for:
After that you should be good to launch with:
xm create -c /etc/xen/whatever-your-hostname-is.cfg
[[image by equanimity]]
This video from node’s creator, Ryan Dahl is a pretty funny and very informative introductory video. I’d recommend programming along with watching it:
This podcast is also a good source of information: