MMM arquitectura de alta disponibilidad construcción de base de datos MySQL

1. Descripción general de MMM
1. ¿Qué es MMM?
  MMM (administrador de replicación maestro-maestro para MySQL, administrador de replicación maestro-maestro de MySQL) es un conjunto de programas de secuencias de comandos que admiten la conmutación por error de maestro dual y la administración diaria de maestro dual. MMM está desarrollado en lenguaje Perl, y principalmente monitorea y administra la replicación MySQL Master-Master (dual-master) Aunque se llama replicación dual-master, solo un maestro puede escribir al mismo tiempo en el negocio, y el otro copia de seguridad El maestro proporciona un servicio de lectura parcial para acelerar el calentamiento del maestro en espera durante el cambio de maestro a maestro. Se puede decir que el programa de script MMM realiza la función de conmutación por error, por un lado, y por otro lado, su interno adicional Las herramientas también pueden realizar el equilibrio de carga de lectura de varios esclavos.


2. Escenarios de aplicación
 MMM proporciona métodos automáticos y manuales para eliminar la ip virtual de un servidor con un alto retraso de replicación en un grupo de servidores.Al mismo tiempo, también puede realizar copias de seguridad de datos y realizar sincronización de datos entre dos nodos. Dado que MMM no puede garantizar por completo la consistencia de los datos, MMM es adecuado para escenarios que no requieren una alta consistencia de los datos pero que desean garantizar la disponibilidad del negocio en la mayor medida posible. Para aquellas empresas que tienen altos requisitos de consistencia de datos, no se recomienda adoptar una arquitectura de alta disponibilidad como MMM.
 

3. Características de MMM
MMM es un conjunto de scripts flexibles
implementados en base al lenguaje perl,
utilizados para monitorear y conmutar por error la replicación mysql,
administrar la configuración de la replicación MySQL Master-Master
4. Descripción de la arquitectura de alta disponibilidad de MMM


 

mmm_mon: proceso de monitoreo, responsable de todo el trabajo de monitoreo, determinando y procesando todas las actividades del rol del nodo. Este script debe ejecutarse en la máquina supervisora.
mmm_agent: el proceso del agente que se ejecuta en cada servidor MySQL, completa el trabajo de la sonda de monitoreo y realiza configuraciones simples de servicio remoto. Este script debe ejecutarse en la máquina supervisada.
mmm_control: un script simple que proporciona comandos para administrar el proceso mmm_mond.
El lado de supervisión de mysql-mmm proporcionará varias IP virtuales (VIP), incluida una VIP grabable y varias VIP legibles. A través de la gestión de supervisión, estas IP se vincularán al MySQL disponible. Cuando la máquina falla, el supervisor migrará la VIP a otro MySQL.
 

5. Usuario y Autorización

  Durante todo el proceso de monitoreo, es necesario agregar yogur de autorización relevante a MySQL para que MySQL pueda respaldar el mantenimiento de la máquina de monitoreo. Los usuarios autorizados incluyen un usuario mmm_monitor y un usuario mmm_agent. Si desea utilizar la herramienta de copia de seguridad MMM, también debe agregar un usuario mmm_tools.
 

2. Entorno del caso
1. Configuración del servidor


 

2. Entorno de servidor
systemctl detener firewalld && systemctl desactivar firewalld
setenforce 0
 

3 Modifique el nombre de host
hostnamectl set-hostname master1
su
 

maestro1 maestro2 esclavo1 esclavo2 monitor

3. Implementación del caso
1. Cree una arquitectura MySQL multimaestro y multiesclavo
(1) Instale mysql en los nodos maestro1, maestro2, esclavo1 y esclavo2
(2) Modifique el archivo de configuración de maestro1
[cliente]
puerto = 3306
carácter predeterminado- set=utf8
socket=/usr /local/mysql/mysql.sock
 
[mysql]
puerto = 3306
default-character-set=utf8
socket=/usr/local/mysql/mysql.sock
auto-rehash
 
[mysqld]
usuario =
mysqlbasedir =/usr/local/mysql
datadir=/usr/local/mysql/data
port=3306
character-set-server=utf8
pid-file=/usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/ mysql.sock
server-id= 1
log-error=/usr/local/mysql/data/mysql_error.log
general_log=ON
general_log_file=/usr/local/mysql/data/mysql_general.log
slow_query_log=ON
slow_query_log_file=mysql_slow_query.log
long_query_time=5
binlog-ignore-db=mysql,information_schema
log_bin=mysql_bin
log_slave_updates=true
sync_binlog=1
innodb_flush_log_ at_trx_commit=1
auto_increment_increment=2
auto_increment_offset =1
 
 
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES

