4-Semi-Sync Replication

Regular MariaDB replication is asynchronous.
MariaDB, since MariaDB 5.5, has included 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 the 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 acknowledges the client which has issued the transaction with a standard OK_Packet or a ERR_Packet.

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

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.