sql >> Base de Datos >  >> RDS >> MariaDB

Administración básica de MaxScale con MaxCtrl para MariaDB Cluster:segunda parte

En la publicación de blog anterior, hemos cubierto 4 componentes básicos de administración utilizando el cliente de línea de comandos MaxCtrl. En esta publicación de blog, cubriremos la parte restante de los componentes de MaxScale que se usan comúnmente en un clúster de MariaDB:

  • Gestión de filtros
  • Administración de MaxScale
  • Gestión de registros

Todos los comandos de esta publicación de blog se basan en MaxScale 2.5.3.

Administración de filtros

El filtro es un módulo en MaxScale que actúa como motor de procesamiento y enrutamiento para un servicio MaxScale. El filtrado se produce entre la conexión del cliente a MaxScale y la conexión de MaxScale a los servidores de base de datos back-end. Esta ruta (el lado del cliente de MaxScale hacia los servidores de bases de datos reales) se puede considerar una canalización, luego se pueden colocar filtros en esa canalización para monitorear, modificar, copiar o bloquear el contenido que fluye a través de ella.

Hay muchos filtros que se pueden aplicar para ampliar las capacidades de procesamiento de un servicio de MaxScale, como se muestra en la siguiente tabla:

Nombre del filtro

Descripción

Binlog

Replica selectivamente los eventos de registro binario a servidores esclavos combinados con un servicio binlogrouter.

Caché

Un caché simple que es capaz de almacenar en caché el resultado de SELECT, de modo que MaxScale sirve directamente SELECT idénticos posteriores, sin que las consultas se enruten a ninguna servidor.

Lectura crítica consistente

Permite que se realicen lecturas críticas consistentes a través de MaxScale al mismo tiempo que permite escalar horizontalmente las lecturas no críticas.

Cortafuegos de base de datos

Bloquea las consultas que coinciden con un conjunto de reglas. Este filtro debe verse como una solución de mejor esfuerzo destinada a proteger contra el uso indebido accidental en lugar de ataques maliciosos.

Sugerencia

Agrega sugerencias de enrutamiento a un servicio, indicando al enrutador que enrute una consulta a cierto tipo de servidor.

Insertar transmisión

Convierte inserciones masivas en flujos de datos CSV que consume el servidor backend a través del mecanismo LOAD DATA LOCAL INFILE

Lua

Llama a un conjunto de funciones en un script Lua.

Enmascaramiento

Oculta el valor devuelto de una columna en particular

Maxrows

Restringir el número de filas que un SELECT, una declaración preparada o un procedimiento almacenado podría devolver a la aplicación cliente.

Servidor con nombre

Dirige las consultas a los servidores en función de las coincidencias de expresiones regulares (regex).

Consultar todo el registro

Registra el contenido de la consulta en un archivo en formato CSV.

Regex

Reescribe el contenido de la consulta utilizando coincidencias de expresiones regulares y sustitución de texto.

Camiseta

Haga copias de las solicitudes del cliente y envíe las copias a otro servicio dentro de MariaDB MaxScale.

Acelerador

Reemplaza y amplía la funcionalidad limit_queries del filtro de firewall de base de datos

Arriba

Supervisa el rendimiento de la consulta de la instrucción SQL seleccionada que pasa por el filtro.

Supervisión del rendimiento de transacciones

Supervisa cada instrucción SQL que pasa por el filtro, agrupada por transacción, para el análisis del rendimiento de la transacción.

Cada filtro tiene sus propias formas de configurar. Los filtros se adjuntan comúnmente a un servicio MaxScale. Por ejemplo, se puede aplicar un filtro binlog al servicio binlogrouter, para replicar solo un subconjunto de datos en un servidor esclavo, lo que puede reducir enormemente el espacio en disco para tablas enormes. Consulte la documentación de los filtros MaxScale para conocer la forma correcta de configurar los parámetros para el filtro correspondiente.

Crear un filtro

Cada filtro MaxScale tiene su propia forma de configurarse. En este ejemplo, vamos a crear un filtro de enmascaramiento para enmascarar nuestros datos confidenciales para la columna "card_no" en nuestra tabla "credit_cards". El enmascaramiento requiere un archivo de reglas, escrito en formato JSON. En primer lugar, cree un directorio para alojar nuestros archivos de reglas:

$ mkdir /var/lib/maxscale/rules