reiniciar mysqld

systemctl reiniciar mysqld
 

Descripción de parámetros

......
server-id = 1
#El server-id de cada host Mysql no puede ser el mismo
log-error=/usr/local/mysql/data/mysql_error.log
#Error log
general_log=ON
#General query log
general_log_file= /usr/local/mysql/data/mysql_general.log
slow_query_log=ON
#Registro de consultas lentas
slow_query_log_file=mysql_slow_query.log
long_query_time=5
binlog-ignore-db=mysql,information_schema
#No es necesario sincronizar el nombre de la biblioteca
log_bin=mysql_bin
#Abrir registro binario Para la replicación de datos maestro-esclavo
log_slave_updates=true
#Permitir que el esclavo escriba en su propio registro binario al copiar datos del maestro
sync_binlog=1
#"Configuración doble 1", MySQL se sincronizará con el disco cada vez que se escriba el registro binario a    
innodb_flush_log_at_trx_commit =1
#"Configuración doble 1", MySQL escribirá los datos almacenados en caché en el archivo de registro cada vez que se confirme la transacción y los vaciará en el disco
auto_increment_increment=2
#Cuántos campos de incremento automático se incrementan a la vez
auto_increment_offset=1
#Valor inicial de los campos de incremento automático

(3) Modifique los otros tres mysql y reinicie el servicio.
Copie el archivo de configuración en los otros tres servidores de bases de datos y reinicie el servidor mysql.

Nota: El ID del servidor en el archivo de configuración no puede ser el mismo y debe modificarse

(4) Configure la replicación maestro-maestro, y los dos servidores maestros se replican entre sí
① Ejecute los permisos otorgados al esclavo en ambos servidores maestros, y no necesita ejecutar en el servidor esclavo

