Virtualization

JessCoburn.Com running on ARR! and that not be Pirate speak thar Matey!

3 Blog posts to say “Hey I’m running on my site load balanced using ARR”. This is the third and hopefully last blog post for tonight.  I posted two other posts tonight:

  1. Discusses the first stage of Applied Innovations Cloud Initiative.
  2. Discusses ARR & Load balancing.

All of this was to explain how I’m running my website currently (which I tend to test everything on first so I break it a lot but you have to break eggs to make cake, right?).

ARR or Application Request Routing is a new extension to IIS7 that allows you to turn a Windows Server (or VPS as in my case) into an Application Aware Load Balancer with such features as offloading compression and SSL encryption!

How I’m running JessCoburn.com

For the past year and a half, JessCoburn.com has (and continues to) run on a shared web hosting server that runs IIS7 on top of Windows Server 2008. My site is treated identically to how my customers sites are treated as I firmly believe in eating your own dog food (no not ALPO but using the same services you sell). The site makes use of FastCGI to run the PHP engine and backends to a shared MySQL server. All of our shared web servers connect to the SQL servers via a private dedicated gigabit network for optimal performance. In addition, I make use of expiry headers for output caching of my images and also use the wordpress plugin supercache to reduce my reliance on MySQL queries so my pages render faster.  So that’s why it’s been fast, I think you’d agree that’s pretty well optimized for a Windows shared hosting website (same thing you could for as little as $8.33 a month with one of our Windows hosting accounts..  Sure it’s optimized but there’s still a problem.

What’s the problem with JessCoburn.com?

The problem is my web site runs on a single web server. This means if there’s maintenance on the box (don’t worry we do this during load traffic times) there’s still potentially downtime. This also means if my site ever gets popular enough to make the first page of DIGG or REDDIT (use those social bookmarks please) then no matter how much I optimize my site on that one web server, I could have a problem… These are the trade-offs we accept with shared hosting (today).

But what if, I could run JessCoburn.com on multiple web servers and load balance them? Yeah who’s going to go out and spend 20K to load balance his little wordpress blog (the profit margins aren’t that good you know).  Well thanks to our own cloud computing initiative and the good folks on the IIS Team at Microsoft I can do just that for peanuts! Today!

My new configuration

I have a Windows 2008 VPS running IIS7 with ARR 2.0 Beta 2 on it. It’s of course running on our High Availability Managed Windows VPS Hosting Cluster.  I also have JessCoburn.com still running on the shared Windows Hosting server running on IIS7 and I setup another VPS server running on top of Virtuozzo running Windows 2003 and copied the site there. Just to show that you can route requests to any kind of server.  Both servers back end to the same MySQL server.

All requests for JessCoburn.com come into the ARR server and it then proxies these requests between the Shared Server and the Win2003 VPS server.  In the event one of the sites crashes, is down or has problems, ARR will redirect all requests to the other server.

Performance Tips for Your Windows VPS running Virtuozzo

Here’s Jess’s top 10 tips and tricks to help optimize your Windows VPS server running on Virtuozzo. 

  1. Disable Indexing Service
    Unless you’re using the FrontPage search bot you generally don’t need indexing service running and you should disable it.
  2. Defrag your drives
    Disk I/O is king, especially in a VPS and you should be regularly defragging your drives in your VPS just as you would in a physical server.
  3. Don’t run antivirus in the VPS
    Antivirus should always be run from the host node and on our servers it is. We use either AVG or McAfee on our hardware nodes.  This doesn’t mean you have to accept virus infected emails. Configure your mail client to allow a suitable delay in email delivery (I recommend 60 seconds if you can, otherwise 30 should be sufficient) and the hostnode antivirus will take care of the rest. 

    Smartermail installs clamd these days and I recommend you disable it and not use it. It’s proven to be quite the resource hog.

  4. Don’t run spamassassin
    Disable spamassassin checks in your VPS when running Smartermail. If you absolutely have to have spamassassin running with your VPS you should run spamassassin on a Linux dedicated server or vps and remotely connect to it in smartermail, this works great and allows you to make use of threading.
  5. Enable Windows Firewall and secure your VPS
    This is a must. Although the kernel is protected in your VPS, you’re still responsible for security in your virtual private server. Enable Windows Firewall and configure it.

    While on the topic of security you do not have to install OS updates, these are managed at the host-level. However you do need to remain aware of new updates and install them for any other server software you may have installed on your windows vps server such as SQLexpress updates, Smartermail updates, etc.  If you’re using Plesk you can request support to update Plesk for you as it’s installed through an application template. Verify things like open-relay mail servers are not enabled, anonymous FTP uploads are disabled, etc.

  6. Whenever possible use an application template.
    Application templates save memory and diskspace on your VPS.  An example of this is the OS install on your VPS. With just Windows your VPS uses about 150MB of diskspace, yet a full install of the OS uses about 4GB of diskspace. In fact an install of Windows Server 2003 on almost every other virtualization platform will use 4GB of diskspace.  This is a huge savings.
  7. Close your Terminal Services sessions and logout, do not just disconnect. 
    Each active Terminal Services session uses about 20MB of memory.  When you consider each VPS has generally 2 TS sessions (3 if you include the fact you’re able to TS into the console by using the command mstsc /console /v:YOUR_SERVERNAME ) and figure about 30 active VPSs on a machine that adds up to close to 2GB of memory that would be wasted memory on a server.
  8. Some applications when installing may require you to connect to console port.
    One such application is Windows Sharepoint Services 3.0. To connect to the console port use the command from dos:  mstsc /console /v:YOUR_SERVERNAME  where YOUR_SERVERNAME is your VPS host name.
  9. Don’t forget that you can manage your VPS through the Virtuozzo Power Panels,
    This includes tasks such as stop, start, reboot, backup, restore and even mount the filesystem without turning on the VPS.  To access the management port go to:  https://YOUR_SERVERNAME:4643/   where YOUR_SERVERNAME is your VPS host name. Remember when connecting to a port you have to explicitly type http://YOUR_SERVERNAME:PORT/  and not just type YOUR_SERVERNAME:PORT.

    There is a bug in the virtuozzo power panels that it may throw errors and say contact your hosting provider. If you get these errors the first thing you should do is go to preferences and set the timezone to your local time zone and not leave it to server default.  This generally fixes that error and a bugfix is due out shortly from SWsoft to fix this known issue.

  10. Configure your SQL services or better yet use shared SQL.  These days any web application is going to require a SQL database be it MSSQL or MySQL.  My recommendation is use a shared SQL database on a shared database server. Today SQL hosting is pretty cheap (about $10/month for 100MB is the norm) and networks like ours use a dedicated gigabit network for internal traffic so any latency connecting to the SQL server would be offset quickly by the amount of memory and Disk I/O you’d save by not running SQL on your VPS.  If you must run SQL on your VPS though then make sure you set a memory cap on the SQL service or you’ll find before long it’s using all your memory on your VPS and your apps will be starving for memory.
  11. What? 11? You said there was only ten.  Consider this … The Bonus Tip:  Backup, Backup, Backup. 
    With any server it’s important to have backup copies of your web content, databases and any information that’s vital to the operation of your websites and online business. This is the same with VPS servers.  No matter what any host tells you, you should never rely on just one backup or on someone else to manage your backups for you. You should always maintain a local (as in, your local desktop computer in the office or at home) copy of your website and website details.   I have heard horror stories time and time again of this and it always starts as “Well, I assumed  THEY/HE/SHE/THEM/YOU/(Anyone else but me) was doing backups and they just worked!”  What’s the problem?    The problem is backups go bad, files don’t restore, media fry, drives fizzle and bits get lost.  It happens and if anyone tells you it doesn’t happen don’t trust them, keep a local backup of your sites.  Think about this, and we’ll use this scenario instead of thinking of exploding U-Hauls full of fertilizer or natural disasters. One day all of the employees of your hosting company pool in $1 for a lottery ticket and a chance to win a billion dollars. They hit the lottery and each walk away with $100 million (much happier story than that flaming u-haul truck).  During all the celebrating, they decide to have a weenie roast in lobby of the building, the flames get out of control the building, the servers and the backups go up in flames. The new billionaires decide there’s no way they’re fielding those calls and take their new found wealth buy a island in the Caribbean and retire.  All your backups with that host are lost and anyone that knows how to restore your backups is off searching for buried treasure in the Caribbean. It will take ages to ever restore your backups. But if you have a local copy of your data (even if it’s a week old or month old), you’ll be back online and able to rebuild your site within a few days. Backup Backup Backup.

Those are my tips. When it’s said and done the common sense solution is this.  VPS’s have two resources they need to manage the most, that’s memory and disk I/O.  Everything you can do to minimize or optimize your usage of these two resources will improve your VPS performance. I’d love to hear from anyone else that has any recommendations on how to improve the performance of a VPS/VE running on Virtuozzo for Windows.