ClusterControl é uma ótima ferramenta para implantar e gerenciar clusters de bancos de dados - se você estiver no MySQL, poderá implantar clusters facilmente com base na replicação tradicional do MySQL mestre-escravo, Galera Cluster ou MySQL NDB Cluster. Para obter alta disponibilidade, a implantação de um cluster não é suficiente. Os nós podem (e provavelmente irão) cair, e seu sistema deve ser capaz de se adaptar a essas mudanças.
Essa adaptação pode acontecer em diferentes níveis. Você pode implementar algum tipo de lógica dentro do aplicativo - verificaria o estado dos nós do cluster e direcionaria o tráfego para aqueles que estão acessíveis no momento. Você também pode construir uma camada de proxy que implementará alta disponibilidade em seu sistema. Nesta postagem do blog, gostaríamos de compartilhar algumas dicas sobre como você pode conseguir isso usando o ClusterControl.
Implantando o HAProxy usando o ClusterControl
HAProxy é o padrão - um dos proxies mais populares usados em conexão com o MySQL (mas não apenas, é claro). O ClusterControl suporta implementação e monitoramento de nós HAProxy. Também ajuda a implementar alta disponibilidade do próprio proxy usando keepalived.
A implantação é bastante simples - você precisa escolher ou preencher o endereço IP de um host onde o HAProxy será instalado, escolher a porta, a política de balanceamento de carga, decidir se o ClusterControl deve usar o repositório existente ou o código-fonte mais recente para implantar o HAProxy. Você também pode escolher quais nós de back-end você gostaria de incluir na configuração do proxy e se eles devem ser ativos ou de backup.
Por padrão, a instância HAProxy implantada pelo ClusterControl funcionará no MySQL Cluster (NDB), Galera Cluster, replicação de streaming PostgreSQL e MySQL Replication. Para replicação mestre-escravo, o ClusterControl pode configurar dois ouvintes, um para somente leitura e outro para leitura-gravação. Os aplicativos terão então que enviar leituras e gravações para as respectivas portas. Para replicação multimestre, o ClusterControl configurará o balanceamento de carga TCP padrão com base no algoritmo de balanceamento de conexão mínimo (por exemplo, para Galera Cluster, onde todos os nós são graváveis).
Keepalived é usado para adicionar alta disponibilidade à camada de proxy. Quando você tiver pelo menos dois nós HAProxy em seu sistema, poderá instalar o Keepalived a partir da interface do usuário do ClusterControl.
Você terá que escolher dois nós HAProxy e eles serão configurados como um par ativo-espera. Um IP virtual seria atribuído ao servidor ativo e, caso falhe, será reatribuído ao proxy em espera. Dessa forma, você pode simplesmente se conectar ao VIP e todas as suas consultas serão roteadas para o nó HAProxy atualmente ativo e em funcionamento.
Você pode encontrar mais detalhes sobre como os internos são configurados lendo nosso tutorial HAProxy.
Implantando ProxySQL usando ClusterControl
Embora o HAProxy seja um proxy sólido e uma escolha muito popular, ele não possui reconhecimento de banco de dados, por exemplo, divisão de leitura e gravação. A única maneira de fazer isso no HAProxy é criar dois back-ends e escutar em duas portas - uma para leituras e outra para gravações. Isso geralmente é bom, mas exige que você implemente alterações em seu aplicativo - o aplicativo precisa entender o que é uma leitura e o que é uma gravação e, em seguida, direcionar essas consultas para a porta correta. Seria muito mais fácil conectar-se a uma única porta e deixar o proxy decidir o que fazer em seguida - isso é algo que o HAProxy não pode fazer, pois o que ele faz é apenas rotear pacotes - nenhuma inspeção de pacotes é feita e, especialmente, não tem compreensão do protocolo MySQL.
O ProxySQL resolve esse problema - ele fala o protocolo MySQL e pode (entre outras coisas) executar uma divisão de leitura e gravação por meio de suas poderosas regras de consulta e rotear o tráfego MySQL de entrada de acordo com vários critérios. A instalação do ProxySQL do ClusterControl é simples - você deseja ir para a seção Manage -> Load Balancer e preencher a guia “Deploy ProxySQL” com os dados necessários.
Resumindo, precisamos escolher onde o ProxySQL será instalado, qual usuário de administração e senha ele deve ter, qual usuário de monitoramento ele deve usar para se conectar aos back-ends MySQL e verificar seu status e estado de monitoramento. A partir do ClusterControl, você pode criar um novo usuário para ser usado pelo aplicativo - você pode decidir sobre seu nome, senha, acesso a quais bancos de dados são concedidos e quais privilégios MySQL esse usuário terá. Esse usuário será criado no lado do MySQL e do ProxySQL. A segunda opção, mais adequada para infraestruturas existentes, é usar os usuários de banco de dados existentes. Você precisa passar nome de usuário e senha, e tal usuário será criado apenas no ProxySQL.
Finalmente, você precisa responder a uma pergunta:você está usando transações implícitas? Por isso, entendemos as transações iniciadas executando SET autocommit=0; Se você usá-lo, o ClusterControl configurará o ProxySQL para enviar todo o tráfego para o mestre. Isso é necessário para garantir que o ProxySQL trate as transações corretamente no ProxySQL 1.3.xe anterior. Se você não usar SET autocommit=0 para criar uma nova transação, o ClusterControl configurará a divisão de leitura/gravação.
O ProxySQL, como todo proxy, pode se tornar um ponto único de falha e precisa ser redundante para obter alta disponibilidade. Existem alguns métodos para fazer isso. Uma delas é colocar ProxySQL nos nós da web. A ideia aqui é que, na maioria das vezes, o processo ProxySQL funcionará bem e o motivo de sua indisponibilidade é que todo o nó caiu. Nesse caso, se o ProxySQL for colocado com o nó da web, não haverá muito dano porque esse nó da web específico também não estará disponível.
Outro método é usar o Keepalived de maneira semelhante, como fizemos no caso do HAProxy.
Você pode encontrar mais detalhes sobre como os internos são configurados lendo nosso tutorial ProxySQL.