<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[Pete Cheslock]]></title>
  <link href="http://blog.petecheslock.com/atom.xml" rel="self"/>
  <link href="http://blog.petecheslock.com/"/>
  <updated>2012-02-14T10:45:11-05:00</updated>
  <id>http://blog.petecheslock.com/</id>
  <author>
    <name><![CDATA[Pete Cheslock]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[Why Your Company Should Have Internal HackDays]]></title>
    <link href="http://blog.petecheslock.com/2012/02/13/why-your-company-should-have-internal-hackdays/"/>
    <updated>2012-02-13T20:47:00-05:00</updated>
    <id>http://blog.petecheslock.com/2012/02/13/why-your-company-should-have-internal-hackdays</id>
    <content type="html"><![CDATA[<p>Recently the Sonian DevOps team (Yes, we call them our DevOps team - they write/deploy code and manage systems) took part in an internal hackday. Internally we call it a hackday, but if you are going to float the idea to your engineering management, calling it a &#8220;codefest&#8221; might be an easier sell.</p>

<p>About a month ago my Jira board grew with more and more stories asking for new or monitors, bug fixes and additional metrics for <a href="https://github.com/sonian/sensu">Sensu</a>. We&#8217;ve had a few large projects start recently with came with tight deadlines and large resource needs, so I didn&#8217;t expect to complete these stories for at least a few months. Based on the schedule, I thought if we can have everyone spend one day to work on some of these stories/tickets, the larger projects shouldn&#8217;t be delayed.</p>

<p>We have engineering-wide codefests during our company meetups three times a year. These are fantastic opportunities for team members across all parts of our engineering teams (devs and non-devs alike) to work on and present new solutions and ideas to the entire company. We needed a day to hack on a specific project (our Sensu monitors and metrics), and I didn&#8217;t want to waste codefest on that. I needed a separate day, just to hack on a specific project.</p>

<!--more-->


<p>I presented the idea to the head of engineering, who signed off on our experiment as long as we had some clearly defined goals we were working towards. I wanted specific tasks defined before we started so that we wouldn&#8217;t waste time planning when we should be hacking.  So, I started planning for our hackday about 3 weeks in advance. I made sure to coordinate with all the rest of the teams leads to make sure they were aware and would send any requests directly to myself for the day. I would then act as the buffer for any 3rd level support or other assistance our DevOps teams provides.</p>

<p>Over the next 3 weeks, everyone on the DevOps team added ideas to a wiki document; things that were keeping them up at night, code they wanted to refactor, etc&#8230; Two days before our hackday, we reviewed the list of items and assigned ownership to all the tasks (Pairing was encouraged). This allowed the geographically diverse team to be able to hit the ground running when they logged on for the day (Since everyone starts working at different times).  On the day of our hackfest - everyone had their task list and began working on the various fixes we had lined up.  We had a quick standup mid-way thru to check on status, blockers, etc, and to make sure we were making progress.</p>

<p>So - what were the results?</p>

<p>Comparing the diff for our branch on github - we saw the following:
<code>47 changed files with 689 additions and 478 deletions</code></p>

<p>Now - what did we really get done?</p>

<ul>
<li>We created 7 new monitors for things we had not tracked in the past</li>
<li>We converted the last few of our nagios checks over to use the <a href="https://github.com/sonian/sensu-plugin/">sensu-plugin</a>. Huzzah! - no more Nagios anything!</li>
<li>We consolidated 5 monitors down to one which simplifies our codebase while still providing full insight into our systems.</li>
<li>We cleaned up our metrics - removing nearly 20 separate ones that we found did not provide us with actionable information.  And since we use <a href="https://metrics.librato.com/">Librato</a> - this is real $$$ saved.  But instead of saving that money - we decided to reinvest and increase the metric check interval - so our metrics could capture more data more often.</li>
<li>We added new metrics - creating about 12 new metrics for our indexing clusters - everything from memory and load as well as application level data, health etc&#8230;</li>
</ul>


<p>Overall - the team enjoyed taking a break from our big projects to fix things that keep us up in the middle of the night (literally). And I enjoyed a much smaller backlog of work as well as personally fixing and adding new sensu checks.</p>

<p>We were able to complete about a week&#8217;s worth of work in a single day.  We added in a few hours of testing and validation, and deployed the code out to production the next day (Oh, the joys of DevOps). The success of this project has already sparked the interest of other engineering teams who are considering doing similar hackdays.  My team has already begun to discuss doing this again once every couple months with different focuses each time.</p>

<p>Feel free to ask my team if you want their input on the success of our hackday. (<a href="https://twitter.com/#!/decklin">Decklin</a>, <a href="https://twitter.com/#!/portertech">Sean</a>,<a href="https://twitter.com/#!/amdprophet">Justin</a>, <a href="https://twitter.com/#!/joshpasqualetto">Josh</a>, and <a href="https://twitter.com/#!/sandfish8">Sam</a>.</p>

<p>Sonian is continually committed to Sensu as an open source project - which is why we share many of our checks with the rest of the community - you can check out many of the new and refactored checks (the result of our hackday) by heading over to Sensu&#8217;s <a href="https://github.com/sonian/sensu-community-plugins/">community plugins page.</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[How To Enable Cross-Account AWS Access with IAM Users]]></title>
    <link href="http://blog.petecheslock.com/2012/02/02/how-to-enable-cross-account-aws-access-with-iam-users/"/>
    <updated>2012-02-02T15:20:00-05:00</updated>
    <id>http://blog.petecheslock.com/2012/02/02/how-to-enable-cross-account-aws-access-with-iam-users</id>
    <content type="html"><![CDATA[<p>We manage our AWS assets across many different accounts.  This helps us keep data and access controls separate depending on the type of data we are controlling.</p>

<p>One of our AWS accounts is a non-production account where we spin up and down test systems to support new feature testing and other activities to support development.  Our build cluster (which lives in a separate AWS account) needs access some S3 buckets that live in our non-production account.  The problem is that this account also contains some of our more sensitive stacks, like QA and UA systems, which are locked down from a moderate to a production level of access.  So, in this case, I needed to create an IAM user on our build cluster account that could access specific buckets in our Non-Prod account.  This is to ensure we&#8217;re not giving out keys that could be used to potential cause data destruction.</p>

<p>Here is how you can do it if you are looking for the same level of Amazon cross-account access for S3 buckets (with granular per-bucket IAM level permissions).</p>

<!-- more -->


<p>This guide assumes that you already have an IAM user on the account you want to enable access from (Our build cluster account).  And you&#8217;ll need to know the S3 bucket in question (This will be a bucket called <code>my-shared-bucket-20932</code> in our non-production account).  I&#8217;m also going to assume you have a basic understanding of IAM (How to create users, groups, etc&#8230;)</p>

<p>First step is to get your AWS account ID number - this is a 12 digit number.  You can find it in your account activity report.</p>

<p><img src="http://i.imgur.com/fRksx.jpg" title="AWS Account ID" alt="AWS Account ID" /></p>

<p>Next - go to the IAM user you are going to be granting access for to grab the User ARN.  You will need this when you create the bucket policy on the bucket in the other account you&#8217;re granting them access to.</p>

<p><img src="http://i.imgur.com/8cysM.jpg" title="User ARN" alt="ARN" /></p>

<p>After you have both the AWS account ID number <code>1234567890</code> and your User ARN <code>arn:aws:iam::1234567890:user/test.user</code>, access your S3 bucket properties for the bucket you are going to allow access to.  My example is going to use the bucket <code>my-shared-bucket-20932</code>.</p>

<p><img src="http://i.imgur.com/2G0lF.jpg" title="Bucket Policy" alt="Bucket Policy" /></p>

<p>Now you are going to need to paste in a bucket policy in JSON format - here is an example one below to enable &#8220;Get&#8221; access to anything in the bucket <code>my-shared-bucket-20932</code>.  If you wanted to allow full access, you could change the <code>s3:Get*</code> to <code>s3:*</code> or even <code>s3:Put*</code> if you only wanted to allow uploading files.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>{
</span><span class='line'>  "Version": "2012-02-02",
</span><span class='line'>  "Statement": [
</span><span class='line'>      {
</span><span class='line'>          "Sid": "NonProdAccountAccess",
</span><span class='line'>          "Effect": "Allow",
</span><span class='line'>          "Principal": {
</span><span class='line'>              "AWS": "arn:aws:iam::1234567890:user/test.user"
</span><span class='line'>          },
</span><span class='line'>          "Action": "s3:Get*",
</span><span class='line'>          "Resource": "arn:aws:s3:::my-shared-bucket-20932/*"
</span><span class='line'>      }
</span><span class='line'>  ]
</span><span class='line'>}</span></code></pre></td></tr></table></div></figure>


<p>Now that you have your S3 bucket policy in place - it&#8217;s time to create a new group that your user(s) will be a member of to allow them the ability to access the bucket in your other account.</p>

<p>Access your IAM tab in your AWS console - Create a group - and when your group is created - create a policy with the following information</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>{
</span><span class='line'>   "Statement":{
</span><span class='line'>      "Effect":"Allow",
</span><span class='line'>      "Action":"s3:Get*",
</span><span class='line'>      "Resource":"arn:aws:s3:::my-shared-bucket-20932/*"
</span><span class='line'>   }
</span><span class='line'>}</span></code></pre></td></tr></table></div></figure>


<p>It&#8217;s going to look something like this:
<img src="http://i.imgur.com/2te29.jpg" title="IAM Policy" alt="IAM Policy" /></p>

<p>Finally - make your IAM user a member of the group you just created - any they will now have access to your S3 bucket in a separate AWS account.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[What am I doing, and how did I get here?]]></title>
    <link href="http://blog.petecheslock.com/2011/12/21/what-am-i-doing-and-how-did-i-get-here/"/>
    <updated>2011-12-21T22:20:00-05:00</updated>
    <id>http://blog.petecheslock.com/2011/12/21/what-am-i-doing-and-how-did-i-get-here</id>
    <content type="html"><![CDATA[<p>After quite a long absence from blogging I have decided to return to discussing some of the new and (hopefully) interesting technologies that my team and I work with.
I work for Sonian as the Director of DevOps, and I manage 5 very skilled individuals who assist me with the operation of our systems in the cloud.  We work with lots of cutting edge technology (Such as Chef from Opscode), and where there is no software to do what we need - we create it ourselves (See <a href="https://github.com/sonian/sensu">Sensu</a> for an example).</p>

<p>In addition - I&#8217;m working to increase my knowledge of Ruby as we use Ruby for all our tools and applications.  Coming from a non-computer science background, that will be a challenge in itself.  I&#8217;ve starting by reading the fantastic book written by Chris Pine - <a href="http://www.amazon.com/Learn-Program-Second-Facets-Ruby/dp/1934356360">Learn to Program</a>.</p>

<p>I&#8217;ll be writing more about some of the challenges of managing big data and large system at scale in the cloud - where you have no control over network and disk I/O (among other things we can&#8217;t control), and discuss how we deploy, monitor, scale and secure our systems.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[But Wait, There's Less (Durability)!]]></title>
    <link href="http://blog.petecheslock.com/2010/05/21/but-wait-theres-less-durability/"/>
    <updated>2010-05-21T05:52:08-04:00</updated>
    <id>http://blog.petecheslock.com/2010/05/21/but-wait-theres-less-durability</id>
    <content type="html"><![CDATA[<p>Amazon <a href="http://aws.typepad.com/aws/2010/05/new-amazon-s3%0A-reduced-redundancy-storage-rrs.html">recently announced</a> a new tier of storage available within
their web services cloud infrastructure.  Amazon&#8217;s current storage solution,
S3, is truly the gold standard for durable cloud based storage that provides
99.999999999% durability (which if my math is right, means that for every 100
Billion objects stored in S3, Amazon &#8220;may&#8221; lose a single object every year).
Amazon is <a href="http://www.allthingsdistributed.com/2%0A010/05/amazon_s3_reduced_redundancy_storage.html">listening to their customers</a>, and now provides a lower
cost (33% cheaper) S3 storage solution called Reduced Redundancy Solution
(RRS).</p>

<!--more-->


<p>
This new service will allow companies who have systems in the AWS cloud to
leverage a lower cost solution to store data that can easily be retrieved from
another location or re-processed from source data.  You can now design your
application to request data from S3 RRS, and if the data object does not
exist, your application can retrieve it from another location or recreate the
object (maybe from source data on the more resilient S3 storage).   This may
be a great solution for companies that are using EC2 just for computing or
processing large data sets, S3 RRS could reduce your monthly costs by quite a
bit.</p>

<p>The only problem with this new storage service is that the cost is still
pretty high for what you get.   Also, AWS did not decrease the cost for the
data transfer to the RSS service (it&#8217;s the same as the standard S3), so they
can potentially lose your data and the worst of it is you have to pay them to
replace it.  But with a 99.99% reliability over the course of the year we&#8217;re
probably not talking about a lot of data.</p>

<p><a href="http://www.sonian.com">My company</a> makes its living by storing an unlimited
amount of our customers&#8217; data indefinitely.  We can do this because we can
leverage the highly resilient and low cost S3 storage to keep email, IM&#8217;s and
social media messages on our system forever without making huge capital
outlays in storage systems, colo&#8217;s, etc&#8230;   I think it&#8217;s great that AWS has
brought in this lower tier of storage to differentiate itself with the other
up and coming and established cloud computing providers by not forcing
everyone to use the same &#8220;expensive&#8221; long term storage.  But for my money,
it&#8217;s worth it to pay such a small amount more (5c per GB) for such a large
improvement in resiliency.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Moved into the Clouds]]></title>
    <link href="http://blog.petecheslock.com/2009/12/15/moved-into-the-clouds/"/>
    <updated>2009-12-15T06:00:24-05:00</updated>
    <id>http://blog.petecheslock.com/2009/12/15/moved-into-the-clouds</id>
    <content type="html"><![CDATA[<p>I had started this blog initially as a way to discuss storage and
virtualization solutions while working as a technology consultant.  But
recently a new opportunity presented itself, and I&#8217;ve now made the transition
out of consulting, and back to the start-up world.   This most recent
adventure is with a company called <a href="http://www.sonian.com">Sonian</a> which
provides a cloud based data archiving and eDiscovery solution.  What is so
wonderful about this new venture is we leverage the Amazon Web Services cloud
providing us the ability to consume storage and computing by the granule.  We
don&#8217;t need to make huge capital outlays in data centers, storage, servers,
etc&#8230;  And since we don&#8217;t need to buy and maintain all this hardware (which
will eventually be refreshed in 3-5 years), we can keep the costs low and pass
on those savings to our customers.</p>

<!--more-->


<p>Email is a management nightmare for companies.  People want to keep their
emails forever, they don&#8217;t want mailbox quotas, and they have decided that
email is the best place to store all their documents.   While working as a
technology consultant, many people I spoke with wanted to outsource their
email problem, and you see this as large organizations such as the City of LA
<a href="http://news.cnet.com/8301-27080_3-10384433-245.html">move to Google Apps</a>.
Now, most companies are not there yet when it comes to outsourcing all their
email, but outsourcing archiving is something that many companies are steadily
moving towards.  They don&#8217;t want to spend thousands on storage and servers for
an archiving solution that is only used from time to time.  This is where
Sonian comes in.  We can take your emails that you&#8217;ve been saving for 5 or 10
years, bring them in to our cloud based service and keep them securely,
forever.  And no, we won&#8217;t charge you huge amounts to do this, just a simple
flat monthly fee per user, per month.  We&#8217;ll also provide you a  web based
interface to search and categorize your emails for compliance or investigatory
reasons, and well as end user acesss.</p>

<p>So, it is a pretty exciting time here at Sonian, with almost 1900 customers in
the past couple years we must on to something. And our explosive growth here
only confirms that &#8220;The Cloud&#8221; is here, and people are ready to push their
data up to it.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[How to Add VMware Paravirtual SCSI (PVSCSI) adapters.]]></title>
    <link href="http://blog.petecheslock.com/2009/06/03/how-to-add-vmware-paravirtual-scsi-pvscsi-adapters/"/>
    <updated>2009-06-03T11:51:13-04:00</updated>
    <id>http://blog.petecheslock.com/2009/06/03/how-to-add-vmware-paravirtual-scsi-pvscsi-adapters</id>
    <content type="html"><![CDATA[<p>A few months before the vSphere release VMware showed some amazing stats in
regards to the increased level of I/O that can be attained in a virtual
infrastructure.    They posted this info on <a href="http://blogs.vmware.com/performance/2009/05/350000-io-operations-per-second-one-vsphere-host-with-30-efds.html">their blog</a> and the outcome of the testing was impressive.   They were able to achieve 350,000 I/O operations per second on a single vSphere host (ESX 4.0) and with just 3 virtual machines.  Their testing utilized the EMC Enterprise Flash Drives, which have an incredibly high throughput.  They talked about how the VMware Paravirtual SCSI (PVSCSI) adapter was able to achieve 12% more throughput with 18% less CPU cost compared to the LSI virtual adapter.</p>

<!--more-->


<p>Those stats are equally impressive, since being able to achieve an almost 20%
CPU decrease while increasing performance means more density per virtual host.
This further allows companies to squeeze more resources from their virtual
infrastructure without needing to purchase more hardware.  And in this
economy, everyone is trying to get their money&#8217;s worth when it comes to their
infrastructure capital spending.</p>

<p>Since PVSCSI adapters are not supported for boot devices (they work, just not
<em>supported</em> by VMware), you will need to add a 2nd hard drive to use the
PVSCSI adapter.   When setting up a new virtual environment on vSphere for a
client, it wasn&#8217;t clear where exactly that option is located.  It seemed when
adding a 2nd hard drive, it just used the existing SCSI adapter.  On the
VMware KB site, I found KB article <a href="http://kb.vmware.com/selfserv%0Aice/microsites/search.do?cmd=displayKC&amp;externalId=1010398"><strong>1010398</strong></a> which talks about
the steps to set that up.  Below are the details from the VMware KB site.</p>

<p>The most important step is <strong>#12</strong>, you NEED to select a SCSI adapter that starts from SCSI (1:0) through SCSI (3:15).  Selecting the next available SCSI interface, eg. SCSI (0:1), uses the boot volume SCSI adapter.</p>

<p><img src="http://blog.petecheslock.com/images/pvscsi/pvscsi1.jpg" alt="pvscsi1" /></p>

<p>When you select SCSI (1:0) or higher, you&#8217;ll see the new SCSI controller added.</p>

<p><img src="http://blog.petecheslock.com/images/pvscsi/pvscsi2.jpg" alt="pvscsi2" /></p>

<p><strong>Note</strong>: Booting from a disk attached to a PVSCSI adapter is not supported.
The system software must be installed on a disk attached to an adapter that
does support bootable disk.</p>

<blockquote><ol>
<li>Launch a vSphere Client and log in to an ESX host system.</li>
<li>Select a virtual machine, or create a new one.</li>
<li>Ensure a guest operating system that supports PVSCSI is installed on
the virtual machine.  Currently: _Windows Server 2008 Windows Server 2003 Red
Hat Enterprise Linux (RHEL) 5</li>
<li>In the vSphere Client, right-click on the virtual machine and click
<strong>Edit Settings</strong>.</li>
<li>Click the <strong>Hardware</strong> tab.</li>
<li>Click <strong>Add</strong>.</li>
<li>Select <strong>Hard Disk</strong>.</li>
<li>Click <strong>Next</strong>.</li>
<li>Choose any one of the available options.</li>
<li>Click <strong>Next</strong>.</li>
<li>Specify the options your require. Options vary depending on which type of disk you chose.</li>
<li>Choose a <strong>Virtual Device</strong> N<strong>ode </strong>between SCSI (1:0) to SCSI (3:15) and specify whether you want to use <strong>Independent</strong> mode.</li>
<li>Click <strong>Next</strong>.</li>
<li>Click <strong>Finish</strong> to finish the process and exit the Add Hardware wizard. A new disk and controller are created.</li>
<li>Select the newly created controller and click <strong>Change Type</strong>.</li>
<li>Click <strong>VMware Paravirtual</strong> and click <strong>OK</strong>.</li>
<li>Click <strong>OK</strong> to exit the Virtual Machine Properties dialog.</li>
<li>Power on the virtual machine.</li>
<li>Install VMware Tools. VMware Tools includes the PVSCSI driver.</li>
<li>Scan and format the hard disk.</li>
</ol>
</blockquote>

<p>I hope this helps anyone who wants to use the PVSCSI adapter, but is having
trouble locating how exactly you add it to your virtual machine.  This vSphere
update and the <a href="http://blogs.vmware.com/performance/2009/05/350000-io-operations-per-%0Asecond-one-vsphere-host-with-30-efds.html">blog
article</a> referenced above from the VMware
website is just another example that shows if you size your virtual
environment correctly, you can virtualize even your highest demanding I/O
enterprise applications.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[VMware Fault Tolerance]]></title>
    <link href="http://blog.petecheslock.com/2009/05/21/vmware-fault-tolerance/"/>
    <updated>2009-05-21T04:00:48-04:00</updated>
    <id>http://blog.petecheslock.com/2009/05/21/vmware-fault-tolerance</id>
    <content type="html"><![CDATA[<p>vSphere was just released to general availability today, and one of the best
features of this upgrade is the addition of VMware Fault Tolerance.   From the
VMware site:</p>

<blockquote><p>VMware Fault Tolerance is leading edge technology that provides continuous
availability for applications in the event of server failures,  by creating a
live shadow instance of a virtual machine that is in virtual lockstep with the
primary instance. By allowing instantaneous failover between the two instances
in the event of hardware failure, VMware Fault Tolerance eliminates even the
smallest of data loss or disruption.</p></blockquote>

<!--more-->


<p>At VMworld 2008 they let us play with a demo of VMware FT, and it really is an
amazing technology.  Almost like watching your first VMotion (&#8220;You mean the VM
moved from this server to that server?&#8221;).   VMware FT will allow you to have
two running versions of the same virtual machine.  If you lose a host, the VM
will continue running with no dataloss and minimal downtime (technically just
a couple pings drop, but your users would not be likely to notice a disruption
of service).  VMware FT does this by sending the same CPU instructions to both
CPU&#8217;s via a FT logging NIC, which is a dedicated gigabit or better ethernet
NIC on your vSphere hosts.</p>

<p>With any software that gives you that kind of power, there are some caveats
and requirements to make FT work in your environment.   I felt it was a good
idea to start a blog post that I could update with the various requirements
for the use of FT with vSphere.  This list is my no means all-inclusive, but
simply a place where I can keep track of the needs and caveats of FT.  Read
more for my listing of requirements that I&#8217;ve found thus far.</p>

<h2>Host Requirements</h2>

<p><strong>CPU</strong></p>

<ul>
<li>AMD Barcelona (Series 13xx, 23xx, 83xx)</li>
<li>Intel Harpertown (Intel 31xx, 33xx, 52xx, 54xx, 74xx)</li>
<li>Specifically a Hardware Virtualization (HV) enabled CPU</li>
<li>Intel VT or AMD-V enabled in the BIOS</li>
<li>Disable any power management in the BIOS (recommended)</li>
<li>Disable Hyper Threading (recommended)</li>
</ul>


<p><strong>Network</strong></p>

<ul>
<li>2 FT Logging NIC (suggested)</li>
<li>1Gbps or better</li>
</ul>


<p><strong>Storage</strong></p>

<ul>
<li>Shared</li>
<li>Fiber Channel, iSCSI, or NAS</li>
</ul>


<p><strong>ESX</strong></p>

<ul>
<li>Same build version of ESX on each host.</li>
<li>VMware HA must be enabled on the primary and secondary hosts in the cluster.</li>
</ul>


<p><strong>Guest Requirements</strong></p>

<ul>
<li>All ESX supported guest OS&#8217;s, 32bit or 64bit</li>
<li>One (1) vCPU  - vSMP is not yet supported.</li>
<li>Thin-provisioned disks are not supported (they will be converted to thick)</li>
<li>Paravirtualization is not supported</li>
<li>Physically attached CD-ROM, Floppy not supported</li>
<li>Physical RDM&#8217;s (Raw Device Mappings) not supported - Virtual RDM is supported.</li>
</ul>


<p><strong>Caveats</strong></p>

<ul>
<li>Storage VMotion not supported</li>
<li>N-Port ID Virtualization (NPIV) not supported</li>
<li>Need to have no single points of failure in any part of the environment (not required, but defeats the point of FT if your environment is not redundant).</li>
<li>DRS can not be enabled on the protected VMs (You can still run manual VMotion&#8217;s)</li>
<li>Hot add of of devices to the protected VMs is not supported</li>
<li>Snapshots are not supported (must be deleted before protecting)</li>
<li>VM Hardware must be at v7</li>
<li>Remove 3rd party clustering solutions prior to enabling FT.</li>
</ul>


<p>Anything else that I&#8217;m missing?  Let me know in the comments, and I&#8217;ll keep
the above info updated.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Invalid arguments: Virtual machine has no snapshots]]></title>
    <link href="http://blog.petecheslock.com/2009/05/14/invalid-arguments-virtual-machine-has-no-snapshots-hidden-snapshots/"/>
    <updated>2009-05-14T09:05:57-04:00</updated>
    <id>http://blog.petecheslock.com/2009/05/14/invalid-arguments-virtual-machine-has-no-snapshots-hidden-snapshots</id>
    <content type="html"><![CDATA[<p>I ran into an very interesting issue today with a client who is using Veeam
Backup and Replication to keep their virtual machines replicated to a remote
ESX server for disaster recovery.  Veeam starts a replication job and will
take a snapshot of the virtual machine and then replicate the main VMDK disk
file to the remote site.  When the backup job finishes Veeam will tell VMware
to remove the snapshot until the next replication schedule runs.  Since we are
replicating our VM&#8217;s across a slow WAN connection (600Kbps optimized with
Citrix WANScalers) the replication can often timeout, or hang.  Today I
noticed that the replication had not updated since last night.  So I needed to
stop the replication and re-start it.  Since the Citrix WANScalers can cache
as well as compress, restarting a failed replication job is usually pretty
quick, as most of the data was previously cached on the Citrix boxes. Here are
the details of what I found, and how I fixed it&#8230;</p>

<!--more-->


<p>To make the snapshot management easier, I store the VM configuration files on
a separate LUN, and where you store the VM configuration files is where the
snapshot deltas are created.  This lets us keep the main VMDK&#8217;s LUN&#8217;s fairly
static, without worry of snapshots filling up our available space.   When
looking at a specific VM today, I noticed that the data stores listed only
showed the Snapshot LUN.  This had meant that there was a snapshot taken which
had not been removed.  This particular VM was not currently replicating, so I
knew that snapshot should not have existed.  Normal operation should show both
the snapshot LUN and the VMDK LUN.</p>

<p>This VM:
<img src="http://blog.petecheslock.com/images/snapshot/snapshot1.jpg" alt="snapshot1" /></p>

<p>Working VM:
<img src="http://blog.petecheslock.com/images/snapshot/snapshot2.jpg" alt="snapshot2" /></p>

<p>When going to the Snapshot Manager, I was not able to see any snapshots on that VM.
<img src="http://blog.petecheslock.com/images/snapshot/snapshot5.jpg" alt="snapshot5" /></p>

<p>I accessed the Datastore Browser to see if there were any delta VMDK&#8217;s on the
disk; there ended up being 2 delta&#8217;s on my datastore.
<img src="http://blog.petecheslock.com/images/snapshot/snapshot3.jpg" alt="snapshot3" /></p>

<p>I wanted to confirm that the virtual machine was indeed running off the delta
disk.  To check that, I simply went to edit the settings of this virtual
machine, and looked at the virtual disk object.  In this instance it was
accessing the disk &#8220;exch-000002-delta.vmdk&#8221;, which was one of my delta disks.
<img src="http://blog.petecheslock.com/images/snapshot/snapshot4.jpg" alt="snapshot4" /></p>

<p>There is a command you can run on the service console to try to remove snapshots if you are unable to with the VI Client.</p>

<p><code>/usr/bin/vmware-cmd <path to VM cfg> removesnapshots</code></p>

<p>When I ran this command, I received the following error:</p>

<p><code>VMControl error -3: Invalid arguments: Virtual machine has no snapshots</code></p>

<p>Doing some research on the <a href="http://communities.vmware.com">VMware communities website</a>, I found a recommendation to create a
new snapshot excluding the VM memory, and then removing the snapshot.  When I created a new snapshot on my virtual machine, I saw something very interesting.   I saw an additional snapshot called &#8220;Consolidate-Helper-0&#8221;</p>

<p><img src="http://blog.petecheslock.com/images/snapshot/snapshot7.jpg" alt="snapshot7" /></p>

<p>At this point I deleted all the snapshots from the VM, and waited for the process to finish.  A couple of my snapshots were pretty large, so vCenter timed out before they finished.  I waited an hour, and then confirmed they were gone by checking the virtual disk resource in the VM settings.</p>

<p><img src="http://blog.petecheslock.com/images/snapshot/snapshot8.jpg" alt="snapshot8" /></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[How to Extend Windows Boot Volumes in VMware]]></title>
    <link href="http://blog.petecheslock.com/2009/04/07/how-to-extend-windows-boot-volumes-in-vmware/"/>
    <updated>2009-04-07T08:58:11-04:00</updated>
    <id>http://blog.petecheslock.com/2009/04/07/how-to-extend-windows-boot-volumes-in-vmware</id>
    <content type="html"><![CDATA[<p>I am frequently asked the question about how to grow a VMware virtual disk
(VMDK) and have it be recognized by the operating system.   If you are trying
to simply extend a non-system volume within Windows (ie, anything other than
the C:\ drive), then the process is pretty simple (refer to MS <a href="http://support.microsoft.com/kb/325590">KB
325590</a>).   But when you are trying to
grow a C:\ with windows, you need to get around the limitation of extending
the system partition.  This is just one more instance where VMware shows how
powerful and flexible it truly is.</p>

<!--more-->


<p><strong>Disclaimer - Before doing anything like this, make sure you have adequate backups and understand that this is probably not supported by Microsoft or VMware - I take no responsibility for any damage to your systems</strong><br/>
If you would like to grow a virtual disk the &#8220;safe&#8221; way (read: much, much
slower), you can use VMware&#8217;s Converter tool, which will grow the volume for
you on conversion, the downside is that it will require the VM to be shutdown
during the conversion.   The steps below can significantly speed up the
process, especially if you have a very large VMDK which needs to be extended.</p>

<p>To grow a system volume, you are going to need a 2nd virtual machine that will
act as the helper VM to mount the virtual disk you would like to extend.  I
will be using 2 virtual machines, both are Windows 2003 standard.</p>

<p>The disk on the VM that I need to extend is currently 20GB, I would like to
make this 80GB.  I have already made sure that I have enough space on my VMFS
formatted storage partition to support this larger VMDK.</p>

<p><img src="http://blog.petecheslock.com/images/extenddisk/extenddisk1.jpg" alt="extenddisk1" /></p>

<p>Next, I need to shutdown the VM to extend the disk.  There are 2 different
ways to extend a VMDK.  The easiest way to grow the VMDK disk is to right-
click the virtual machine in the VI Client, and select &#8220;Edit Settings&#8221;</p>

<p><img src="http://blog.petecheslock.com/images/extenddisk/extenddisk2.jpg" alt="extenddisk2" /></p>

<p>Then Click on the virtual disk object, and enter in the new size of the VMDK
(in my case I would like to extend this to 80GB), then click OK.</p>

<p><img src="http://blog.petecheslock.com/images/extenddisk/extenddisk3.jpg" alt="extenddisk3" /></p>

<p>Power on the VM to make sure the OS can see the additional space; right-click
&#8220;My Computer&#8221; >> &#8220;Manage&#8221; >> &#8220;Disk Management&#8221;.  It will not be able to use
the space until we tell the OS to extend the partition to fill the remaining
space.  You should see something similar to the image below.</p>

<p><img src="http://blog.petecheslock.com/images/extenddisk/extenddisk4.jpg" alt="extenddisk4" /></p>

<p>Now, shut the VM down again, and also shutdown the helper VMh, the virtual
machine that you are going to use to mount and extend the disk.   Once both
virtual machines are shutdown, we are going to remove the virtual disk we are
growing from our VM, and attach it to our helper VM.  To do this, right click
the VM we are growing and select &#8220;Edit Settings&#8221;, click the virtual disk
resource, and click &#8220;Remove&#8221;.</p>

<p><img src="http://blog.petecheslock.com/images/extenddisk/extenddisk5.jpg" alt="extenddisk5" /></p>

<p>Click the option to &#8220;Remove from Virtual Machine&#8221;, do NOT click the other
option, this WILL delete your virtual disk.</p>

<p><img src="http://blog.petecheslock.com/images/extenddisk/extenddisk6.jpg" alt="extenddisk6" /></p>

<p>Now right click our helper VM, select &#8220;Edit Settings&#8221;, then select &#8220;Add&#8221;
toward the bottom of the screen.</p>

<p><img src="http://blog.petecheslock.com/images/extenddisk/extenddisk7.jpg" alt="extenddisk7" /></p>

<p>Select &#8220;Hard Disk&#8221;, next, and select the option to use an existing virtual
disk.</p>

<p><img src="http://blog.petecheslock.com/images/extenddisk/extenddisk8.jpg" alt="extenddisk8" /></p>

<p>Next, you will need to browse for the VMDK file that we are extending.  Since
we have already grown the virtual disk to 80GB you will notice that in the
size column for this VMDK.</p>

<p><img src="http://blog.petecheslock.com/images/extenddisk/extenddisk9.jpg" alt="extenddisk9" /></p>

<p>After selecting the full path to your virtual disk, click thru the last couple
pages, and you will see the virtual disk added to the VM&#8217;s hardware list.
After clicking OK, power-on the virtual machine, logon, and you will see the
other VM&#8217;s disk connected at D:\ (or the next available drive letter).</p>

<p><img src="http://blog.petecheslock.com/images/extenddisk/extenddisk10.jpg" alt="extenddisk10" /></p>

<p><img src="http://blog.petecheslock.com/images/extenddisk/extenddisk11.jpg" alt="extenddisk11" /></p>

<p>Now, we can finally run <a href="http://support.microsoft.com/kb/325590">diskpart</a> to
extend our volume.  Click &#8220;Start&#8221; >> &#8220;Run&#8221; >> type &#8220;cmd&#8221; >> type &#8220;diskpart&#8221;.
You should see the diskpart command prompt.</p>

<p><img src="http://blog.petecheslock.com/images/extenddisk/extenddisk12.jpg" alt="extenddisk12" /></p>

<p>Type &#8220;list volume&#8221; to display a list of all the attached volumes:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>DISKPART&gt; list volume</span></code></pre></td></tr></table></div></figure>


<pre><code>Volume      Ltr  Label        Fs     Type        Size     Status     Info
----------  ---  -----------  -----  ----------  -------  ---------  --------
Volume 0     C                NTFS   Partition     20 GB  Healthy    System
Volume 1     D                       CD-ROM          0 B  Healthy Volume 2
E                              NTFS   Partition     20 GB  Healthy</pre>


<p></code></p>

<p>We want to select the system volume 2, the boot volume is the disk for our
helper VM.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>DISKPART&gt; select volume 2
</span><span class='line'>
</span><span class='line'>Volume 1 is the selected volume.</span></code></pre></td></tr></table></div></figure>


<p>Then we extend:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>DISKPART&gt; extend
</span><span class='line'>
</span><span class='line'>DiskPart successfully extended the volume.</span></code></pre></td></tr></table></div></figure>


<p>If you launch disk management, you will see the volume is now a single 80GB
partition.</p>

<p><img src="http://blog.petecheslock.com/images/extenddisk/extenddisk13.jpg" alt="extenddisk13" /></p>

<p>Finally, we shutdown our helper machine, detach the disk, and reattach it to
our original VM.  When you power on the original with our extended disk, you
will immediately see the additional space.  You may be prompted to reboot one
time, so that the operating system will be able to work with the larger re-
added disk.</p>

<p><img src="http://blog.petecheslock.com/images/extenddisk/extenddisk14.jpg" alt="extenddisk14" /></p>

<p>Enjoy your additional space!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[ESX 3.5 Update 4 Released]]></title>
    <link href="http://blog.petecheslock.com/2009/03/28/esx35update4released/"/>
    <updated>2009-03-28T20:11:05-04:00</updated>
    <id>http://blog.petecheslock.com/2009/03/28/esx35update4released</id>
    <content type="html"><![CDATA[<p>I just saw today that it looks like VMware ESX 3.5 Update 4 was released a
couple of days ago.  I&#8217;m pretty excited about this upgrade as it includes an
updated vmxnet adapter. </p>

<p>From the VMware site:</p>

<blockquote><p><strong>Expanded Support for Enhanced vmxnet Adapter </strong><strong>—</strong> This version of ESX
Server includes an updated version of the VMXNET driver (VMXNET enhanced) for
the following guest operating systems:</p>

<ul>
<li>Microsoft Windows Server 2003, Standard Edition (32-bit)</li>
<li>Microsoft Windows Server 2003, Standard Edition (64-bit)</li>
<li>Microsoft Windows Server 2003, Web Edition</li>
<li>Microsoft Windows Small Business Server 2003</li>
<li>Microsoft Windows XP Professional (32-bit)</li>
</ul>
</blockquote>

<!--more-->


<p>The reason this is such a great update, is because of the support for jumbo
frames within this new group of OS&#8217;s.  Previously the enhanced vmxnet driver
was only supported on Windows Enterprise and Datacenter versions.  When using
<a href="http://www.equallogic.com">certain iSCSI arrays which support application consistant data snapshots</a>, you need to install the iSCSI initiator within the virtual machine.  This is the only way for the EqualLogic toolkit to take application level snapshots of Microsoft SQL or Exchange Server.
Additionally you will require a NIC which supports jumbo frames.   Previously
this was done via a dirty (and unsupported) hack if you were running the non-
supported OS.  Now that VMware supports (<a href="http://kb.vmware.com/selfservice/documentLink.do?externalID=1007654">for data traffic only</a>)
jumbo frames for the standard version of Windows OS&#8217;s, this can decrease the
CPU usage for the guest VM, while not having to spend 4x as much for the
enterprise version of the OS.   So it&#8217;s still &#8220;technically&#8221; not supported for
iSCSI traffic, but works great and can lower the guest CPU usage during high
data IO operations.</p>

<p>Additionally, as a old school linux guy and Ubuntu fan, I&#8217;m glad they are
adding support for newest version of Ubuntu desktop and server, 8.10 -
Intrepid Ibex</p>
]]></content>
  </entry>
  
</feed>

