On Oracle you basically have a choice between running a hot standby and using RAC.
The main aim of High Availability is to remove single points of failure. RAC does this at the server level allowing failure of a server without any service interruption. You will need to achieve something similar at the storage end using ASM, mirroring, and two or more physically independent storage pools (or a SAN).
Using a hot standby will mean service interruption in the event of a failure, but is simpler and has fewer "engineering trade offs"
Good quality hardware is also essential, eg SAS not SATA, redundant PSUs, UPSs etc.
There are also other aspects of High Availability you may need to consider (eg human error) - this white paper from Oracle discusses them in more depth.