Typically clustering is used to provide high availability of service even in the presence of failures (of instances in the cluster). Clustering allows your client applications to continue to work properly even if one (or some) of the server instances fail.
You may find relevant info from these links:
http://wiki.glassfish.java.net/gfwiki/Wiki.jsp?page=GlassFishV2Architecture
https://glassfish.dev.java.net/javaee5/build/GlassFish_LB_Cluster.html#failover
http://developers.sun.com/appserver/reference/techart/load-balancing.html