Friday, March 25, 2011

ec2-consistent-snapshot for CentOS

I have really appreciated Eric Hammond's articles and tutorials on EC2. Running MySQL on Amazon EC2 with EBS (Elastic Block Store) enabled us to get started using the cloud to deploy our new website. In the past, we have used a replicated server to take MySQL backups, but Eric's article on Creating Consistent EBS snapshots with MySQL and XFS on EC2 encouraged us to try a new approach in the cloud. The only problem is that all of Eric's tools are created for Ubuntu and we are a CentOS shop. The good news is that we were able to get ec2-consistent-snapshot working on CentOS using the following steps:

  1. Upgrade to the latest version of CPAN
    perl -MCPAN -e "install(q{Bundle::CPAN})"
  2. Install the Net::Amazon::EC2 bundle using CPAN
    cpan> install Net::Amazon::EC2
  3. Install the File::Slurp bundle using CPAN
    cpan> install File::Slurp
  4. Install the DBI bundle using CPAN
    cpan> install DBI
  5. If you are running the MySQL-shared-community RPM, remove it and run the shared-compat RPM instead (because perl-DBD-MySQL requires it)
    rpm -e MySQL-shared-community-5.1.55-1.rhel5.x86_64
    rpm -ivh MySQL-shared-compat-5.1.55-1.rhel5.x86_64.rpm
  6. Install perl-DBD-MySQL using yum
    yum -y install perl-DBD-MySQL
  7. Install Net::SSLeay using yum
    yum -y install 'perl(Net::SSLeay)'
  8. Install IO::Socket::SSL using yum
    yum -y install 'perl(IO::Socket::SSL)'
  9. Install Mozilla::CA using cpan
    cpan> install Mozilla::CA
  10. Install ec2-consistent-snapshot

    Obtain the latest ec2-consistent-snapshot "download file" URL from the trunk page.
    pushd /home/ec2/bin
    wget http://bazaar.launchpad.net/~alestic/ec2-consistent-snapshot/trunk/download/head:/ec2consistentsnapsho-20090928015038-9m9x0fc4yoy54g4j-1/ec2-consistent-snapshot
    chmod 755 ec2-consistent-snapshot
    popd
These steps enabled us to get Eric's excellent utility up and running on CentOS. I couldn't find any installation instructions for ec2-consistent-snapshot on a CentOS platform, so we had to come up with these steps by trial and error. After having issues with an older version of CPAN and the compatibility problems between MySQL-shared-community and perl-DBD-MySQL, we would able to finally get this going. If you find any issues with this approach or find a better way, please let me know.