If a user confirmed a booking or transaction on the database system, but it failed and it falls over to the replica, what if the transaction is lost?
There is no single answer that is always used; there is a tradeoff between consistency, availability, and ability to handle failures.  Most databases ensure that the data is stored persistently on disk before reporting that the transaction is confirmed, so even if the main database fails, if it has accepted the data, then the data will be there on disk.
Of course you could avoid committing until both replicas have confirmed, but then the system would not be available if either replica cannot be reached; or you could continue as soon as the master has accepted the data, but then the secondary replica could become out of sync.  I suggest learning about the CAP theorem and fundamental tradeoffs in database systems.
There will always be some failures that we cannot or do not prevent through technical means.  So, they might be addressed by ad-hoc methods (e.g., the customer could call customer support).