a plesk dedicated (web host edition) server with 100 hosting accounts, each hosting account has their own domains with their own web applications.
How can I migrate everything
Use the "Plesk Migrator" extension.
(or maybe have a second server that is always synced with the original)
A live synced failover scenario is not supported. You can vote for the feature here:
Keep two (or more) Plesk servers in sync for a failover scenario. Migration Manager only allows manual "sync"
plesk.uservoice.com
in case the server crashes,
If a server crashes, it is either for
a) hardware defects
b) RAID controller defects
c) hard disk defects
In either case, the faulty component needs to be replaced. The server will normally reboot trouble-free aftwards.
For the hard disk I recommend to have at least RAID 1 (hard disk mirroring), better RAID 5 (three disks). When you have a lot of load I also highly recommend to not to use software RAID, but hardware RAID, because it will deliver the best possible performance even if your server is under high load. Software RAID won't in that case.
An attack is normally not directed against a specific IP, but against a specific domain name, website respectively. You need to be prepared with different mitigation strategies how to tackle different attack types. You also need different layers of protection, e.g. DDoS protected BEFORE your server, meaning in the data center before traffic reaches your server, protection for individual domains on the Internet, e.g. using Cloudflare, then maybe some operating system tweaks to minimize the load on a server if an attack comes through, also use Fail2Ban that comes with Plesk to block typical simple brute force attacks, use ModSecurity (Web Application Firewall) that comes with Plesk, pay attention to the "Site Vulnerability Report" that comes with Wordpress Toolkit, use ImunifyAV, which also comes with Plesk to detect known malware on your system.
In all these cases a migration to a different hardware won't mitigate the issue, because that new hardware will come under attack just as the old hardware did. It is much better to implement all possible levels of protection instead.
, or any other bad scenario, with minimum downtime?
What is the best practice to solve such problems? (the databases have to be up to date to avoid data loss)
Minimum downtime, that's something everybody wants. But is it really so super important to get all the emails instantaneously? Does it really hurt if a server cannot be reached for a few hours during a total desaster scenario? Yes, customers will complain, and they will also believe that they are about to lose business. But the reality is: If a website cannot be reached, people will try again later. It's a big myth that if people cannot reach a website they immediately give up.