servidor maestro1 (192.168.10.20

mysql> otorgar esclavo de replicación en *.* a 'replication'@'192.168.10.%' identificado por '123456';
mysql> privilegios de vaciado;
 
mysql> mostrar el estado del maestro;
+------------------------+----------+--------------+---- ----------------------+-----------------
| Archivo | Posición | Binlog_Do_DB | Binlog_Ignorar_DB | Ejecutado_Gtid_Se
+------------------+----------+--------------+--- ------------------------+-----------------
| mysql_bin.000001 | 1023 | | mysql,información_esquema |                 
+------------------------+----------+--------------+---- ----------------------+-----------------
1 fila en conjunto (0.00 seg)
master2 服务器(192.168.10.30)

mysql> otorgar esclavo de replicación en *.* a 'replication'@'192.168.10.%' identificado por '123456';
mysql> privilegios de vaciado;
 
mysql> mostrar el estado del maestro;
+------------------------+----------+--------------+---- ----------------------+-----------------
| Archivo | Posición | Binlog_Do_DB | Binlog_Ignorar_DB | Ejecutado_Gtid_Se
+------------------+----------+--------------+--- ------------------------+-----------------
| mysql_bin.000001 | 1023 | | mysql,información_esquema |                 
+------------------------+----------+--------------+---- ----------------------+-----------------
1 fila en conjunto (0.00 seg)
② 在maestro1 上配置同步

192.168.10.20

cambiar maestro a master_host='192.168.10.30', master_user='replication', master_password='123456', master_log_file='mysql_bin.000001', master_log_pos=1023; iniciar esclavo; mostrar estado esclavo\G; #Ver hilos IO
 
y SQL ¿Es SÍ, y el desplazamiento de posición es correcto? ③ Configure la sincronización en master2


192.168.10.30

cambiar maestro a master_host='192.168.10.20', master_user='replication', master_password='123456', master_log_file='mysql_bin.000001', master_log_pos=1023; iniciar esclavo; mostrar estado esclavo\G; #Ver hilos
 
IO
y
SQL ¿Es SÍ, y el desplazamiento de posición es correcto?
(5) Configure la replicación maestro-esclavo y haga
① servidor esclavo1 en dos servidores esclavos

192.168.10.40

cambiar maestro a master_host='192.168.10.20',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=1023;

iniciar esclavo;
mostrar el estado del esclavo\G;
 

② servidor esclavo2

192.168.10.50

cambiar maestro a master_host='192.168.10.20',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=1023;

iniciar esclavo;
mostrar el estado del esclavo\G;
 

(6) Pruebe la sincronización maestro-maestro y maestro-esclavo
2. Instale y configure MySQL-MMM
(1) Instale MySQL-MMM en todos los servidores
Nota: Si no hay ningún software anterior en el almacén local, debe configurar la fuente en línea almacén para cada servidor primero.

yum -y instalar epel-release && yum -y instalar mysql-mmm*
 

(2) Configurar MySQL-MMM en master1
192.168.10.20

[root@master1 ~]# cd /etc/mysql-mmm/
[root@master1 mysql-mmm]# cp mmm_common.conf mmm_common.conf.bak
#Antes de modificar el archivo de configuración, primero haga una copia de seguridad
[root@master1 mysql-mmm] # vim mmm_common.conf
 
active_master_role escritor
 
<host predeterminado>
    cluster_interface ens33
    pid_path /run/mysql-mmm-agent.pid
    bin_path /usr/libexec/mysql-mmm/
    replication_user replication
##Especifique los usuarios de replicación maestro-maestro y maestro-esclavo, para sea ​​coherente con la anterior
    replication_password 123456
    agent_user mmm_agent
##Especifique el nombre de usuario del proceso del agente de supervisión
    agent_password 123456
</host>
 
<host db1>
    ip 192.168.10.20
    mode master
    peer db2
##peer set peer database
</host>
 
<host db2>
    ip 192.168.10.30
    mode master
    peer db1
</host>
 
<host db3>
    ip 192.168.10.40
    mode slave
</host>
 
<host db4>
    ip 192.168.10.50
    modo esclavo
</host>
 
<role escritor>
    hosts db1, db2
    ips 192.168.10.200
##Configurar para escribir
    modo VIP exclusivo
#Solo un host puede escribir modo de operación
</role>
 
<role reader>
    hosts db3, db4
    ips 192.168 .10.201 , 192.168.10.202
##Establecer lectura
    modo VIP equilibrado
##Múltiples hosts esclavos pueden realizar el modo de operación de lectura
</role>

(3) Copie el archivo de configuración a los otros 4 hosts.
El contenido del archivo de configuración es el mismo para todos los hosts.

scp mmm_common.conf [email protected]:/etc/mysql-mmm/
scp mmm_common.conf [email protected]:/etc/mysql-mmm/
scp mmm_common.conf [email protected]:/etc/mysql-mmm /
scp mmm_common.conf [email protected]:/etc/mysql-mmm/
(4) Modificar el archivo de configuración del agente mmm_agent.conf
master1 de todos los servidores de base de datos

[root@master1 ~]# vim /etc/mysql-mmm/mmm_agent.conf
 
include mmm_common.conf
this db1
##Cambiar a db1/db2/db3/db4 según diferentes hosts, la configuración predeterminada es db1, por lo que master1 no necesita ser modificado
 

maestro2

[root@master2 ~]# vim /etc/mysql-mmm/mmm_agent.conf
 
incluye mmm_common.conf
este db2
slave1

[root@slave ~]# vim /etc/mysql-mmm/mmm_agent.conf
 
incluye mmm_common.conf
este db3
esclavo 2

[root@slave2 ~]# vim /etc/mysql-mmm/mmm_agent.conf
 
incluye mmm_common.conf
este db4
 

(5) Modifique el archivo de configuración de monitoreo mmm_mon.conf en el servidor de monitoreo del servidor de monitoreo
(192.168.10.90)

[root@monitor ~]# vim /etc/mysql-mmm/mmm_mon.conf 
 
include mmm_common.conf
 
<monitor>
    ip 127.0.0.1
    pid_path /run/mysql-mmm-monitor.pid
    bin_path /usr/libexec/mysql-mmm
    status_path /var/lib/mysql-mmm/mmmm_mond.status
    ping_ips 192.168.10.20,192.168.10.30, 192.168.10.40, 192.168.10.50.50 ## Especifique la ip auto_set_online     10 ##
especifica de todos los servidores de base de datos     . kill_host_bin no existe de forma predeterminada, aunque el monitor     # arrojará una advertencia sobre su ausencia. Consulte la sección 5.10 "     Funcionalidad de matar host #" en la documentación en PDF.     #


 




    # kill_host_bin /usr/libexec/mysql-mmm/monitor/kill_host
    #
</monitor>
 
<host default>
    monitor_user mmm_monitor
##Especifique el nombre de usuario de mmm_monitor
    monitor_password 123456
##Especifique la contraseña de mmm_monitor
</host>
 
debug 0

(6) Autorizar mmm_agent (proceso de agente) en todas las bases de datos
Todas las bases de datos ejecutan las siguientes declaraciones

otorgar súper, cliente de replicación, proceso en *.* a 'mmm_agent'@'192.168.10.%' identificado por '123456';
privilegios de vaciado;
 

 (7) Otorgar
cliente de replicación en *.* a 'mmm_monitor'@'192.168.10.%' identificado por '123456',
privilegios de vaciado;
 


(8) Iniciar mysql-mmm-agent systemctl iniciar mysql-mmm-agent.service && systemctl habilitar mysql-mmm-agent.service en todos los servidores de bases de datos
 


(9) Iniciar mysql-mmm-monitor systemctl iniciar mysql-mmm-monitor.service && systemctl habilitar mysql-mmm-monitor.service en el servidor de supervisión
 

(10) Pruebe el clúster en el servidor de monitoreo
① Vea el estado de cada nodo

[root@monitor ~]#mmm_control show
  db1(192.168.10.20) maestro/EN LÍNEA. Roles: escritor (192.168.10.200)
  db2 (192.168.10.30) maestro/EN LÍNEA. Roles: 
  db3(192.168.10.40) esclavo/EN LÍNEA. Funciones: lector (192.168.10.202)
  db4 (192.168.10.50) esclavo/EN LÍNEA. Funciones: lector (192.168.10.201)
 

② Verifique si la función de monitoreo es perfecta

[root@monitor ~]#mmm_control comprueba todos
los ping de db4 [último cambio: 2021/11/04 16:13:20] OK
db4 mysql [último cambio: 2021/11/04 16:13:20] OK
db4 rep_threads [último cambio: 2021/11/04 16:13:20] OK
db4 rep_backlog [último cambio: 2021/11/04 16:13:20] OK: Backlog is null
db2 ping [último cambio: 2021/11/04 16:13 :20] OK
db2 mysql [último cambio: 2021/11/04 16:13:20] OK
db2 rep_threads [último cambio: 2021/11/04 16:13:20] OK
db2 rep_backlog [último cambio: 2021/11/ 04 16:13:20] OK: Backlog is null
db3 ping [último cambio: 2021/11/04 16:13:20] OK
db3 mysql [último cambio: 2021/11/04 16:13:20] OK
db3 rep_threads [último cambio: 2021/11/04 16:13:20] OK
db3 rep_backlog [último cambio: 2021/11/04 16:13:20] OK: Backlog is null
db1 ping [último cambio: 2021/11/04 16:13:20] OK
db1 mysql [último cambio: 2021/11/ 04 16:13:20] OK
db1 rep_threads [último cambio: 2021/11/04 16:13:20] OK
db1 rep_backlog [último cambio: 2021/11/04 16:13:20] OK: Backlog es nulo
 

③ Designar el anfitrión vinculado al VIP

[root@monitor ~]#mmm_control move_role escritor db2
OK: El rol 'escritor' se ha movido de 'db1' a 'db2'. ¡Ahora puede esperar un tiempo y verificar la información de nuevos roles!
[root@monitor ~]#mmm_control show
  db1(192.168.10.20) maestro/EN LÍNEA. Funciones: 
  db2(192.168.10.30) maestro/EN LÍNEA. Funciones: escritor (192.168.10.200)
  db3 (192.168.10.40) esclavo/EN LÍNEA. Funciones: lector (192.168.10.202)
  db4 (192.168.10.50) esclavo/EN LÍNEA. Funciones: lector (192.168.10.201)

[root@monitor ~]#mmm_control move_role escritor db1
OK: El rol 'escritor' se ha movido de 'db2' a 'db1'. ¡Ahora puede esperar un tiempo y verificar la información de nuevos roles!
[root@monitor ~]#mmm_control show
  db1(192.168.10.20) maestro/EN LÍNEA. Roles: escritor (192.168.10.200)
  db2 (192.168.10.30) maestro/EN LÍNEA. Roles: 
  db3(192.168.10.40) esclavo/EN LÍNEA. Funciones: lector (192.168.10.202)
  db4 (192.168.10.50) esclavo/EN LÍNEA. Funciones: lector (192.168.10.201)
 

3. Prueba de fallas
(1) Simule el tiempo de inactividad y la recuperación del maestro
① Detenga el servicio mysql del maestro1

② Verifique el estado de deriva VIP

monitor

[root@monitor ~]#mmm_control show
  db1(192.168.10.20) master/HARD_OFFLINE. Funciones: 
  db2(192.168.10.30) maestro/EN LÍNEA. Funciones: escritor (192.168.10.200)
  db3 (192.168.10.40) esclavo/EN LÍNEA. Funciones: lector (192.168.10.202)
  db4 (192.168.10.50) esclavo/EN LÍNEA. Funciones: lector (192.168.10.201)
 

VIP se desvió con éxito a master2, y master1 muestra HARD_OFFLINE

③ Reinicie el servicio mysql de master1

maestro1

systemctl iniciar mysqld
 

Después de que master1 se recupere, el VIP todavía está en master2 y no ha sido transferido a master1

(2) Simule el tiempo de inactividad y la recuperación del servidor esclavo
① Detenga el servicio mysql de slave1

esclavo1

systemctl detener mysqld
 

② Verifique el estado de deriva VIP

monitor

[root@monitor ~]#mmm_control show
  db1(192.168.10.20) maestro/EN LÍNEA. Funciones: 
  db2(192.168.10.30) maestro/EN LÍNEA. Funciones: escritor (192.168.10.200)
  db3 (192.168.10.40) esclavo/HARD_OFFLINE. Roles: 
  db4(192.168.10.50) esclavo/EN LÍNEA. Funciones: lector (192.168.10.201), lector (192.168.10.202)
 

El VIP correspondiente a Slave1 es asumido por Slave2

③ Reinicie el servicio mysql de slave1

esclavo1

systemctl iniciar mysqld
 

④ Comprobar si se ha restaurado el esclavo 1

monitor

[root@monitor ~]#mmm_control show
  db1(192.168.10.20) maestro/EN LÍNEA. Funciones: 
  db2(192.168.10.30) maestro/EN LÍNEA. Roles: escritor (192.168.10.200)
  db3 (192.168.10.40) esclavo/AWAITING_RECOVERY. Roles: 
  db4(192.168.10.50) esclavo/EN LÍNEA. Funciones: lector (192.168.10.201), lector (192.168.10.202)

[root@monitor ~]#mmm_control show
  db1(192.168.10.20) maestro/EN LÍNEA. Funciones: 
  db2(192.168.10.30) maestro/EN LÍNEA. Funciones: escritor (192.168.10.200)
  db3 (192.168.10.40) esclavo/EN LÍNEA. Roles: 
  db4(192.168.10.50) esclavo/EN LÍNEA. Funciones: lector (192.168.10.201), lector (192.168.10.202)

[root@monitor ~]#mmm_control show
  db1(192.168.10.20) maestro/EN LÍNEA. Funciones: 
  db2(192.168.10.30) maestro/EN LÍNEA. Funciones: escritor (192.168.10.200)
  db3 (192.168.10.40) esclavo/EN LÍNEA. Funciones: lector (192.168.10.202)
  db4 (192.168.10.50) esclavo/EN LÍNEA. Funciones: lector (192.168.10.201)
 

Después de un período de entrega, el esclavo 1 vuelve a ser VIP y continúa trabajando.

(3) Prueba de cliente
① Autorizar el inicio de sesión para la dirección del servidor del monitor en el servidor master1

otorgar todo en *.* a 'test'@'192.168.10.90' identificado por '123456';
privilegios de vaciado;
 

② Inicie sesión con VIP en el servidor del monitor

yum -y install mariadb-server mariadb
systemctl start mariadb.service && systemctl enable mariadb.service
mysql -utest -p123456 -h 192.168.10.200 #Si puede iniciar sesión, tiene éxito
 

③ El cliente crea datos y prueba la sincronización

monitor

Supongo que te gusta

Origin blog.csdn.net/zl965230/article/details/130803444
Recomendado
Clasificación