1 of 42

Conociendo ProxySQL

Enero 2017

2 of 42

hola *

STR Sistemas - Conociendo ProxySQL - Enero 2017

3 of 42

Arquitecturas MySQL - Replicación

STR Sistemas - Conociendo ProxySQL - Enero 2017

4 of 42

Arquitecturas MySQL - Replicación Circular

STR Sistemas - Conociendo ProxySQL - Enero 2017

5 of 42

Arquitecturas MySQL - Galera (PXC)

STR Sistemas - Conociendo ProxySQL - Enero 2017

6 of 42

Proxy

STR Sistemas - Conociendo ProxySQL - Enero 2017

7 of 42

ProxySQL

  • Desarrollado en C++ por René Cannaò (@rene_cannao)
  • Licencia GPL
  • Fácil instalación (paquetes y repositorios disponibles para distros conocidas)
  • Es un proxy que entiende el protocolo de MySQL y permite por tanto manipular la comunicación cliente-servidor

STR Sistemas - Conociendo ProxySQL - Enero 2017

8 of 42

ProxySQL - Funcionamiento (I)

  • Funciona como demonio
  • Tiene un proceso que funciona como monitor y un proceso real que atiende las peticiones
  • Fácil instalación (paquetes y repositorios disponibles para distros conocidas)
  • Por defecto escucha en el puerto 6033
  • Se administra a través de un interfaz con el cliente de MySQL que por defecto se levanta en el puerto 6032
  • Es un proxy y por tanto retransmite las peticiones que recibe a los servidores reales permitiendo realizar alteraciones sobre la misma o aplicar lógica para su distribución

STR Sistemas - Conociendo ProxySQL - Enero 2017

9 of 42

ProxySQL - Funcionamiento (II)

  • Soporta SSL
  • Tiene en cuenta estado de la arquitectura como tiempos de replicación, grupos de replicación
  • Permite realizar integraciones con soluciones como Percona XtraDB Cluster

STR Sistemas - Conociendo ProxySQL - Enero 2017

10 of 42

ProxySQL - Sistema de configuración (I)

  • Se puede configurar inicialmente mediante un fichero de tipo JSON
  • Luego se configura mediante variables globales y de MySQL para configurar accesos, puerto de escucha, etc.
  • Toda la configuración operativa se realiza a través de INSERT, DELETE y UPDATE sobre tablas internas (las nuevas funcionalidades se gestionan igualmente a través de nuevas tablas o cambios de las existentes como mirroring o scheduler)
  • La mayoría de identidades se pueden activar o desactivar permitiendo tener configuraciones cargadas sin uso

STR Sistemas - Conociendo ProxySQL - Enero 2017

11 of 42

ProxySQL - Sistema de configuración (II)

# mysql -u admin -padmin -h 127.0.0.1 -P 6032

mysql> SHOW DATABASES;

+-----+---------+-------------------------------+

| seq | name | file |

+-----+---------+-------------------------------+

| 0 | main | |

| 2 | disk | /var/run/proxysql/proxysql.db |

| 3 | stats | |

| 4 | monitor | |

+-----+---------+-------------------------------+

STR Sistemas - Conociendo ProxySQL - Enero 2017

12 of 42

ProxySQL - Sistema de configuración (III)

STR Sistemas - Conociendo ProxySQL - Enero 2017

13 of 42

ProxySQL - Sistema de configuración (IV)

LOAD MYSQL (USERS|SERVERS|QUERY|VARIABLES) FROM (MEMORY|DISK|CONFIG)

LOAD MYSQL (USERS|SERVERS|QUERY|VARIABLES) TO (MEMORY|RUNTIME)

SAVE MYSQL (USERS|SERVERS|QUERY|VARIABLES) TO (MEMORY|DISK)

SAVE MYSQL (USERS|SERVERS|QUERY|VARIABLES) FROM (MEMORY|RUNTIME)

STR Sistemas - Conociendo ProxySQL - Enero 2017

14 of 42

ProxySQL - Sistema de configuración (V)

LOAD ADMIN VARIABLES FROM (MEMORY|DISK)

LOAD ADMIN VARIABLES TO (MEMORY|RUNTIME)

SAVE ADMIN VARIABLES TO (MEMORY|DISK)

SAVE ADMIN VARIABLES FROM (MEMORY|RUNTIME)

STR Sistemas - Conociendo ProxySQL - Enero 2017

15 of 42

ProxySQL - Sistema de configuración (VI)

mysql> SHOW TABLES;

+-------------------+

| tables |

+-------------------+

| mysql_servers |

| mysql_users |

| mysql_query_rules |

| global_variables |

| mysql_collations |

+-------------------+

STR Sistemas - Conociendo ProxySQL - Enero 2017

16 of 42

