- 1 Dual Opteron + 4GB RAM + Plenty of SCSI disk space running Postgres, LDAP and NFS (for moodle's data directory) and other data-sharing purposes. Lots of optimization here: System logs, DB logs and DB storage are segregated to separate drives each for maximum concurrency, all the shared memory tricks for Postgres are on, and we do a lot of monitoring of performance wrt DB queries, io, swapping, etc.
- 2 webservers running apache+php+cronjobs -- cheap Dell 1U rackmountables
- we expect this can grow to 6~8 until we saturate the DB server
- we expect to start using a php accelerator - ioncube has given the best performance+correctness combo so far, but there are others
- cronjobs are wrapped with shellscripts using dotlockfile -- so if the webservers have their clocks in sync (thanks to ntp they do) the cronjobs are run by only one of the servers.
- 1 load-balancer that runs at the tcp layer - not http. it calls a 'healthcheck' page on each server every few seconds. We are using a mix of tools, part of Linux Virtual Server and other bits and pieces.
Wellington is a shaky city. All this gear is replicated in Auckland for disaster recovery (albeit in smaller scale: one DB server, one webserver). Using log-shipping for postgres and rsync for the moodle files, we expect to get the auckland cluster to be just a few hours behind.