Luego, crea un archivo de texto:

$ vi /var/lib/maxscale/rules/masking.json

Especifique las líneas de la siguiente manera:

{
    "rules": [
        {
            "obfuscate": {
                "column": "card_no"
            }
        }
    ]
}

Las reglas simples anteriores simplemente ofuscarán la salida de la columna card_no para cualquier tabla, para proteger los datos confidenciales para que los vea el cliente MariaDB.

Después de que se haya creado el archivo de reglas, podemos crear el filtro usando el siguiente comando:

maxctrl: create filter Obfuscates-card masking rules=/var/lib/maxscale/rules/masking.json
OK

Tenga en cuenta que algunos filtros requieren parámetros diferentes. En cuanto a este filtro de enmascaramiento, el parámetro básico es "reglas", donde debemos especificar el archivo de regla de enmascaramiento creado en formato JSON.

Adjuntar un filtro a un servicio

Un filtro solo se puede activar asociándolo a un servicio. La modificación de un servicio existente usando MaxCtrl solo es compatible con algunos parámetros, y agregar un filtro no es uno de ellos. Tenemos que agregar el componente de filtro en el archivo de configuración del servicio de MaxScale para adjuntar básicamente el filtro. En este ejemplo, vamos a aplicar el filtro "Tarjeta ofuscada" a nuestro servicio rotativo existente llamado rr-service.

Vaya al directorio /var/lib/maxscale/maxscale.cnf.d y busque rr-service.cnf, ábralo con un editor de texto y luego agregue la siguiente línea:

filters=Obfuscates-card

Se requiere reiniciar MaxScale para cargar el nuevo cambio:

$ systemctl restart maxscale

Para probar el filtro, usaremos un cliente MariaDB y compararemos la salida conectándonos a dos servicios diferentes. Nuestro servicio rw está conectado a un oyente que escucha en el puerto 3306, sin ningún filtro configurado. Por lo tanto, deberíamos ver la respuesta sin filtrar de MaxScale:

$ mysql -ucard_user -p -hmaxscale_host -p3306 -e "SELECT * FROM secure.credit_cards LIMIT 1"
+----+-----------+-----------------+-------------+-----------+---------+
| id | card_type | card_no         | card_expiry | card_name | user_id |
+----+-----------+-----------------+-------------+-----------+---------+
|  1 | VISA      | 425388910909238 | NULL        | BOB SAGAT |       1 |
+----+-----------+-----------------+-------------+-----------+---------+

Al conectarse al servicio de escucha rr en el puerto 3307, que se configuró con nuestro filtro, nuestro valor "card_no" se ofusca con un resultado incomprensible:

