I would like to get your thoughts on an architecture to handle failover between 2 application servers hosting multiple applications (.NET based websites, SQL Server) in Switzerland. The goal is to have a limited downtime in case of failure to switch over secondary server (< 2 hours), reasonable costs and limit human interactions to recover.
- DNS failover is not applicable for us as we don't manage DNS for each application hosted on our application server.
- We would like to avoid hosting our application server on managed VM to be able to manage licences, VM transfer and have high I/O performance.
At this stage my plan would be to use following setup :
- Nginx hosted on Azure Switzerland (F2sv2 - 2 vCPU(s) - 4 GB RAM)
- Server A : Dell R6515 Dedicated server in Switzerland a Tier IV datacenter (active instance - to buy)
- Server B : Dell R6515 Dedicated / development server in our own office infrastructure in Switzerland (1Gb/s connection) (backup instance - already buyed)
Nginx (80 Eur/month - no cost as MS Partner)
Nginx main goal is to allow us to switch traffic from Server A IP to Server B IP in case of a failure. All the application services DNS will point to the Nginx IP. As it's hosted Azure it should be redundant by design if the Nginx itself fails. Maybe they are some features to ensure redundancy on Azure for Nginx.
VMWare Essential (~ 600 Eur)
We currently own a WMWare essential licence which allows us to run up to three ESXi hosts. Server A and Server B will be ESXi instances registered under VSphere. Server A will host the active VM containing our application server.
Veeam Community Edition (free)
We plan to use Veeam Community Edition to replicate the application server VM image + SQL Server transaction logs from Server A to Server B.
Server A Hardware / Datacenter Failure
So far, I imagine following procedure should be performed in case of failure of hardware or datacenter failure at Server A : 1. Configure Nginx for maintenance page 2. Restore application server VM Image on Server B using Veeam 3. Restore transaction logs on Server B using Veeam 4. Change Nginx configuration to redirect traffic from Server B to Server A. 5. When Server A is available again, repeat procedure the other way from Server B to Server A
As I am no infrastructure / WMWare expert, I would love to have your thoughts on this architecture or any proposal which would help us to achieve our goal. At this stage I am asking myself what would be the latency/performance impact to make every request beeing redirected from the Nginx to the application center even if both are very near in terms of location.
Thank you for your advices !