Você tem a replicação master-master funcionando, mas mesmo assim eu não acho que usar o HAProxy para balanceamento de carga do MySQL seja a escolha certa.
O HAProxy é ótimo, mas ao operar como um balanceador de carga de nível TCP, ele não pode ter nenhuma noção do estado SQL. O comportamento com transações SQL de execução longa não é claro e propenso a erros; isso é algo que você não deveria estar feliz.
Sua configuração mestre-mestre tem a capacidade de gravação de um único nó (já que todas as gravações precisam ser duplicadas). Assim, o que você está ampliando com sua configuração são as leituras & conexões. Um mais comum e IMHO muito melhor configuração é:
- Pendure alguns escravos MySQL somente leitura do par mestre-mestre.
- Altere o código do aplicativo para enviar todas as gravações para o mestre e quase todas as leituras (quando possível) para um dos escravos somente leitura.
- Seja esperto em estabelecer conexões com o MySQL. Preferencialmente reutilize conexões de um pool de conexões.
Algo como o proxy do MySQL ou outro middleware de manipulação de conexão também pode funcionar bem no seu caso.
"Alto desempenho do MySQL" é um ótimo livro com sugestões práticas sobre como escalar o MySQL. Se você ler este livro, acho que verá mais claramente quais projetos são comuns e comprovados para sua situação específica.