Designing a Reliable Web Application
-
This is split from an original thread about two (or more) host nodes and a single NAS back end (for context.)
The first thing that you do is never introduce a shared component, like storage. The NAS here would be 100% critical to everything that you do so it is a huge risk that you have no need for that would undermine your entire setup. If anything happened to the NAS you'd have nothing. That the NAS is also the most fragile component of the setup makes this even worse. That the NAS in question is a black box appliance that is out of support and no long a viable business use device takes this to a whole 'nother level of risky.
No reliable design can use a shared storage device of this type for reliability, the shared storage is directly in opposition to your design goals. So remove any thinking around a shared device immediately as it is the polar opposite of what you want.
-
Now let's talk about your application. What are you running, what are the components that we need to protect? Presumable this is a web application front end and a database. Anything else? We need details on these. Is it Apache, NGinx, WordPress, NodeBB, MySQL, PostgreSQL, MongoDB, etc.
-
I am running A ms project server, Wordpress, Litespeed webserver, Cpanel, mysql, Sharpoint, Sugarcrm,
-
@mroth911 said in Designing a Reliable Web Application:
I am running A ms project server, Wordpress, Litespeed webserver, Cpanel, mysql, Sharpoint, Sugarcrm,
Those are all totally different applications. For example your wordpress installation may include Cpanel and mysql, but sharepoint is something different entirely.
What are you trying to do exactly?
-
@mroth911 said in Designing a Reliable Web Application:
I am running A ms project server, Wordpress, Litespeed webserver, Cpanel, mysql, Sharpoint, Sugarcrm,
@mroth911 said in Designing a Reliable Web Application:
I am running A ms project server, Wordpress, Litespeed webserver, Cpanel, mysql, Sharpoint, Sugarcrm,
Okay, that's a lot of different stuff. I assume you are running different operating systems for the different workloads?
cPanel, SugarCRM and WordPress are on LiteSpeed, I assume, and will be managed by a load balancer? These are static and need no HA protect other than what the load balancer handles, correct? The only risk that these face is either losing all nodes or if shared storage is introduced that they will then be at risk from that. They are naturally HA when load balanced so there is nothing to do there, correct?
-
Well.. I am trying to setup HA .. One for my internal business applications for my users, My business uses ms project, Sugar Crm, 3cx Pbx server and 5 to 6 sub domains. with a wordpress site.
and HA for every consumer we host there website.. Via Wordpress. Html, PHP
-
@mroth911 said in Designing a Reliable Web Application:
I am running A ms project server, Wordpress, Litespeed webserver, Cpanel, mysql, Sharpoint, Sugarcrm,
MySQL / MariaDB have to be handled at the database layer and cannot be safely handled for HA via the platform and can not share storage without having no chance at HA (without insanely expensive enterprise SAN shared storage that makes zero sense here and still wouldn't be any better than having nothing shared.)
Galera is the standard answer here. There is no other approach to HA for databases, so you need this no matter what else you do.
-
@mroth911 said in Designing a Reliable Web Application:
Well.. I am trying to setup HA .. One for my internal business applications for my users, My business uses ms project, Sugar Crm, 3cx Pbx server and 5 to 6 sub domains. with a wordpress site.
Why invest in HA for internal users? What does downtime cost them that would warrant this? Is this over 20,000 internal users? I've never seen Project software that had a high cost of momentary downtime.
3CX PBX can be handled by platform level HA. So XenServer or Hyper-V without shared storage will "just do this", nothing special needed there. These will handle the web servers too, but not as well as not doing it. So don't. The PBX is unique of these workloads in that it is easily HA'd using the platform.
-
MS SQL Server and SharePoint are more complex and you'll need to address those individually if you really need HA for them. This will have licensing costs and other overhead. Almost never would these be candidates for HA. These will be a big deal on their own. Everything else is trivial.
-
ok .. so i am on the right track I guess. I would like to split the database .... for ms sql. have one MS sql server
-
@mroth911 said in Designing a Reliable Web Application:
ok .. so i am on the right track I guess. I would like to split the database .... for ms sql. have one MS sql server
You don't have to do that. MS SQL can run on Linux now. No need for Windows for that, but SQL Server on Linux is very, very new. MySQL needs to run on Linux, of course, stability, cost and performance are all bad on windows so no production system would use that.
-
And you don't need to split the database from the web front end, that's unnecessary. I probably would as well, but nothing that I wrote here suggests that. That's a separate decision to be made.
-
My project server is so slow.. with 10gb or ram.. thats why i thought of spliting datebase.
-
@mroth911 said in Designing a Reliable Web Application:
My project server is so slow.. with 10gb or ram.. thats why i thought of spliting datebase.
Splitting normally introduces more slowness, it doesn't solve it. It introduces extra latency and OS overhead and network overhead. You split for scalability, but not for performance. You lose performance on a node by node basis in exchange for being able to scale larger; but if you are within the performance threshold of a single node, then putting everything onto a single node is the fastest option.
-
You can use a high availability platform (Scale HC3 would be an example but is only one of many options) to handle the failover of the web servers which, as @scottalanmiller said, are normally read only and don't have to worry about crash consistency.
For a database you would ideally want to run at least one virtual machine on two different servers or cluster nodes and use something like "pinning" to guarantee that each database instance remains on separate hardware. Then you can use the database's own replication functionality to maintain data safety in the event of a hardware failure.
This would limit the effort necessary to deal with protecting the different functions leaving you with only the database as needing the additional effort. But it would not address load balancing for the application, only protection of availability.
-
@scottalanmiller said in Designing a Reliable Web Application:
MS SQL Server and SharePoint are more complex and you'll need to address those individually if you really need HA for them. This will have licensing costs and other overhead. Almost never would these be candidates for HA. These will be a big deal on their own. Everything else is trivial.
SharePoint is HA by default. At least it can be if you did a farm install (which you hopefully did? All kinds of evil things will try to eat you alive you if you did not so). In SharePoint, you basically have 3 types of server roles: DB, Backend (or "Application" role) and Frontends (which are basically just IIS). DB (should be) HA by using at least an active-passive SQL Server failover cluster, better an active-active or AlwaysOn one. You can have multiple frontends and backends by SharePoints internal mechanism. You can put a regular load balancer in front of the IIS's.
If you need to go cheap, you can achieve at least active-passive failover by virtualization mechanisms, like @scale mentioned. Don't know if KVM or Xen can do active standby VM's (mirrored VMs) like VMWare, at least Hyper-V can't do that (as of 2012R2)
-
@thwr said in Designing a Reliable Web Application:
Don't know if KVM or Xen can do active standby VM's (mirrored VMs) like VMWare, at least Hyper-V can't do that (as of 2012R2)
Do you mean shared memory where there is full fault tolerance and absolutely zero downtime and zero crash consistency issues? Then no, no one does that except for VMware right now. It's the biggest feature that I think makes VMware worth it for shops that need VMware. But it is a massively expensive feature both in terms of VMware licensing as well as in terms of performance hits, OS licensing and system overhead. Doing memory mirroring across nodes is very, very painful in terms of system resources.
-
@scottalanmiller said in Designing a Reliable Web Application:
@thwr said in Designing a Reliable Web Application:
Don't know if KVM or Xen can do active standby VM's (mirrored VMs) like VMWare, at least Hyper-V can't do that (as of 2012R2)
Do you mean shared memory where there is full fault tolerance and absolutely zero downtime and zero crash consistency issues? Then no, no one does that except for VMware right now. It's the biggest feature that I think makes VMware worth it for shops that need VMware. But it is a massively expensive feature both in terms of VMware licensing as well as in terms of performance hits, OS licensing and system overhead. Doing memory mirroring across nodes is very, very painful in terms of system resources.
Exactly. It's like a RAID-1-ish VM.
-
@thwr said in Designing a Reliable Web Application:
@scottalanmiller said in Designing a Reliable Web Application:
@thwr said in Designing a Reliable Web Application:
Don't know if KVM or Xen can do active standby VM's (mirrored VMs) like VMWare, at least Hyper-V can't do that (as of 2012R2)
Do you mean shared memory where there is full fault tolerance and absolutely zero downtime and zero crash consistency issues? Then no, no one does that except for VMware right now. It's the biggest feature that I think makes VMware worth it for shops that need VMware. But it is a massively expensive feature both in terms of VMware licensing as well as in terms of performance hits, OS licensing and system overhead. Doing memory mirroring across nodes is very, very painful in terms of system resources.
Exactly. It's like a RAID-1-ish VM.
Yeah, that's a VMware exclusive. Not very applicable to the SMB market, but when you need it that's my top pick for "when to look at VMware." It's the most significant (to me anyway) "only on Vmware" feature. Most other things that VMware does well are soft benefits, like better memory management, but you might be able to offset that by just buying more memory on another platform. It's not a pure win. But their shared memory fault tolerance is an absolute win. When you need it, you either leave the commodity server world completely or you use VMware.
@John-Nicholson can talk more about that as well.
-
@scottalanmiller said in Designing a Reliable Web Application:
@thwr said in Designing a Reliable Web Application:
@scottalanmiller said in Designing a Reliable Web Application:
@thwr said in Designing a Reliable Web Application:
Don't know if KVM or Xen can do active standby VM's (mirrored VMs) like VMWare, at least Hyper-V can't do that (as of 2012R2)
Do you mean shared memory where there is full fault tolerance and absolutely zero downtime and zero crash consistency issues? Then no, no one does that except for VMware right now. It's the biggest feature that I think makes VMware worth it for shops that need VMware. But it is a massively expensive feature both in terms of VMware licensing as well as in terms of performance hits, OS licensing and system overhead. Doing memory mirroring across nodes is very, very painful in terms of system resources.
Exactly. It's like a RAID-1-ish VM.
Yeah, that's a VMware exclusive. Not very applicable to the SMB market, but when you need it that's my top pick for "when to look at VMware." It's the most significant (to me anyway) "only on Vmware" feature. Most other things that VMware does well are soft benefits, like better memory management, but you might be able to offset that by just buying more memory on another platform. It's not a pure win. But their shared memory fault tolerance is an absolute win. When you need it, you either leave the commodity server world completely or you use VMware.
@John-Nicholson can talk more about that as well.
Hyper-V 's memory management is also awesome, IMHO. But you are right, the gap between VMware and the other major players is getting smaller and smaller with every release cycle. It's next to non-existing as of today. Remember very well when people laughed at me a few years ago for choosing Hyper-V to replace an existing VMware vSphere EP environment. I have yet to regret it.