I'm setting up the server environment for a new software development group, which will include 4 test environments.
These are web applications, so each environment will have an application server and a database server.
I'm planning on buying two physical servers (e.g. 6-core CPU each with 12GB or so of RAM), and I'm thinking virtualization is appropriate here. With that in mind, I've thought of a couple ways that I could organize the virtualization strategy:
- Separated by server role: Server 1 has all the application servers, each in their own guest VM. Server 2 has all the databases.
OR
- Separated by environment: Server 1 has a VM for two of the environments, with the VM containing both the app server and the database server. Server 2 would also contain two test environments, with the same style (app server and database in same VM).
The advantages I see with all the app servers on one server and all the databases on another server is that I could probably be more efficient with the database server (one instance running multiple databases). But the other option seems easier to manage (archives/restorations would be contained in a single VM).
Any recommendations? TIA.
Run them all as VMs. They are easier to manage in a test environment because you can use snapshots and/or backups to restore the entire environment to a point in time.
As for how you organize the VMs, what does production look like? Make it as much like that as possible.
Personally, I'd prefer to do something more like #2 but I'd have 8 VMs total: 4 running the database and 4 as web servers. You could then either run two environments on each host or run all webs on one and all dbs on the other. Either would be fine.
I would lean towards your second idea. This not only has the benefit of being easier to manage, you also split your I/O relatively evenly. It would be a profound waste of resources to have an under-utilized VM host running the front end app and then slam the heck out of the backend database VMs and host. This will make testing a little easier for you without having to worry about troubleshooting poor performance that is actually a result of an overworked VM host.