I need to setup cluster using 3 servers. Thanks to everybody involved from this mailing list in previous post, we have concluded that DRBD+GFS2 is the best approach for building shared storage from local hard drives. It will enable mirroring of data between nodes using DRBD, and concurrent access to file systems thanks to GFS2.
Main purpose of this cluster is hosting of single web site (web application). Main services we'll have are Web server (httpd) and MySQL. We also use memcached for shared session and caching. Cluster should provide following benefits:
- High Availability
- High Performance (balancing of web application execution on cluster nodes)
- Traffic balancing
This means that all 3 servers will execute web application and provide content to visitors. We didn't plan to use load balancers in front of web servers, because traffic balancing is important. That is why DNS round-robin approach was planned, which we already use for two server architecture used at moment. Web server on each node will be directly accessed by visitors, spread by use of DNS round-robin. One of servers will have MySQL Master used for writing, while other two will have MySQL Slave instances for reading. Each MySQL instance will execute on separate data on shared storage.
I was confused by following line in RedHat's Cluster documentation, related to High Availablity: "An HA service can run on only one cluster node at a time to maintain data integrity". Does this mean that web servers can not work in parallel on all cluster nodes? Or, is this limitaion related to combination of IP address and service (eg. web server on IP 10.1.1.1)?
When MySQL is in question, I have even more doubts on how to implement HA automatically. Failure of node where MySQL Master executes should result in automatic start of MySQL service on different node. In our configuration with 3 servers, there is no spare node, so MySQL Master and one of MySQL Slave instances should run on same server. If two nodes fail, all three MySQL instances will fail to single node :). If I understand MySQL docs well, this is not problem, but each instance must use different port, socket, data folders (which we already have separated). I didn't notice that MySQL instance can connect to specific IP.
Does anyone have experience with this kind of setup? I know that one can run more than one instance of MySQL on single server, executed on different sets of data and connected to different ports. However, I'm not sure if it's possible to setup and if it's stable in cluster environment with HA? if it's possible, what are things I should take care of?
Finally, for setup like this would you use available servers (3 of 'em in my case) as cluster nodes, or would you use 'em as bare metal machines for virtual servers with specific roles (eg. web server, MySQL master, Memcached, etc.), that can be easily moved from one base metal machine to other, in case of failure?