ProxySQL - Gestión de servidores

  • Los servidores MySQL, o backends, se definen en la tabla mysql_servers
  • Cada servidor se define dentro de un conjunto de servidores, hostgroup, que será lo que defina posteriormente el(los) backend(s) a utilizar en cada consulta
  • ProxySQL realiza checks mediante su componente monitor para evaluar la salud de cada servidor y deja trazas de los checks realizados en las tablas mysql_server_<check_type>_log

STR Sistemas - Conociendo ProxySQL - Enero 2017

17 of 42

ProxySQL - Gestión de usuarios

  • Los usuarios deben existir en los servidores de MySQL que siguen autenticando las conexiones
  • Los usuarios deben existir también en ProxySQL y para ello se dan de alta en la tabla mysql_users
  • La autenticación que realice el cliente debe validar tanto en ProxySQL como en los servidores MySQL
  • Las contraseñas pueden insertarse en plano o ya como hash y pueden convertirse mediante el paso a RUNTIME y vuelta a cargar a MEMORY
  • Cada usuario tiene vinculado un grupo de servidores por defecto
  • Entre otras cosas para cada usuario se puede definir la persistencia para transacciones o se puede anular el uso de las reglas de ProxySQL

STR Sistemas - Conociendo ProxySQL - Enero 2017

18 of 42

ProxySQL - Monitor (I)

  • Permite monitorizar los backend con la finalidad de aislarlos si no responden correctamente o medir la latencia
  • Se gestiona a través de variables que permiten configurar el usuario, contraseña, tipo de chequeo, etc.
  • De los check realizados por el monitor se recogen datos en las tablas del esquema monitor

STR Sistemas - Conociendo ProxySQL - Enero 2017

19 of 42

ProxySQL - Monitor (II)

mysql> SHOW TABLES FROM monitor;

+----------------------------------+

| tables |

+----------------------------------+

| mysql_server_connect |

| mysql_server_connect_log |

| mysql_server_ping |

| mysql_server_ping_log |

STR Sistemas - Conociendo ProxySQL - Enero 2017

| mysql_server_read_only_log |

| mysql_server_replication_lag_log |

+----------------------------------+

6 rows in set (0.00 sec)

20 of 42

ProxySQL - Reglas de queries (I)

  • Gestionan la ejecución de consultas mediante la tabla mysql_query_rules(1)
  • Las reglas se construyen mediante patrones basados en expresiones regulares sobre la query o el digest de la misma indicando un hostgroup (campo destination_hostgroup) sobre el que ejecutar las querys que coincidan con el patrón
  • Se puede discriminar reglas por el usuario (campo username), el esquema (campo schemaname), orígenes de conexión, etc.
  • Se pueden definir por ejemplo reintentos para la query o timeout máximo para ejecutar una query

STR Sistemas - Conociendo ProxySQL - Enero 2017

Para tardes aburridas de sábado una divertida manera de practicar expresiones regulares

21 of 42

ProxySQL - Reglas de queries (II)

  • Mediante los campos flagIN, flagOUT y apply podemos realizar ejecución de reglas en cadena:
    • Inicialmente se evaluarán las reglas con flagIN = 0
    • si apply!=1 se mira flagOUT y se procede a buscar una query con flagIN igual al flagIN de la query regla procesada
    • se repite el proceso hasta que no hay más reglas a ejecutar o una regla tiene apply=1
  • Con esto podemos hacer cosas complejas como sharding: ejemplo

STR Sistemas - Conociendo ProxySQL - Enero 2017

22 of 42

ProxySQL - Gestión de procesos y conexiones

  • ProxySQL funciona mediante threads y siempre dispone de varios threads libres listos para poder recibir nuevas conexiones
  • ProxySQL gestiona un pool de conexiones hacia los servidores backend, manteniendo casi siempre alguna es estado idle, estando casi siempre la conexión abierta
  • ProxySQL por las razones anteriores puede funcionar como pool de conexiones para sistemas que normalmente no tienen como PHP o reagrupar en sistemas que suelen abrirlo por servidor como servidores de aplicación Java

STR Sistemas - Conociendo ProxySQL - Enero 2017

23 of 42

ProxySQL - Estadísticas (I)

  • ProxySQL recoge muchas estadísticas en tiempo real en el schema interno stats

mysql> SHOW TABLES FROM stats;

+---------------------------------+

| tables |

+---------------------------------+

| global_variables |

| stats_mysql_commands_counters |

| stats_mysql_connection_pool |

| stats_mysql_global |

| stats_mysql_processlist |

| stats_mysql_query_digest |

| stats_mysql_query_digest_reset |

| stats_mysql_query_rules |

+---------------------------------+

STR Sistemas - Conociendo ProxySQL - Enero 2017

