...
- 2 init containers:
- init-mysql
- Generates special MySQL config files based on an Ordinal index. (the ordinal index is saved in server-id.cnf)
- Uses config-map to copy the master.cnf/slave.cnf files to the conf.d directory.
- clone-mysql:
- Performs a clone operation the first time the Slave comes up, assuming that Master already has some data on it when the Slave starts.
- Uses the OpenSource tool Percona for this jobHot backup the data from previous MySQL pod using binlog which is powered by Percona xtrabackup (https://www.percona.com/software/mysql-database/percona-xtrabackup)
- init-mysql
- 2 containers:
- mysqld:
- Actual MySQL server
- xtrabackup Xtrabackup sidecar:
- Handles all of the replication between this server and the Master.
- Handles requests from other Pods for data cloning.
- mysqld:
2 Services are created:
- DBHost should be used for any write operation (writes to master)
- DBHost-Read should be used for read operations (can query Slaves besides master)
As mentioned above, nfs-provisioner was used to dynamically create Persistent Volume Claims to enable dynamic scaling of slaves.
Master Failure, A Caveat
Unfortunately, if a master fails, then we need to write a script (or an application) to promote one of the slaves to be the master and instruct the other slaves and applications to change to the new master. You can see more details here.
The other option is to use To support Master faliover, recommended solution is using GTID-based replication combined with Automatic replication health monitoring and failover.
Advantages
- Can have multiple Slaves with a Master server.
- Allows scaling slaves dynamically.
- Any data-write is done to Master, but a data-read can happen on Slaves as well. Hence a 'DBHost-Read' Service was introduced which should be used by Clients for data-fetch operations.
- For any write operation, the write service DBHost can be used.
- Once a Slave is replicated from Master, that Slave is then used to replicate data on any new Slave; this has a low impact on the Master server.
...