A nuvem oferece ambientes muito flexíveis para trabalhar. Você pode facilmente escalá-lo para cima e para baixo adicionando ou removendo nós. Se houver necessidade, você pode criar facilmente um clone do seu ambiente. Isso pode ser usado para processos como atualizações, testes de carga, recuperação de desastres. O principal problema com o qual você precisa lidar é que os aplicativos precisam se conectar aos bancos de dados de alguma forma, e configurações flexíveis podem ser complicadas para bancos de dados - especialmente com configurações mestre-escravo. Felizmente, existem algumas opções para facilitar esse processo.
Uma maneira é utilizar um proxy de banco de dados. Existem vários proxies para escolher, mas nesta postagem do blog usaremos o ProxySQL, um proxy bem conhecido disponível para MySQL e MariaDB. Vamos mostrar como você pode usá-lo para mover o tráfego de forma eficiente entre os nós MySQL sem impacto visível para o aplicativo. Também vamos explicar algumas limitações e desvantagens dessa abordagem.
Configuração inicial da nuvem
Primeiro, vamos discutir a configuração. Usaremos instâncias do AWS EC2 para nosso ambiente. Como estamos apenas testando, não nos importamos com a alta disponibilidade além do que queremos provar ser possível - mudanças mestre perfeitas. Portanto, usaremos um único nó de aplicativo e um único nó ProxySQL. De acordo com as boas práticas, colocaremos o ProxySQL no nó do aplicativo e o aplicativo será configurado para se conectar ao ProxySQL por meio do soquete Unix. Isso reduzirá a sobrecarga relacionada às conexões TCP e aumentará a segurança - o tráfego do aplicativo para o proxy não sairá da instância local, deixando apenas ProxySQL -> conexão MySQL para criptografar. Novamente, como este é um teste simples, não configuraremos o SSL. Em ambientes de produção, você deseja fazer isso, mesmo se usar VPC.
O ambiente será semelhante ao diagrama abaixo:
Como aplicação, usaremos Sysbench - um programa de benchmark sintético para MySQL . Ele tem a opção de desabilitar e habilitar o uso de transações, que usaremos para demonstrar como o ProxySQL as trata.
Instalando um cluster de replicação MySQL usando o ClusterControl
Para tornar a implantação rápida e eficiente, usaremos o ClusterControl para implantar a configuração de replicação do MySQL para nós. A instalação do ClusterControl requer apenas alguns passos. Não entraremos em detalhes aqui, mas você deve abrir nosso site, registrar e instalar o ClusterControl deve ser bastante simples. Lembre-se de que você precisa configurar o SSH sem senha entre a instância ClusterControl e todos os nós que gerenciaremos com ela.
Depois que o ClusterControl for instalado, você poderá fazer login. Será apresentado um assistente de implantação:
Como já temos instâncias rodando na nuvem, vamos apenas usar Opção “Implantar”. Será apresentada a seguinte tela:
Vamos escolher MySQL Replication como o tipo de cluster e precisamos fornecer conectividade detalhes. Pode ser uma conexão usando o usuário root ou também um usuário sudo com ou sem senha.
No próximo passo, temos que tomar algumas decisões. Usaremos o Percona Server for MySQL em sua versão mais recente. Também temos que definir uma senha para o usuário root nos nós que iremos implantar.
Na etapa final temos que definir uma topologia - vamos com o que propusemos no início - um mestre e três escravos.
ClusterControl iniciará a implantação - podemos rastreá-la na guia Atividade, como mostrado na captura de tela acima.
Depois que a implantação for concluída, podemos ver o cluster na lista de clusters:
Instalando o ProxySQL 2.0 usando o ClusterControl
A próxima etapa será implantar o ProxySQL. ClusterControl pode fazer isso por nós.
Podemos fazer isso em Manage -> Load Balancer.
Como estamos apenas testando coisas, vamos reutilizar a instância ClusterControl para ProxySQL e Sysbench. Na vida real, você provavelmente gostaria de usar seu servidor de aplicativos “real”. Se você não conseguir encontrá-lo no menu suspenso, sempre poderá escrever o endereço do servidor (IP ou nome do host) manualmente.
Também queremos definir credenciais para monitoramento e usuário administrativo. Também verificamos se o ProxySQL 2.0 será implantado (você sempre pode alterá-lo para 1.4.x, se necessário).
Na parte inferior do assistente, definiremos o usuário que será criado em MySQL e ProxySQL. Se você tiver um aplicativo existente, provavelmente desejará usar um usuário existente. Se você usar vários usuários para seu aplicativo, sempre poderá importar o restante deles posteriormente, depois que o ProxySQL for implantado.
Queremos garantir que todas as instâncias do MySQL sejam configuradas no ProxySQL. Usaremos transações explícitas para definir a opção de acordo. Isso é tudo o que precisávamos fazer - o resto é clicar no botão “Deploy ProxySQL” e deixar o ClusterControl fazer o seu trabalho.
Quando a instalação for concluída, o ProxySQL aparecerá na lista de nós no aglomerado. Como você pode ver na captura de tela acima, ele já detectou a topologia e os nós distribuídos entre os grupos de hosts de leitores e gravadores.
Instalando o Sysbench
A etapa final será criar nosso “aplicativo” instalando o Sysbench. O processo é bastante simples. Primeiramente temos que instalar os pré-requisitos, bibliotecas e ferramentas necessárias para compilar o Sysbench:
[email protected]:~# apt install git automake libtool make libssl-dev pkg-config libmysqlclient-dev
Então queremos clonar o repositório sysbench:
[email protected]:~# git clone https://github.com/akopytov/sysbench.git
Finalmente queremos compilar e instalar o Sysbench:
[email protected]:~# cd sysbench/
[email protected]:~/sysbench# ./autogen.sh && ./configure && make && make install
É isso, Sysbench foi instalado. Agora precisamos gerar alguns dados. Para isso, inicialmente, precisamos criar um esquema. Vamos nos conectar ao ProxySQL local e através dele vamos criar um esquema ‘sbtest’ no master. Observe que usamos o soquete Unix para conexão com ProxySQL.
[email protected]:~/sysbench# mysql -S /tmp/proxysql.sock -u sbtest -psbtest
mysql> CREATE DATABASE sbtest;
Query OK, 1 row affected (0.01 sec)
Agora podemos usar o sysbench para preencher o banco de dados com dados. Novamente, usamos o soquete Unix para conexão com o proxy:
[email protected]:~# sysbench /root/sysbench/src/lua/oltp_read_write.lua --threads=4 --events=0 --time=3600 --mysql-socket=/tmp/proxysql.sock --mysql-user=sbtest --mysql-password=sbtest --tables=32 --report-interval=1 --skip-trx=on --table-size=100000 --db-ps-mode=disable prepare
Uma vez que os dados estejam prontos, podemos prosseguir com nossos testes.
Conclusão
Na segunda parte deste blog, discutiremos o tratamento de conexões, failover e suas configurações do ProxySQL que podem nos ajudar a gerenciar o switch mestre de uma forma que seja o menos intrusiva para a aplicação.