Zend certified PHP/Magento developer

How can I make a secondary webserver take over for the primary in the event of a hardware failure?

I have a web server on my local area network. How can I make it so that requests to that web server can be handled by a second (alternate/failover) system in the event that the first system fails?

I know this may be possible with a hardware router and active monitoring, but is it possible using software only (no special hardware)? In other words, is there something I can configure in the operating systems of those two machines so that one system will act as an alternate for the other? I’m not sure if they would need to appear to have the same IP (e.g.: client always accesses the same IP address like 10.0.0.123) or if I’d need an mDNS name (like myservice.local) or what.

The client is just a web browser on a third device on the same local area network. I’m running Ubunto 18.04 if that matters. Currently I don’t even have a dedicated DNS server or anything — just a wi-fi router (and the two server pc’s and the client browser device).

Is it possible, and if so, how?