As defined in this article, a cluster is a group of interconnected nodes that acts like a single large server capable of growing and shrinking on demand. In other words, clustering can be viewed logically as a method for enabling multiple standalone servers to work together as a coordinated unit called a cluster. The servers participating in the cluster must be homogenous - that is, they must use the same platform architecture, operating system, and almost identical hardware architecture and software patch levels - as well as independent machines that respond to the same requests from a pool of client requests.
Clustering is part of grid computing methodology, by which several low-cost commodity hardware components are networked together to achieve increased computing capacity. Scalability on demand is achieved by adding additional nodes and distributing the workload to the available machines.
Scalability and application performance improvement can be done via three methods:
One of the key components in clustering is shared storage. Storage is accessible to all nodes, and all nodes can read and write in parallel to the shared storage, depending on the configuration of the cluster. Some configurations allow the storage to be accessible by all the nodes at all times; some allow sharing only during failovers.
More importantly, the application will see the cluster as a single system image and not as multiple connected machines. The cluster manager does not expose the system to the application, and the cluster is transparent to the application. Sharing the data among the available nodes is a fundamental concept in scaling and is achieved using several types of architectures.