$ mysql -ucard_user -p -hmaxscale_host -p3307 -e "SELECT * FROM secure.credit_cards LIMIT 1"
+----+-----------+-----------------+-------------+-----------+---------+
| id | card_type | card_no         | card_expiry | card_name | user_id |
+----+-----------+-----------------+-------------+-----------+---------+
|  1 | VISA      | ~W~p[=&^M~5f~~M | NULL        | BOB SAGAT |       1 |
+----+-----------+-----------------+-------------+-----------+---------+

Este filtrado lo realiza MaxScale, siguiendo las reglas de coincidencia dentro de masking.json que hemos creado anteriormente.

Filtros de lista

Para listar todos los filtros creados, use el comando "listar filtros":

maxctrl: list filters
┌─────────────────┬────────────┬─────────────┐
│ Filter          │ Service    │ Module      │
├─────────────────┼────────────┼─────────────┤
│ qla             │            │ qlafilter   │
├─────────────────┼────────────┼─────────────┤
│ Obfuscates-card │ rr-service │ masking     │
├─────────────────┼────────────┼─────────────┤
│ fetch           │            │ regexfilter │
└─────────────────┴────────────┴─────────────┘

En los ejemplos anteriores, hemos creado 3 filtros. Sin embargo, solo el filtro Ofuscates-card está vinculado a un servicio.

Para mostrar todos los servicios en detalle:

maxctrl: show filters

O si desea mostrar un servicio en particular:

maxctrl: show filter Obfuscates-card
┌────────────┬──────────────────────────────────────────────────────┐
│ Filter     │ Obfuscates-card                                      │
├────────────┼──────────────────────────────────────────────────────┤
│ Module     │ masking                                              │
├────────────┼──────────────────────────────────────────────────────┤
│ Services   │ rr-service                                           │
├────────────┼──────────────────────────────────────────────────────┤
│ Parameters │ {                                                    │
│            │     "check_subqueries": true,                        │
│            │     "check_unions": true,                            │
│            │     "check_user_variables": true,                    │
│            │     "large_payload": "abort",                        │
│            │     "prevent_function_usage": true,                  │
│            │     "require_fully_parsed": true,                    │
│            │     "rules": "/var/lib/maxscale/rules/masking.json", │
│            │     "treat_string_arg_as_field": true,               │
│            │     "warn_type_mismatch": "never"                    │
│            │ }                                                    │
└────────────┴──────────────────────────────────────────────────────┘

Eliminar un filtro

Para eliminar un filtro, primero debe desvincularse de los servicios asociados. Por ejemplo, considere los siguientes filtros en MaxScale:

 maxctrl: list filters
┌─────────────────┬────────────┬───────────┐
│ Filter          │ Service    │ Module    │
├─────────────────┼────────────┼───────────┤
│ qla             │            │ qlafilter │
├─────────────────┼────────────┼───────────┤
│ Obfuscates-card │ rr-service │ masking   │
└─────────────────┴────────────┴───────────┘

Para el filtro qla, simplemente podemos usar el siguiente comando para eliminarlo:

 maxctrl: destroy filter qla
OK

Sin embargo, para el filtro de la tarjeta Ofuscates, debe desvincularse del servicio rr y, desafortunadamente, esto requiere una modificación del archivo de configuración y un reinicio de MaxScale. Vaya al directorio /var/lib/maxscale/maxscale.cnf.d y busque rr-service.cnf, ábralo con un editor de texto y luego elimine la siguiente línea:

filters=Obfuscates-card

También puede eliminar la cadena "Obfuscates-card" de la línea anterior y dejar que la línea "filters" sea igual a un valor vacío. Luego, guarde el archivo y reinicie el servicio MaxScale para cargar los cambios:

$ systemctl restart maxscale

Solo entonces podemos eliminar el filtro Ofuscates-card de MaxScale usando el comando "destroy filter":

maxctrl: destroy filter Obfuscates-card
OK

Administración de MaxScale

Lista de usuarios

Para enumerar todos los usuarios de MaxScale, use el comando "listar usuarios":

maxctrl: list users
┌───────┬──────┬────────────┐
│ Name  │ Type │ Privileges │
├───────┼──────┼────────────┤
│ admin │ inet │ admin      │
└───────┴──────┴────────────┘

Crear un usuario de MaxScale

De forma predeterminada, un usuario creado es un usuario de solo lectura:

 maxctrl: create user dev mySecret
OK

Para crear un usuario administrador, especifique el comando --type=admin:

 maxctrl: create user dba mySecret --type=admin
OK

Eliminar un usuario de MaxScale

Para eliminar un usuario, simplemente use el comando "destruir usuario":

 maxctrl: destroy user dba
OK

El último usuario administrativo restante no se puede eliminar. Cree un usuario administrativo de reemplazo antes de intentar eliminar el último usuario administrativo.

Mostrar parámetros de MaxScale

Para mostrar todos los parámetros cargados para la instancia de MaxScale, use el comando "show maxscale":

maxctrl: show maxscale
┌──────────────┬──────────────────────────────────────────────────────────────────────┐
│ Version      │ 2.5.3                                                                │
├──────────────┼──────────────────────────────────────────────────────────────────────┤
│ Commit       │ de3770579523e8115da79b1696e600cce1087664                             │
├──────────────┼──────────────────────────────────────────────────────────────────────┤
│ Started At   │ Mon, 21 Sep 2020 04:44:49 GMT                                        │
├──────────────┼──────────────────────────────────────────────────────────────────────┤
│ Activated At │ Mon, 21 Sep 2020 04:44:49 GMT                                        │
├──────────────┼──────────────────────────────────────────────────────────────────────┤
│ Uptime       │ 1627                                                                 │
├──────────────┼──────────────────────────────────────────────────────────────────────┤
│ Parameters   │ {                                                                    │
│              │     "admin_auth": true,                                              │
│              │     "admin_enabled": true,                                           │
│              │     "admin_gui": true,                                               │
│              │     "admin_host": "127.0.0.1",                                       │
│              │     "admin_log_auth_failures": true,                                 │
│              │     "admin_pam_readonly_service": null,                              │
│              │     "admin_pam_readwrite_service": null,                             │
│              │     "admin_port": 8989,                                              │
│              │     "admin_secure_gui": true,                                        │
│              │     "admin_ssl_ca_cert": null,                                       │
│              │     "admin_ssl_cert": null,                                          │
│              │     "admin_ssl_key": null,                                           │
│              │     "auth_connect_timeout": 10000,                                   │
│              │     "auth_read_timeout": 10000,                                      │
│              │     "auth_write_timeout": 10000,                                     │
│              │     "cachedir": "/var/cache/maxscale",                               │
│              │     "connector_plugindir": "/usr/lib/x86_64-linux-gnu/mysql/plugin", │
│              │     "datadir": "/var/lib/maxscale",                                  │
│              │     "debug": null,                                                   │
│              │     "dump_last_statements": "never",                                 │
│              │     "execdir": "/usr/bin",                                           │
│              │     "language": "/var/lib/maxscale",                                 │
│              │     "libdir": "/usr/lib/x86_64-linux-gnu/maxscale",                  │
│              │     "load_persisted_configs": true,                                  │
│              │     "local_address": null,                                           │
│              │     "log_debug": false,                                              │
│              │     "log_info": false,                                               │
│              │     "log_notice": false,                                             │
│              │     "log_throttling": {                                              │
│              │         "count": 0,                                                  │
│              │         "suppress": 0,                                               │
│              │         "window": 0                                                  │
│              │     },                                                               │
│              │     "log_warn_super_user": false,                                    │
│              │     "log_warning": false,                                            │
│              │     "logdir": "/var/log/maxscale",                                   │
│              │     "max_auth_errors_until_block": 10,                               │
│              │     "maxlog": true,                                                  │
│              │     "module_configdir": "/etc/maxscale.modules.d",                   │
│              │     "ms_timestamp": true,                                            │
│              │     "passive": false,                                                │
│              │     "persistdir": "/var/lib/maxscale/maxscale.cnf.d",                │
│              │     "piddir": "/var/run/maxscale",                                   │
│              │     "query_classifier": "qc_sqlite",                                 │
│              │     "query_classifier_args": null,                                   │
│              │     "query_classifier_cache_size": 0,                                │
│              │     "query_retries": 1,                                              │
│              │     "query_retry_timeout": 5000,                                     │
│              │     "rebalance_period": 0,                                           │
│              │     "rebalance_threshold": 20,                                       │
│              │     "rebalance_window": 10,                                          │
│              │     "retain_last_statements": 0,                                     │
│              │     "session_trace": 0,                                              │
│              │     "skip_permission_checks": false,                                 │
│              │     "sql_mode": "default",                                           │
│              │     "syslog": true,                                                  │
│              │     "threads": 1,                                                    │
│              │     "users_refresh_interval": 0,                                     │
│              │     "users_refresh_time": 30000,                                     │
│              │     "writeq_high_water": 16777216,                                   │
│              │     "writeq_low_water": 8192                                         │
│              │ }                                                                    │
└──────────────┴──────────────────────────────────────────────────────────────────────┘

Modificar los parámetros de MaxScale

  • auth_connect_timeout
  • auth_read_timeout
  • auth_write_timeout
  • autenticación_admin
  • admin_log_auth_failures
  • pasivo

El resto de los parámetros deben configurarse dentro de /etc/maxscale.conf, lo que requiere un reinicio de MaxScale para aplicar los nuevos cambios.

GUI de MaxScale

MaxGUI es una nueva herramienta basada en navegador para configurar y administrar MaxScale, introducida en la versión 2.5. Se puede acceder a él a través del puerto 8989 del host MaxScale en la interfaz del host local, 127.0.0.1. De manera predeterminada, se requiere establecer admin_secure_gui=true y configurar los parámetros admin_ssl_key y admin_ssl_cert. Sin embargo, en esta publicación de blog, permitiremos la conectividad a través de HTTP simple agregando la siguiente línea en la directiva [maxctrl] dentro de /etc/maxscale.cnf:

admin_secure_gui = false

Reinicie el servicio MaxScale para cargar el cambio:

$ systemctl restart maxscale

Dado que la GUI está escuchando en la interfaz localhost, podemos usar túneles SSH para acceder a la GUI desde nuestra estación de trabajo local:

$ ssh -L 8989:localhost:8989 [email protected]<Maxscale public IP address>

Luego, abra un navegador web, apunte la URL a http://127.0.0.1:8989/ e inicie sesión. MaxGUI usa las mismas credenciales que maxctrl, por lo que la contraseña predeterminada es "admin" con la contraseña "mariadb". Por motivos de seguridad, se debe crear un nuevo usuario administrador con una contraseña más segura específicamente para este propósito. Una vez que haya iniciado sesión, debería ver el panel de MaxGUI como se muestra a continuación:

La mayoría de los comandos de administración de MaxCtrl que hemos mostrado en esta serie de blogs pueden realizarse directamente desde esta GUI. Si hace clic en el botón "Crear nuevo", aparecerá el siguiente cuadro de diálogo:

Como puede ver, todos los componentes importantes de MaxScale se pueden administrar directamente desde la interfaz gráfica de usuario, con un aspecto agradable e intuitivo, hace que las cosas sean mucho más sencillas y fáciles de administrar. Por ejemplo, se puede asociar un filtro directamente desde la interfaz de usuario, sin necesidad de reiniciar el servicio MaxScale, como se muestra en la sección "Adjuntar un filtro a un servicio" en esta publicación de blog.

Para obtener más información sobre esta nueva GUI, consulte esta guía de MaxGUI.

Gestión de registros

Mostrar parámetros de registro

Para mostrar los parámetros de registro, use el comando "mostrar registro":

 maxctrl: show logging
┌────────────────────┬────────────────────────────────┐
│ Current Log File   │ /var/log/maxscale/maxscale.log │
├────────────────────┼────────────────────────────────┤
│ Enabled Log Levels │ alert                          │
│                    │ error                          │
│                    │ warning                        │
│                    │ notice                         │
├────────────────────┼────────────────────────────────┤
│ Parameters         │ {                              │
│                    │     "highprecision": true,     │
│                    │     "log_debug": false,        │
│                    │     "log_info": false,         │
│                    │     "log_notice": true,        │
│                    │     "log_warning": true,       │
│                    │     "maxlog": true,            │
│                    │     "syslog": true,            │
│                    │     "throttling": {            │
│                    │         "count": 10,           │
│                    │         "suppress_ms": 10000,  │
│                    │         "window_ms": 1000      │
│                    │     }                          │
│                    │ }                              │
└────────────────────┴────────────────────────────────┘

Editar parámetros de registro

Todos los parámetros de registro, como se muestra arriba, se pueden configurar a través del comando MaxCtrl en tiempo de ejecución. Por ejemplo, podemos activar log_info usando el comando "alterar registro":

maxctrl: alter logging log_info true

Rotar registros

De forma predeterminada, MaxScale proporciona un archivo de configuración de rotación de registros en /etc/logrotate.d/maxscale_logrotate. Según la configuración de rotación de registros, el archivo de registro se rota mensualmente y utiliza el comando "rotar registros" de MaxCtrl. Podemos forzar que la rotación de registros ocurra inmediatamente con el siguiente comando:

$ logrotate --force /etc/logrotate.d/maxscale_logrotate

Verifique con el siguiente comando:

$ ls -al /var/log/maxscale/
total 1544
drwxr-xr-x  2 maxscale maxscale    4096 Sep 21 05:53 ./
drwxrwxr-x 10 root     syslog      4096 Sep 20 06:25 ../
-rw-r--r--  1 maxscale maxscale      75 Sep 21 05:53 maxscale.log
-rw-r--r--  1 maxscale maxscale  253250 Sep 21 05:53 maxscale.log.1
-rw-r--r--  1 maxscale maxscale 1034364 Sep 18 06:25 maxscale.log.2
-rw-r--r--  1 maxscale maxscale  262676 Aug  1 06:25 maxscale.log.3

Conclusión

Hemos llegado al final de la serie de implementación y administración de MaxScale utilizando el cliente MaxCtrl. En esta serie de blogs, hemos utilizado un par de versiones diferentes de MaxScale más recientes (en relación con la fecha de redacción) y hemos visto muchas mejoras significativas en cada versión.

Felicitaciones al equipo de MariaDB MaxScale por su arduo trabajo para hacer de MaxScale una de las mejores herramientas de balanceo de carga de bases de datos del mercado.