4) 1 Master Server Cluster using shared storage: This seems like the only viable solutions.
If you honestly believe this, then your definition of "high availability" is
somewhat different from the rest of the world's. Putting a bunch of front
ends onto a single shared data-store does not give high availability. It
practically assures lower availability, because your shared storage is now a
single point of failure. If it goes down, it doesn't matter how many servers
are in your cluster, they're all hosed. This idea is pure folly. There are of
course valid reasons for using tightly coupled server clusters with shared
storage, but high availabilty is definitely not one of them.