Site is under maintenance mode. Please wait few min!
Saltar al contenido

Cómo restablecer su contraseña raíz de MySQL o MariaDB

marzo 4, 2020

 

Preludio

HAProxy es un software de código abierto que puede cargar HTTP equilibrio y servidores TCP. En el artículo anterior sobre HAProxy hemos configurado equilibrio de carga para HTTP y en éste vamos a hacer lo mismo para MySQL. Todos sus servidores MySQL tienen que ser configurado para realizar la replicación maestro-maestro como el equilibrio de carga implica tanto la lectura como la escritura a todos los backends.

La siguiente tres gotas serán utilizados en este artículo:

la gotita 1 – equilibrador de carga nombre de host: OS haproxy: Ubuntu Private IP: 10.0.0.100

Droplet 2 – Nodo 1 nombre de host: mysql-1 SO: Debian 7 Private IP: 10.0.0.1

Droplet 2 – nodo 2 nombre de host: mysql-2 OS: Debian 7 Private IP: 10.0.0.2

Antes de continuar, asegúrese de que todos los servidores MySQL son organización, el funcionamiento y están replicando correctamente escrituras de bases de datos.

Prepare un servidor MySQL

que necesitamos para preparar los servidores MySQL mediante la creación de dos usuarios adicionales para HAProxy. El primer usuario será utilizada por HAProxy para comprobar el estado de un servidor. Se necesita el usuario

root@mysql-1# mysql -u root -p -e "INSERT INTO mysql.user (Host,User) values ('10.0.0.100','haproxy_check'); FLUSH PRIVILEGES;"

Un MySQL con privilegios de root cuando se accede al grupo de MySQL desde HAProxy. El usuario root por defecto en todos los servidores de inicio de sesión se les permite sólo a nivel local. Si bien esto se puede solucionar mediante la concesión de privilegios adicionales para el usuario root, que es mejor tener un usuario independiente con privilegios de root.

root@mysql-1# mysql -u root -p -e "GRANT ALL PRIVILEGES ON *.* TO 'haproxy_root'@'10.0.0.100' IDENTIFIED BY 'password' WITH GRANT OPTION; FLUSH PRIVILEGES"

Reemplazar haproxy_root y contraseña con sus propios valores seguros. Es suficiente para ejecutar estas consultas en un maestro de MySQL como cambios se replicarán en otros.

Instalar cliente de MySQL Client

MySQL tiene que ser instalado en la gota HAProxy para probar la conectividad.

root@haproxy# apt-get install mysql-client

Ahora intenta ejecutar una consulta en uno de los maestros como el haproxy_root usuario.

root@haproxy# mysql -h 10.0.0.1 -u haproxy_root -p -e "SHOW DATABASES"

Esto debería mostrar una lista de bases de datos MySQL.

Instalación HAProxy

En el servidor HAProxy instalar el paquete.

root@haproxy# apt-get install haproxy

Habilitar HAProxy a ser iniciado por el guión de inicio.

root@haproxy# sed -i "s/ENABLED=0/ENABLED=1/" /etc/default/haproxy

Para comprobar si este cambio se realiza ejecutar correctamente el guión de inicio de HAProxy sin ningún parámetro.

root@haproxy:~# service haproxy
Usage: /etc/init.d/haproxy {start|stop|reload|restart|status}

Configuración HAProxy

Renombrar el archivo original configuración

mv /etc/haproxy/haproxy.cfg{,.original}

crear y editar una nueva

nano /etc/haproxy/haproxy.cfg

El primer bloque es el bloque de configuración global y por defecto.

global
log 127.0.0.1 local0 notice
user haproxy
group haproxy

defaults
log global
retries 2
timeout connect 3000
timeout server 5000
timeout client 5000

Más información acerca de cada una de estas opciones están previstas en este artículo. Como nos hemos dicho HAProxy para enviar mensajes de registro a 127.0.0.1 tenemos que configurar rsyslog para escuchar en él. Esto también ha sido cubierto en el mismo artículo bajo Configurar registro de HAProxy .

en movimiento a la parte principal de configuración.

listen mysql-cluster
bind 127.0.0.1:3306
mode tcp
option mysql-check user haproxy_check
balance roundrobin
server mysql-1 10.0.0.1:3306 check
server mysql-2 10.0.0.2:3306 check

A diferencia de equilibrio de carga HTTP HAProxy no tiene un “modo” específica para MySQL por lo que utilizar TCP . Hemos establecido HAProxy para escuchar sólo en la dirección de bucle de retorno (suponiendo que la aplicación está en el mismo servidor) Sin embargo, si reside su aplicación en una composición diferente de gotas que escuchan en 0.0.0.0 o la dirección IP privada.

se necesite otra más bloque de configuración para ver las estadísticas de equilibrio de carga. Esto es completamente opcional y se puede omitir si no desea que las estadísticas.

listen 0.0.0.0:8080
mode http
stats enable
stats uri /
stats realm Strictly Private
stats auth A_Username:YourPassword
stats auth Another_User:passwd

