Docker crea un clúster maestro-esclavo de MySQL

Use Docker para construir un clúster de MySQL con un maestro y un esclavo. Se usa la imagen MySQL de la versión 8. Si no es la versión 8, algunos comandos de este artículo no serán válidos y el sistema host será arbitrario. Un maestro-un-esclavo es lo mismo que el proceso de un maestro-esclavo múltiple, excepto que hay algunos contenedores más y necesita conectarse al maestro varias veces

inserte la descripción de la imagen aquí
planificación

puerto Role
3307 maestro
3308 esclavo

tren de pensamiento
inserte la descripción de la imagen aquí

preparar de antemano

Asegúrese de que el host de Linux tenga Docker instalado. Luego, descargue la imagen de MySQL al local, primero puede ir a Docker Hub para encontrar la versión correspondiente, luego copiar el comando de descarga de la versión correspondiente en la máquina host y finalmente esperar a que se complete la descarga.
inserte la descripción de la imagen aquí

Construcción externa

  1. Obtener el archivo de configuración de MySQL
    Puede iniciar un contenedor de MySQL a voluntad y luego copiar el contenido del directorio /etc a la máquina host, que es fácil de modificar.
    Por ejemplo: Cree una carpeta en el directorio de inicio etc3307/y luego use el comando docker cp MySQL容器Id/etc/ ~/etc3007/
    En este momento , habrá información del archivo de configuración de MySQL en este directorio.

  2. Modificar el archivo de configuración de MySQL

    • Copie el archivo de configuración: etc3307copie el directorio cp -r ~etc3307/ ~/etc3308/, y luego habrá dos directorios debajo del directorio de inicio, ect3307el archivo de configuración debajo del directorio se usa como la configuración del maestro, y etc3308el directorio se usa como la configuración debajo del esclavo
    • Use vim para modificar la configuración en los dos directorios my.cnfy [mysqld]agregue el siguiente contenido debajo de ¡Observe la diferencia!
      #[必须]从服务器唯一ID  数字任意,各个主机间id不能相同!!!
      server-id=1
      #[可选] 0(默认)表示读写(主机),1表示只读(从机) 
      read-only=0
      
  3. Inicie el contenedor, monte el directorio del host
    e inicie el host 3307

docker run --name mysql-master --privileged=true -v ~/etc3307/:/etc/ -p 3307:3306 -e MYSQL_ROOT_PASSWORD=你的主机密码 -d 镜像id

enciende la esclava 3308

docker run --name mysql-slave --privileged=true -v ~/etc3308/:/etc/ -p 3308:3306 -e MYSQL_ROOT_PASSWORD=你的从机密码 -d 镜像id
  1. Cree una red para que los dos contenedores puedan acceder entre sí. Nota: El puerto de acceso entre contenedores es el 3306
  • Crear una red docker network inspect my-bridge(my-bridge es un nombre personalizado)
  • Agregar el contenedor a la red docker network connect my-bridge mysql-slavesignifica docker network connect my-bridge mysql-master
    agregar el esclavo a la red y el host a la red. El formato del comando esdocker network connect 网络名 容器名
  • Use el comando docker network inspect my-bridgepara verificar si la unión es exitosa

En este punto, se ha construido el entorno externo. Actualmente, los dos servidores MySQL pueden ejecutarse de forma independiente y los contenedores pueden acceder entre sí. La identificación del servidor en el archivo de configuración es diferente.

configuración interna

Establecer una relación maestro-esclavo entre dos servicios SQL

  1. Conecte dos servidores MySQL (preste atención al firewall) Por supuesto, docker exec -it 容器id /bin/bashtambién puede usar la línea de comando para conectarse a los contenedores respectivos.

Configuración del host 3307 :

--执行以下命令
-- 创建一个专门用来在从服务器使用从而复制主服务器数据的用户
CREATE USER '用户名'@'%' IDENTIFIED WITH mysql_native_password BY '用户密码';
-- 为此用户授予REPLICATION权限
GRANT REPLICATION SLAVE ON *.* TO '此用户名'@'%';
-- 刷新
flush privileges;

Luego verifique el estado actual de su registro binlog show master status;y recuerde el archivo que se copiará y la posición inicial
inserte la descripción de la imagen aquí

Configuración del esclavo 3308 :
1.

--执行以下命令
CHANGE REPLICATION SOURCE TO SOURCE_HOST='mysql-master', SOURCE_USER='用户名', SOURCE_PASSWORD='次用户密码', SOURCE_LOG_FILE='上面要记住的主机日志文件 binlog.000003', SOURCE_LOG_POS=上面要记住的起始位置335;

-- 开启从模式,连接主机master
start replica ;
  1. Verifique el estado de la conexión (si la configuración es exitosa) show replica status ;
    inserte la descripción de la imagen aquí
    Si hay un problema, puede usar docker logs 容器idel mensaje de error de registro correspondiente para saber dónde está el error.

Ahora que la configuración está completa, cualquier operación de escritura en el maestro se sincronizará inmediatamente con el esclavo

Aviso:

  • Si el esclavo no está configurado en solo lectura, el esclavo aún puede escribir, pero la escritura del maestro se sincronizará con el esclavo y la escritura del esclavo no sincronizará con el maestro.
  • Una vez que el host está inactivo, todo el clúster maestro-esclavo no podrá escribir. No existe un clúster maestro-esclavo de Redis que pueda monitorearse de manera similar al mecanismo centinela, y el maestro se bloquea sobre el esclavo. Un solo maestro y varios esclavos no pueden lograr una alta disponibilidad.
  • Si desea lograr una alta disponibilidad, puede configurar un clúster multimaestro y multiesclavo. El maestro escribirá datos entre sí y los datos se transferirán entre el maestro y el esclavo. Cuando un maestro está inactivo, los otros maestros y sus esclavos aún pueden funcionar normalmente.
  • Si desea operar el clúster, esta situación nativa es perceptible. Por ejemplo: quiero escribir datos en el maestro y leer datos del esclavo, es decir, leer y escribir la separación, por lo que tengo que cambiar manualmente la base de datos durante la operación, así como a nivel de código. Si queremos lograr el desconocimiento, necesitamos una 反向代理herramienta que pueda hacerlo, solo operamos una base de datos, y este código nos ayuda a usar el servidor correspondiente. Por lo tanto, los clústeres generalmente deben usarse con herramientas MyCatcomo ShardingSphere.

Supongo que te gusta

Origin blog.csdn.net/m0_52889702/article/details/128386931
Recomendado
Clasificación