No blog anterior da série, discutimos os prós e os contras de usar o Galera Cluster para criar um cluster distribuído geograficamente. Neste post vamos projetar um cluster geo-distribuído baseado em Galera e mostraremos como você pode implantar todas as peças necessárias usando o ClusterControl.
Projetando um cluster Galera distribuído geograficamente
Começaremos explicando o ambiente que queremos construir. Usaremos três data centers remotos, conectados via Wide Area Network (WAN). Cada datacenter receberá gravações de servidores de aplicativos locais. As leituras também serão apenas locais. Isso se destina a evitar tráfego desnecessário cruzando a WAN.
Para esta configuração, a conectividade está instalada e protegida, mas não descreveremos exatamente como isso pode ser alcançado. Existem vários métodos para proteger a conectividade a partir de soluções proprietárias de hardware e software por meio do OpenVPN e terminando em túneis SSH.
Usaremos o ProxySQL como balanceador de carga. O ProxySQL será implantado localmente em cada datacenter. Ele também roteará o tráfego apenas para os nós locais. Nós remotos sempre podem ser adicionados manualmente e explicaremos os casos em que isso pode ser uma boa solução. O aplicativo pode ser configurado para se conectar a um dos nós ProxySQL locais usando o algoritmo round-robin. Também podemos usar Keepalived e Virtual IP para rotear o tráfego para o único nó ProxySQL, desde que um único nó ProxySQL seja capaz de lidar com todo o tráfego.
Outra solução possível é colocar ProxySQL com nós de aplicativos e configurar o aplicativo para se conectar ao proxy no host local. Essa abordagem funciona muito bem sob a suposição de que é improvável que o ProxySQL não esteja disponível, mas o aplicativo funcionaria bem no mesmo nó. Normalmente, o que vemos é falha de nó ou falha de rede, o que afetaria o ProxySQL e o aplicativo ao mesmo tempo.
O diagrama acima mostra a versão do ambiente, onde o ProxySQL está colocado no mesmo nó que o aplicativo. O ProxySQL está configurado para distribuir a carga de trabalho em todos os nós do Galera no datacenter local. Um desses nós seria escolhido como um nó para enviar as gravações enquanto os SELECTs seriam distribuídos por todos os nós. Ter um nó de gravador dedicado em um datacenter ajuda a reduzir o número de possíveis conflitos de certificação, levando, normalmente, a um melhor desempenho. Para reduzir ainda mais, teríamos que começar a enviar o tráfego pela conexão WAN, o que não é o ideal, pois a utilização da largura de banda aumentaria significativamente. No momento, com os segmentos implantados, apenas duas cópias do conjunto de gravação estão sendo enviadas pelos datacenters - uma por DC.
A principal preocupação com as implantações geo-distribuídas do Galera Cluster é a latência. Isso é algo que você sempre precisa testar antes de iniciar o ambiente. Estou bem com o tempo de confirmação? A cada confirmação, a certificação deve acontecer, portanto, os conjuntos de gravação devem ser enviados e certificados em todos os nós do cluster, incluindo os remotos. Pode ser que a alta latência considere a configuração inadequada para seu aplicativo. Nesse caso, você pode encontrar vários clusters Galera conectados por meio de replicação assíncrona mais adequados. Este seria um tópico para outro post do blog embora.
Implantando um cluster Galera distribuído geograficamente usando o ClusterControl
Para esclarecer as coisas, mostraremos aqui como pode ser uma implantação. Não usaremos a configuração multi-DC real, tudo será implantado em um laboratório local. Assumimos que a latência é aceitável e toda a configuração é viável. O que é ótimo no ClusterControl é que ele é independente de infraestrutura. Não importa se os nós estão próximos uns dos outros, localizados no mesmo datacenter ou se os nós estão distribuídos em vários provedores de nuvem. Desde que haja conectividade SSH da instância ClusterControl para todos os nós, o processo de implantação terá a mesma aparência. É por isso que podemos mostrá-lo passo a passo usando apenas o laboratório local.
Instalando o ClusterControl
Primeiro, você precisa instalar o ClusterControl. Você pode baixar de graça. Após o registo, deverá aceder à página com guia para descarregar e instalar o ClusterControl. É tão simples quanto executar um script de shell. Depois de instalar o ClusterControl, você receberá um formulário para criar um usuário administrativo:
Depois de preenchê-lo, você verá uma tela de boas-vindas e acesso para assistentes de implantação:
Vamos com deploy. Isso abrirá um assistente de implantação:
Vamos escolher o MySQL Galera. Temos que passar os detalhes de conectividade SSH - o usuário root ou o usuário sudo são suportados. Na próxima etapa, definiremos os servidores no cluster.
Vamos implantar três nós em um dos data centers. Então poderemos estender o cluster, configurando novos nós em diferentes segmentos. Por enquanto tudo o que precisamos fazer é clicar em “Deploy” e observar o ClusterControl implantando o cluster Galera.
Nossos três primeiros nós estão funcionando, agora podemos adicionar nós adicionais em outros datacenters.
Você pode fazer isso no menu de ação, conforme mostrado na captura de tela acima .
Aqui podemos adicionar nós adicionais, um de cada vez. O que é importante, você deve alterar o segmento Galera para diferente de zero (0 é usado para os três nós iniciais).
Depois de um tempo, acabamos com todos os nove nós, distribuídos em três segmentos.
Agora, temos que implantar a camada proxy. Usaremos ProxySQL para isso. Você pode implantá-lo no ClusterControl via Manage -> Load Balancer:
Isso abre um campo de implantação:
Primeiro, temos que decidir onde implantar o ProxySQL. Usaremos os nós Galera existentes, mas você pode digitar qualquer coisa no campo, então é perfeitamente possível implantar o ProxySQL em cima dos nós do aplicativo. Além disso, você precisa passar as credenciais de acesso para o usuário administrativo e de monitoramento.
Então temos que escolher um dos usuários existentes no MySQL ou criar um agora mesmo. Também queremos garantir que o ProxySQL esteja configurado para usar nós Galera localizados apenas no mesmo datacenter.
Quando você tiver um ProxySQL pronto no datacenter, poderá usá-lo como fonte da configuração:
Isso deve ser repetido para cada servidor de aplicativos que você tem em todos os datacenters . Em seguida, o aplicativo deve ser configurado para se conectar à instância ProxySQL local, de preferência pelo soquete Unix. Isso vem com o melhor desempenho e a menor latência.
Após a implantação do último ProxySQL, nosso ambiente está pronto. Os nós do aplicativo se conectam ao ProxySQL local. Cada ProxySQL é configurado para trabalhar com nós Galera no mesmo datacenter:
Conclusão
Esperamos que esta série de duas partes tenha ajudado você a entender os pontos fortes e fracos dos clusters Galera distribuídos geograficamente e como o ClusterControl facilita a implantação e o gerenciamento desse cluster.