Table of Contents |
---|
What's Desired
...
- StatefulSet:
- Used to manage Stateful applications.
- Guarantees fixed numbering for a POD.
- Using headless service, PODs were registered with their own unique FQDN in DNS; this makes it possible for other PODs to find a POD even after a restart (albeit with a different IPAddress).
- Since we were using a single Kubernetes VM, hosting a volume dynamically on the local-store VM for newly spun slaves was not straight-forward (support wasn't inbuilt). However, Kubernetes does support writing external provisioners which did the job for us. This provisioner actually created a virtual NFS Server on top of a local store.The instance of nfs-provisioner will watch for
PersistentVolumeClaims
that ask for theStorageClass
and automatically create NFS-backedPersistentVolumes
for them.
We used this Kubernetes example to replicate MySQL server; this was modified to suit the needs for SDN-C DB.
...
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.
...