Sustituir los nombres de usuario y contraseñas en “Estadísticas de autenticación”. Esto hará que HAProxy escuchar en el puerto 8080 de peticiones HTTP y las estadísticas se puede proteger con la autenticación básica HTTP. Para que pueda acceder a las estadísticas

http://:8080/

Una vez que haya terminado la configuración de iniciar el servicio HAProxy.

service haproxy start

Utilice el cliente mysql para consulta HAProxy.

root@haproxy# mysql -h 127.0.0.1 -u haproxy_root -p -e "SHOW DATABASES"

El “-h” opción tiene que estar presente con la dirección IP de bucle invertido. Su omisión o el uso de localhost hará que el cliente MySQL de conexión a la mysql.sock archivo la que se producirá un error.

Prueba

equilibrio de carga y conmutación por error

para comprobar si el equilibrio de carga está trabajando consulta la server_id variables dos veces o más.

root@haproxy# mysql -h 127.0.0.1 -u haproxy_root -p -e "show variables like 'server_id'"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 1 |
+---------------+-------+
root@haproxy# mysql -h 127.0.0.1 -u haproxy_root -p -e "show variables like 'server_id'"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 2 |
+---------------+-------+

Esto demuestra roundrobin carga equilibrar con pesos iguales, ahora vamos a cambiar el peso de mysql-2 y ver los resultados.

nano /etc/haproxy/haproxy.cfg

server mysql-2 10.0.0.2:3306 check weight 2

Recargar para aplicar este cambio.

service haproxy reload

de consulta para la server_id varias veces.

root@haproxy:~# for i in `seq 1 6`
do
mysql -h 127.0.0.1 -u haproxy_root -ppassword -e "show variables like 'server_id'"
done

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 1 |
+---------------+-------+
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 2 |
+---------------+-------+
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 2 |
+---------------+-------+
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 1 |
+---------------+-------+
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 2 |
+---------------+-------+
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 2 |
+---------------+-------+

Ahora obras de equilibrio de carga en la proporción de 1: 2 con uno tercios de las solicitudes que van a mysql-1 y dos tercios van a mysql-2.

falla un servidor MySQL, ya sea por la detención del servicio

root@mysql-1# service mysql stop

o hacia abajo con lo que el interfaz.

root@mysql-1# ifconfig eth1 down

Pruebe la consulta “variables muestran” ahora para ver el resultado. Las siguientes entradas de registro indicará cuándo y cómo HAProxy detecta el fallo.

cola /var/log/haproxy/haproxy.log

Nov 15 00:08:51 localhost haproxy[1671]: Server mysql-cluster/mysql-1 is DOWN, reason: Layer4 timeout, check duration: 2002ms. 1 active and 0 backup servers left. 0 sessions active, 0 requeued, 0 remaining in queue.

La reducción de conmutación por error de intervalo

Cuando un servidor MySQL baja HAProxy necesita algún tiempo para detectar este fallo y eliminarlo de la agrupación. En esta sección veremos cómo controlar este tiempo. En primer lugar vamos a ver cómo medir este valor. Una forma es para bloquear el puerto de MySQL usando iptables para una cierta cantidad de tiempo, a continuación, quitar la regla y comprobar el registro.

root@mysql-1:~# ifconfig eth1 down &&
date &&
sleep 20 &&
ifconfig eth1 up &&
date

Fri Nov 15 00:37:09 IST 2013
Fri Nov 15 00:37:29 IST 2013

El puerto 3306 fue bloqueada durante 20 segundos, vamos a ver el archivo de registro ahora.

root@haproxy:~# tail /var/log/haproxy.log
Nov 15 16:49:38 localhost haproxy[1275]: Server mysql-cluster/mysql-1 is DOWN, reason: Layer4 connection problem, info: "Connection refused", check duration: 0ms. 1 active and 0 backup servers left. 0 sessions active, 0 requeued, 0 remaining in queue.
Nov 15 16:49:56 localhost haproxy[1275]: Server mysql-cluster/mysql-1 is UP, reason: Layer7 check passed, code: 0, info: "5.5.31-0+wheezy1-log", check duration: 1ms. 2 active and 0 backup servers online. 0 sessions requeued, 0 total in queue.

Tomó 6 segundos para detectar un fallo (diferencia 16:49:38-16:49:32) y 4 seconds_to detectar que el servidor puede ser alcanzado (diferencia 16:49:56-16:49:52 ). Esto se determina por el servidor de parámetros aumentan, otoño e inter.

El eleve conjuntos de parámetros el número de controles un servidor debe pasar a ser declarado operacional. Por defecto es 2.

El caer conjuntos de parámetros el número de controles de un servidor debe pasar a ser declarado muertos. El valor predeterminado es 3. parámetros

El inter conjuntos de la inter val entre estas comprobaciones. Por defecto es de 2000 milisegundos.

Poniendo esta información juntos un servidor debe fallar cheques 3 continuas que se realizan en un intervalo de 2 segundos para ser considerado muerto. Así que en nuestro ejemplo anterior, el siguiente habría pasado.

