If I have a processes running on s1 but then s1 fails somehow, how can I automatically run
that process on one of the other 4 servers?
all major OS support clustering which does that - given that the process is installe on s2. And sometimes if the application is cluster aware. If that is not the case, virtualization can come to the rescue by starting the VM on another server.
Would that require shared storage across all these servers so the process can essentially
just be started again on another machine?
That depends. If the process is locally installed on the other machines - as is normal for a cluster setup - then only if there are shared ressources it needs. Which may be the case for the majority of programs.
Example SQL Server, Exchange - will not need shared storage in some configurations because every cluster node keeps a copy of the data (because shared storage ALSO has issues - not so much on the hardware side which you can make redundant, but if a failing machine trashes your file system then ..... there is nothing to be shared ;)
If I have 5 IP addresses available for these 5 machines can I
essentially assign those 5 just to the block of servers so each one
can access each IP individually? So if a process runs and is accessed
on xxx.xxx.xxx.1 but then s1 dies it swaps over and runs on s4, could
s4 then have access to that IP address before so a user only sees a
brief interruption in their service?
Any cluster system will do that. For windows, there is a cluster system integrated that allows you to assign an IP to a cluster program - which then moves when the program fails over.
SAdly you say nothing about oyur infrastructure. Anyhow, you got a generic answer - time to sit down and start reading documentation of whatever you have available on your operating system.