24 of 42

ProxySQL - Algoritmo de reintento

  • ProxySQL utiliza un algoritmo de reintento que permite ejecutar nuevamente una query que ha fallado
  • Se pueden configurar los reintentos por un tiempo máximo de ejecución o por errores
  • Actualmente se pueden generar reintentos por errores en el monitoring por lo que es importante su correcta configuración o desactivación de los reintentos (activado por defecto)

STR Sistemas - Conociendo ProxySQL - Enero 2017

25 of 42

ProxySQL - Read/Write Split

STR Sistemas - Conociendo ProxySQL - Enero 2017

26 of 42

ProxySQL - Scheduler

  • Es una especie de cron integrado en ProxySQL desde la v1.2.0 que permite ejecutar tareas recurrentes con programación a nivel de milisegundos
  • Se gestiona mediante la tabla scheduler y su equivalente runtime_scheduler
  • Útil para realizar integraciones que realizan cambios sobre ProxySQL
  • Añade las instrucciones de administración:

LOAD SCHEDULER TO (RUNTIME|MEMORY)

LOAD SCHEDULER FROM (MEMORY|DISK)

SAVE SCHEDULER FROM (RUNTIME|MEMORY)

SAVE SCHEDULER TO (MEMORY|DISK)

STR Sistemas - Conociendo ProxySQL - Enero 2017

27 of 42

ProxySQL - Mirroring

  • Se incluye en la versión 1.3.0
  • Permite ejecutar queries en varios servidores para por ejemplo disponer de una arquitectura replicada como la siguiente:

STR Sistemas - Conociendo ProxySQL - Enero 2017

28 of 42

ProxySQL - Mirroring

  • Al cliente siempre se le devuelve el resultado generado por la query al hostgroup principal
  • Se puede utilizar para realizar pruebas en un segundo entorno por ejemplo

STR Sistemas - Conociendo ProxySQL - Enero 2017

29 of 42

ProxySQL - Query Caché

  • Permite disponer de una caché de base de datos en la que controlar el TTL
  • Evita la necesidad de uso de caché (para base de datos) de memcached, redis, etc.
  • Se puede definir caché para queries concretas
  • Es compatible con otras opciones de ProxySQL como la reescritura de reglas

STR Sistemas - Conociendo ProxySQL - Enero 2017

30 of 42

ProxySQL - Overhead/Perfomance (I)

STR Sistemas - Conociendo ProxySQL - Enero 2017

31 of 42

ProxySQL - Overhead/Perfomance (II)

STR Sistemas - Conociendo ProxySQL - Enero 2017

32 of 42

ProxySQL - Overhead/Perfomance (III)

STR Sistemas - Conociendo ProxySQL - Enero 2017

33 of 42

ProxySQL - Overhead/Perfomance (IV)

STR Sistemas - Conociendo ProxySQL - Enero 2017

34 of 42

ProxySQL - Overhead/Perfomance (V)

STR Sistemas - Conociendo ProxySQL - Enero 2017

35 of 42

ProxySQL - Alternativas

  • mysql proxy: proyecto original de MySQL abandonado pero comienzo de los actuales
  • MySQL Router: proyecto actual de MySQL
  • MariaDB MaxScale: proyecto de MariaDB
  • Además se pueden hacer cosas aunque lógicamente a otro nivel (no entienden el protocolo de MySQL) con haproxy o nginx
  • Futuras charlas comparativas en Percona Live 2017 y FOSDEM 2017

STR Sistemas - Conociendo ProxySQL - Enero 2017

36 of 42

ProxySQL - Recursos

STR Sistemas - Conociendo ProxySQL - Enero 2017

37 of 42

ProxySQL - Conclusiones

  • ProxySQL nos permite plantear nuevas arquitecturas en lo que a escalabilidad y alta disponibilidad se refiere sin complicar el desarrollo y reforzando las existentes
  • Permite integrar con otras soluciones
  • Permite a los DBA/sysadmin realizar optimizaciones sin depender de desarrollo
  • Es un punto más de control y análisis
  • Se encuentra en pleno desarrollo y evolución
  • Todavía debe mejorar en ciertas cosas por eso debe evaluarse bien antes de incluirlo en producción

STR Sistemas - Conociendo ProxySQL - Enero 2017

38 of 42

DEMO - Arquitectura física

STR Sistemas - Conociendo ProxySQL - Enero 2017

39 of 42

DEMO - Arquitectura lógica

STR Sistemas - Conociendo ProxySQL - Enero 2017

40 of 42

DEMO

STR Sistemas - Conociendo ProxySQL - Enero 2017

41 of 42

GRACIAS

902027609 / 664204396

STR Sistemas - Conociendo ProxySQL - Enero 2017

42 of 42