16:49:32 - Port 3306 on mysql-1 was blocked
16:49:34 - Check - Failed - Failure No. 1
16:49:36 - Check - Failed - Failure No. 2
16:49:38 - Check - Failed - Failure No. 3 (server removed and event logged)

Y cuando se retiró la regla de cortafuegos.

16:49:52 - Firewall rule removed port 3306 accessible
16:49:54 - Check - Passed - Success No. 1
16:49:56 - Check - Passed - Success No. 2 (server added to cluster and event logged)

Los siguientes ajustes se reducirá el intervalo de prueba a 1 segundo y también reducir el número de pruebas de caída.

nano /etc/haproxy/haproxy.cfg

server mysql-1 10.0.0.1:3306 check fall 2 inter 1000
server mysql-2 10.0.0.2:3306 check fall 2 inter 1000

A veces no se puede querer a inundar la red privada con demasiados paquetes de “prueba” ayuda especialmente si usted tiene una gran cantidad de servidores MySQL. En tales casos, los parámetros fastinter y downinter vendrá a mano.

El fastinter parámetro establece el intervalo entre los controles, mientras que un servidor está en transición ARRIBA o ABAJO.

El downinter parámetro establece el intervalo de prueba cuando un servidor está abajo.

Esa explicación podría ser confuso, así que veremos con un ejemplo.

nano /etc/haproxy/haproxy.cfg

server mysql-1 10.0.0.1:3306 check fastinter 1000
server mysql-2 10.0.0.2:3306 check fastinter 1000

Puesto que no hemos especificado el parámetro “entre” el valor predeterminado es 2000 ms. Con esta configuración vamos a reiniciamos HAProxy y hacemos la prueba de nuevo.

root@mysql-1:~# iptables -A INPUT -p tcp --dport 3306 -j REJECT &&
date &&
sleep 20 &&
iptables -D INPUT -p tcp --dport 3306 -j REJECT &&
date
Fri Nov 15 17:18:48 IST 2013
Fri Nov 15 17:19:08 IST 2013

Compruebe el archivo de registro HAProxy.

root@haproxy:~# tail /var/log/haproxy.log
Nov 15 17:18:52 localhost haproxy[1353]: Server mysql-cluster/mysql-1 is DOWN, reason: Layer4 connection problem, info: "Connection refused", check duration: 0ms. 1 active and 0 backup servers left. 0 sessions active, 0 requeued, 0 remaining in queue.
Nov 15 17:19:11 localhost haproxy[1353]: Server mysql-cluster/mysql-1 is UP, reason: Layer7 check passed, code: 0, info: "5.5.31-0+wheezy1-log", check duration: 1ms. 2 active and 0 backup servers online. 0 sessions requeued, 0 total in queue.

Ahora en tan sólo 4 segundos (frente al 6 anterior) para detectar un fallo y 3 segundos (frente a 4) para detectar que el servidor había terminado. Detrás de las escenas que esto es lo que pasó.

17:18:48 - Port 3306 blocked
17:18:50 - Check - Failed - Failure No. 1
17:18:51 - Check - Failed - Failure No. 2
17:18:52 - Check - Failed - Failure No. 3 (server removed and event logged)

Y cuando el puerto fue desbloqueado.

17:19:08 - Firewall rule removed
17:19:10 - Check - Passed - Success No. 1
17:19:11 - Check - Passed - Success No. 2 (server added to cluster and event logged)

primer aviso el intervalo entre el evento bloque de puertos (17:18:48) y la primera comprobación (17:18:50), es de 2 segundos (el “inter” intervalo). Luego cuenta el intervalo entre prueba 1 <-> Prueba 2 y la Prueba 2 <-> Prueba 3, sólo es 1 segundo (el “fastinter” intervalo). Los mismos intervalos se puede notar cuando el servidor se movió desde abajo hacia arriba. Por lo que los controles “fastinter” El intervalo entre estas comprobaciones.

Entonces, ¿qué es downinter ? Cuando un servidor se ha declarado ABAJO HAProxy continúa comprobando que cada 2 segundos (o el plazo previsto en el inter). Si usted siente que está usando los recursos de red innecesarios ajuste del downinter decir 5000 hará HAProxy comprobar un servidor ABAJO sólo una vez en 5 segundos.

Importante

las pruebas que hicimos previamente rechazado los paquetes que significa que cuando HAProxy iniciado una conexión mediante el envío de un paquete SYN para mysql-1 que recibe un paquete RST (en lugar de SYN + ACK). Esta es la razón por la entrada de registro mencionado “Conexión rechazada”. En este caso, sólo la caída, los valores inter e fastinter entra en la escena.

En cambio, si HAProxy no recibió nada después de enviar SYN los tiempos de conexión a cabo. En este caso, además de los parámetros antes mencionados, la duración del “tiempo de espera” entra en la escena. Esta situación puede ocurrir si iptables

  • se establece en DROP
  • la interfaz privada se ha reducido
  • hay un problema con la infraestructura de red privada

más documentación de lectura

Oficial http://cbonte.github.io/ haproxy-dconv / configuración de 1.4.html

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *