You may want to look into a Distribution Master setup.
This would involve creatiing a Slave (called the Distribution Master) which has three(3) characteristics:
- log-bin Enabled
- log-slave-updates Enabled
- Every database (except information_schema and mysql) has BLACKHOLE tables only
What good would that do ?
Picture this scenario
- 26 MySQL Instances
- ServerA is Write Master
- ServerB is Distribution Master
- ServerC ... ServerZ are Read Slaves of ServerB
Here is what happens when an INSERT executes in ServerA
- ServerA records Entry for the INSERT to its Current Binary Log
- ServerB's I/O Thread imports INSERT from ServerA's Binary Log
- ServerB's I/O Thread records INSERT in its Relay Logs
- ServerB's SQL Thread reads INSERT from its Relay Logs
- ServerB processes the SQL
- ServerB records Entry for the INSERT to its Current Binary Log
- ServerB serves the INSERT from its Binary Log to the Relay Log of ServerC ... ServerZ
This provides the following benefits
- ServerA (Write Master) does not get bogged down performing Replication tasks
- ServerB (Distribution Master) stores no data locally. It only provides a conduit for passing binary log entries to all reads slaves. Thus, no heavy write I/O.
This has been tried by others. In fact, I answered a question for someone in the DBA StackExchange and StackOVerflow. It is a viable option for someone willing to do the leg work but have a decent spread of read I/O across two or more slaves.
If you are concerned about High Availability, no problem. You have two options:
OPTION 1
Redo the setup as follows
- 26 MySQL Instances
- ServerA is Active Write Master
- ServerB is Passive Write Master
- ServerC is Distribution Master
- ServerD ... ServerZ are Read Slaves of ServerC
- ServerA and ServerB are Circular Replication pair
- Backups for Data can be Done in ServerB
OPTION 2 : Use MySQL and DRBD
Introduce Disk-Level Redundancy via DRBD and ucarp
- 26 MySQL Instances
- ServerA is DRBD Primary with MySQL Running as Write Master
- ServerB is DRBD Secondary with MySQL Down
- ServerB provides disk level replica of ServerA's data volumne
- Run ucarp for DB VIP pointing to DRBD Primary
- ServerC is Distribution Master whose Master is the DRBD Primary
- ServerD ... ServerZ are Read Slaves of ServerC