Как вы знаете, в VMware vSphere (еще с версии 5.1) есть механизм репликации виртуальных машин vSphere Replication (VR), который позволяет создавать копию виртуальной машины на другом хосте и хранилище на случай сбоя. Именно она используется для асинхронной репликации в катастрофоустойчивом решении VMware vCenter Site Recovery Manager (SRM).
Периодичность репликации со стороны владельца системы должна задаваться политикой RPO (Recovery Point Objective), определяющей какое максимальное количество данных выраженное во времени мы можем потерять в случае сбоя. Например, RPO=15 минут означает, что самое большое, что не будет подлежать восстановлению - это изменения, произошедшие в системе за последние 15 минут.
Этот параметр и задается в первую очередь при настройке репликации для виртуальной машины:
Здесь можно задать значение от 15 минут до 24 часов. Однако не обязательно это требование будет выполнено, ведь если ширина канала у вас небольшая, а машин на хостах много, то они просто могут не поместиться в эту полосу с необходимой для обеспечения RPO частотой репликации.
Кстати, на данный момент расписание задачи репликации генерируется автоматически на основании исторических данных об изменении блоков виртуальных дисков за последние 48 часов. При этом расписание репликации пересчитывается каждый раз, когда виртуальная машина меняет свое состояние (питание, реконфигурация репликации и т.п.).
Поскольку задаче репликации нужно некоторое время на выполнение, каждая реплика считается устаревшей к тому времени, как сама задача считается выполненной. Поэтому чтобы предотвратить нарушение политики RPO, vSphere Replication должна выполнить задачу репликации за половину времени, определенного политикой RPO. Половину - так как если вторая репликация не сможет завершиться в случае сбоя, то мы сможем вернуться только в то состояние виртуальной машины, которое предшествовало началу первой репликации. Для этого потребуется восстановить первую реплику.
Ожидаемое время репликации вычисляется как среднее время последних 15 репликаций плюс 20% прибавка в качестве запаса к этому времени.
Рассмотрим пример:
Здесь у нас установлено RPO=60 минут. В первом случае на репликацию ушло 22 (текущая) и 23 (ожидаемая) минуты, каждая из них меньше половины времени RPO, соответственно политика считается выполненной. Во втором случае текущая и следующая репликации выходят за границы половины RPO, обе репликации в сумме дают 68 минут, поэтому политика считается нарушенной.
То есть, если исходный хост навернется через 67 минут, то мы сможем откатиться только в то состояние хоста, которое было 67 минут назад (восстановив первую реплику), что противоречит политике RPO, которая была определена как 60 минут.
В случае нарушения RPO сама репликация будет продолжена, однако вы будете получать вот такие алерты в консоли vSphere Client:
Что в этом случае делать? Выхода всего два - либо увеличивать и согласовывать новое RPO для сервиса виртуальной машины, либо увеличивать доступную полосу пропускания для сети репликации, что должно уменьшить время выполнения задачи.