Clustering is a VERY broad topic.
Beowulf clustering generally refers to a compuational cluster.
High Availability and load-balancing clusters are also quite common.
I use the "heartbeat" package to create a 2 node High Availability cluster of DHCP servers. Heartbeat can be used to make many services highly available though - web servers, DNS, e-mail, LDAP, etc.
This is basically how it works:
I have two nodes connected to the netwrok. Each network has a "real" ip address. There is also a "service" IP address that is associated with the active node. If that node goes down, or you force it to go to standby mode, it reliquinshes that "service" IP address and the second node becomes active. In my configuration, the two machines use a serial cable to send heartbeat infromation; this is how they know the status of the other node. More complex configurations are available, but you get the idea.
RedHat Advanced Server also has a cluster suite ( I believe that this provides load balancing and high availability.) If you need to do shared (or replicated) storage, things become considerabley more complicated.
If you don't want to pay for RedHat Advanced Server and want a "professional" cluster solution, try Scientific Linux - it's RedHat Enterprise Linux recompiled from source and it is free. Also, I believe that it comes with the Cluster Suite package.
see
http://www.linux-ha.org