1. A method of operating a group of virtual machines (VMs) that includes two or more primary VMs and two or more secondary VMs with the primary VMs within a cluster being linked to an external bus and with each of the primary VMs being operable to generate data and transmit the data on the external bus and to receive and process data from the external bus, the method comprising: for each of the primary VMs, utilizing a checkpoint procedure to maintain an associated one of the secondary VMs to assume tasks of the associated one of the primary VMs in the event of failover; and on failover of one of the primary VMs, causing the associated one of the secondary VMs to assume the tasks of the associated one of the primary VMs from the checkpoint immediately preceding a failover event, wherein each of the primary VMs is connected to receive data from remaining ones of the primary VMs via an internal bus and process the data received on the internal bus on receipt; synchronizing the checkpoints for the primary VMs; for each of the primary VMs, preventing release to the external bus of data generated on the basis of received internal bus data until a subsequent checkpoint has occurred; and on failover of one of the primary VMs, causing all of the primary VMs to initiate failover to an associated one of the secondary VMs.