4-Semi-Sync replication

You are viewing an old version of this article. View the current version here.

Regular MariaDB replication is asynchronous.
MariaDB, since MariaDB 5.5, has included the Semisynchronous Replication. Semi-Synchronous Binlog Event

After the status byte of a binlog network stream, 2 bytes are added before the normal Binlog Event.

Note : The packet size, as in network protocol header, is then: event_size + 1 byte status + 2 bytes semi-sync replication

The SemiSync flag is SEMI_SYNC_ACK_REQ (0x01)

If the SEMI_SYNC_ACK_REQ flag is set, the master waits for a Semi Sync ACK packet
from the slave and when the Semi Sync ACK is seen, the master acknowlegde the client
which has issued the transaction with a standard OK_Packet or a ERR_Packet.

The master then can write the transaction to the binary log and sends to the slave next events.

The Semi Sync ACK details:

this event is sent by the slave (when requested: SEMI_SYNC_ACK_REQ is set)

Note: this packet sent by the slave never includes the CRC32.

Example of Heartbeat event with Semi-Sync protocol and CRC32

We can clearly see:

  • 2a 00 00 [3 bytes] packet size:
  • 06 [1] sequence
  • 00 [1] status bye = 00 => OK
  • ef 00 [2] bytes => semi sync indicator (0xef) and semi-sync flag (00)

the ef 00 2 bytes after the OK byte 00

T 127.0.0.1:23240 -> 127.0.0.1:41054 [AP]
  2a 00 00 06 00 ef 00 00    00 00 00 1b d9 27 00 00    *............'..
  27 00 00 00 79 04 00 00    00 00 6d 79 73 71 6c 2d    '...y.....mysql-
  62 69 6e 2e 30 30 30 30    33 34 ed ef e1 f0          bin.000034.... 

Example of XID_EVENT, with CRC32

The master sets the Semi-Sync ACK request in the XID_EVENT event:

We see the 2 semi sync bytes: ef and 01.
The latter, being 1, means the slave server must send the Semi Sync ACK packet.

We also see in the binlog event header:

  • Event Type [1] = 10 XID_EVENT
  • Next Event pos [4] = 4a 05 00 00 => 1354
22 00 00 0c 00 ef 01 17  d0 37 5a 17 d0 37 5a 10  "............7Z.
d9 27 00 00 1f 00 00 00  4a 05 00 00 00 00 6f 00  .?......J.....o.
00 00 00 00 00 00 44 30  aa fc                    ......D0..

Example of Semi-Sync ACK

This is sent by the slave server after the XID_EVENT receiving.

We see:

  • the semi sync indicator [1] = 0xef, sent before anything else
  • the Next Event position [8] = 4a 05 00 00 00 00 00 00 => 1354
    which is the next position of the XID_EVENT above
  • the binlog filename = mysql-bin.000034

Please note:

  • there is no terminating CRC32
  • the packet sequence now start starts from 0
  19 00 00 00 ef 4a 05 00    00 00 00 00 00 6d 79 73    .....J.......mys
  71 6c 2d 62 69 6e 2e 30    30 30 30 33 34             ql-bin.000034

Comments

Comments loading...
Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.