Architecture 101 - What's my first step?
My first step here was to set up a 12GB Linode with a LAMP Stack and have WHM / cPanel installed. I've taken "baby steps" by migrating about a dozen extremely low-traffic sites over and ensuring that all is behaving as it should. I'm here to tell you that the performance has been nothing short of outstanding … rock solid / lightning fast response and according to the graphs, my Linode is hardly breaking a sweat. I understand things will start looking different when some of the more active / resource intense sites come on board and that's the point of this post.
In your experience, if I were to add a second Linode mirroring the first one and a Node Balancer to act as "Traffic Cop", would that be the best first fallback, or would it be better to use a second Linode for running the databases, or as a storage block for images and other "downloadable files"?
I understand that I am starting very small - like I said, this is my first step in to the cloud and just want to start getting comfortable with how this all goes before throwing a ton of money at a big mess.
Thanks for your suggestions!
Wendy
1 Reply
Glad to hear you're getting great performance on Linode!
In your experience, if I were to add a second Linode mirroring the first one and a Node Balancer to act as "Traffic Cop", would that be the best first fallback, or would it be better to use a second Linode for running the databases, or as a storage block for images and other "downloadable files"?
Balancing traffic between two 'web' instances is a great step for redundancy and handling higher amounts of traffic, but with this type of setup you'll need a separate database instance to keep things consistent. For example if a plugin gets updated, a plugin creates stateful DB data, or if a user comment gets made, you'll get differences between the two Linodes and essentially two different websites running on each web instance. A separate Linode instance dedicated to running MySQL is the solution to keeping multiple web Linodes consistent.
Having a dedicated database instance is also great for evening out load on Linux. MySQL and PHP are both resource-hungry processes, and tuning them to properly use the system's resources in a smart and non-interfering way can be difficult on a single system. As your sites receive increasing traffic, you may eventually be faced with a situation where one process or the other grabs too much RAM and causes that process or system to crash. This is a common dilemma with Linux, and a good explanation for why this is can be found on this article about the Linux OOM-killer. WordPress is especially vulnerable to this issue since many user-developed plugins you might want to add tend to be inefficiently designed.
I'd recommend first making a dedicated database instance and tuning it according to MariaDB's tips. Then if your system is still close to getting maxed out, consider a NodeBalancer and 2nd web Linode instance.
Hope it works out for you, and if you'd like to consider expert assistance with this you can reach out to my team! https://www.linode.com/professional-services
-Roland, Linode Professional Services