After the volume mirror is created and the two drives on the primary and secondary servers are synchronized, the following events occur:
- The system locks out all user access to the target volume; reads and writes are not allowed to the target volume. The source volume is accessible for both reads and writes.
- Both mirrored and non-mirrored volume read operations arriving at the driver on the primary server are passed on and allowed to complete normally without intervention. Reads of a mirrored volume on the secondary system are not allowed, i.e., the secondary has not assumed the role of a failed primary.
- Whenever the primary server receives a write request, the system first determines whether the request is for a mirrored volume. If not, the write is allowed to complete normally without any further intervention. If the write request is for a mirrored volume, the request is handled depending on the mirroring type:
- If the type is synchronous, then the write request is put on the mirror Write Queue for transmission to the target system, and simultaneously sent to the local source volume. The write operation is not acknowledged as complete to the process that issued the write until the source disk write completes and notification from the target is received (success or failure). Should an error occur during network transmission or while the target system executes its write, the write process on the target is terminated and the state of the mirror is changed to Paused. The source volume completes the write regardless of the target write status.
If the type is asynchronous, then the primary executes the write request to its source volume, puts a copy of the write on the asynchronous write queue and returns to the caller. Writes that are in the queue are sent to the target volume. The secondary system executes the write request on the target volume and then sends the status of the write back to the primary. Should an error occur during network transmission or while the secondary executes its mirrored volume write, the write process on the secondary is terminated. The state of the mirror then changes from Mirroring to Paused.
To ensure uninterrupted system operation, SIOS DataKeeper momentarily pauses the mirror and automatically continues it (i.e., performs a partial resync) in the following cases:
- When the mirror’s BlockWritesOnLimitReached settings is 0, and the mirror write queue length reaches the WriteQueueHighWater limit, or the number of bytes in the queue reaches the WriteQueueByteLimitMB limit, due to a large number of writes to the volume in a short period of time (e.g., database creation). The user can monitor the mirroring behavior using the SIOS DataKeeper Performance Monitor counters and adjust the WriteQueueHighWater and/or the WriteQueueByteLimitMB value if necessary. See Registry Entries for more details.
- When transmission of a write to the target system times out or fails due to resource shortage (e.g., source system resource starvation due to a flood of writes/network transmissions in a short period of time).