В целом правильные ответы очень сильно зависят от проекта, я напишу то что на мой взгляд common sense и применимо всегда:
1. Не надо заливать по FTP. Делайте pull из bitbucket после получения hook от них.
Учтите что строго говоря hook может и не придти, предусмотрите какой то лог выкладок и возможность дернуть руками снаружи. Есть большие готовые решения, в том числе умеющие и деплоить: jenkins, teamcity, phpci - но можно и свой простенький скриптик собрать, дел на час максимум если без красивостей.
1.2 Если хочется отказоустойчивости - не нужно разделять на master и slave, сервера должны быть независимы друг от друга и эквивалентны.
2. Если простой у одиночных клиентов в N часов допустим:
Amazon route53 в качестве dns + 2 шт amazon health check.
2 A-записи на один домен указывающие на 2 сервера привязанные каждый к своему health check.
TTL ставить поменьше, 1-5 минут. К сожалению все равно будут посетители у которых провайдер кеширует.
Если простой недоспустим совсем - простых решений нет к сожалению :)
Можно смотреть на failoverip у hetzner (2 железных сервера на 1м IP с возможностью быстрого переключения), но не снимает вопроса что делать если упал дц у самого хецнера.
* и да, в нормальной ситуации сервера лучше держать у разных хостеров
3. Всю систему целиком бекапить imho не нужно. Бекапить нужно пользовательские данные если они у вас есть.
SQL неплохо себя показал galera cluster (master-master), но там есть нюанс с транзакциями если вы их используете. Файлы можно каким нибудь rsynk таскать, а можно просто положить их сразу в S3 и забыть навсегда (если у Вас их не очень много - см тарифы)