Menu fechado

Desmistificando ProxySQL

Fala galera. Neste post vou falar um pouco sobre o ProxySQL . O ProxySQL é um proxysql para que implementa o protocolo do MySQL o que lhe permite fazer coisas que outros proxies não fazem. Ele vem ganhando muita atenção nos últimos tempos e é capaz de integrar com vários produtos do ecossistema MySQL, como Replicação (master – slave), Percona XtraDB Cluster e Group Replication. Uma  das funcionalidades mais úteis (que faz o produto se destacar perante os demais) é a habilidade de escalar escritas para os slaves , ele é capaz de identificar que tipo de query está sendo recebida (Escrita ou Leitura) e enviar a query para o master ou para o(s) slave(s). Isso tudo sem ter que alterar uma linha de código na aplicação.

Neste artigo vou abordar alguns pontos importantes para entendermos como o proxy funciona.

Instalação

A Instalação pode ser feita das seguintes maneiras:

  1. Baixando a os pacotes para a sua versão de sistema operacional (rpm / deb) do repositório oficial no github https://github.com/sysown/proxysql/releases :
    sudo yum install https://github.com/sysown/proxysql/releases/download/v1.4.9/proxysql-1.4.9-1-centos7.x86_64.rpm
    
  2. Baixando a os pacotes para a sua versão de sistema operacional (rpm / deb) do site da Percona https://www.percona.com/downloads/proxysql/ :
    sudo yum install https://github.com/sysown/proxysql/releases/download/v1.4.9/proxysql-1.4.9-1-centos7.x86_64.rpm
  3. Instalando o repositório da Percona para a sua versão de sistema operacional (preferido):
    sudo yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
    sudo yum install proxysql

 

 

sudo yum install https://github.com/sysown/proxysql/releases/download/v1.4.9/proxysql-1.4.9-1-centos7.x86_64.rpm

Agora só precisamos iniciar o serviço

sudo service proxysql start 

Interfaces

ProxySQL faz uma divisão da área de administração do proxy com a área em que as aplicações conectam e executam queries. A área de administração escuta na porta 6032 e a área  para as aplicações escuta na 6033 (3306 ao contrário).

Camadas

Outra parte importante para entender como o proxy funciona são as camadas que ele utiliza, vou utilizar parte do diagrama oficial (disponível aqui) para explicar:

+-------------------------+
|      1. RUNTIME         |   
+-------------------------+
       /|\          |
        |           |
        |           |
        |          \|/
+-------------------------+
|     2.  MEMORY          |   
+-------------------------+ 
       /|\          |      
        |           |      
        |           |       
        |          \|/      
+-------------------------+  
|     3.   DISK           |  
+-------------------------+  

ProxySQL sempre vai ler as informações da camada 1.Runtime que reside em memória.
Quando conectamos na porta 6032 sempre vamos estar conectados a camada 2.Memory, que como o nome diz, reside em memória.
E Por final, temos a camada 3.Disk, como as demais camadas residem em memória, precisamos de uma camada para persistir os dados em disco.

Qual o benefício deste layout? Ele nos permite realizar várias alterações e aplicar elas somente no momento em que terminamos  todas elas, podemos fazer uma analogia a transações, aonde depois de executar várias queries, executamos um commit.
Quando o proxysql iniciar, ele lê os dados do disco para a memória e lê os dados da memória para runtime. Quando realizarmos uma alteração, vamos estar manipulando a memória, vamos daí executar um comando LOAD MYSQL [SERVERS | USERS | QUERY RULES] TO RUNTIME para ler os dados da memória para runtime, e conseqüentemente, vamos executar um SAVE MYSQL [SERVERS | USERS | QUERY RULES] TO DISK para salvar os dados da memória para o disco.

Hostgroups

ProxySQL agrupa servidores em algo chamado hostgroup. Em uma topologia em que temos um master e dois slaves, vamos criar o HostGroup(HG) 1 e especificar que o master faz parte dele, e vamos criar o HG2 e especificar que ambos os slaves fazem parte dele. A criação de HG é feita juntamente com a inserção de servidores na tabela mysql_servers e não existe uma numeração fixa. Você pode atribuir a número/ID que quizer. Posteriormente, vamos configurar usuários e regras para queries que vão identificar se a query é uma leitura, ela deve ser direcionada para o HG 2 (leitura / aonde estão nossos slaves) e o proxysql vai enviar a query para um dos servidores presentes neste HG. Caso a query não seja uma leitura, ela vai ser direcionada para o HG de escrita.

Autenticação

ProxySQL possui funcionalidades como firewall por exemplo, em que você pode bloquear uma query de ser executada. Uma vez que o proxy identifica esta query, ele retorna uma mensagem de erro, sem mesmo ter enviado ela para algum hostgroup. Para que funcionalidades como esta sejam possíveis o proxy requer uma autenticação além da autenticação no servidor do MySQL. Para que um usuário do MySQL possa conectar via ProxySQL temos que criar o mesmo no proxy.

 

 

Fica aqui um link de uma apresentação que fiz a um tempo atrás referente a algumas features do ProxySQL – https://www.slideshare.net/MarceloAltmann/proxy-sql-para-mysql

Agora que você entendeu um pouco de como funciona o ProxySQL, já pode começar a utilizar / testar em suas aplicações.

Gostou ? Ajude e Compartilhe!