Configuração mestre-escravo do Mysql baseada no Docker

 Plano de fundo da arquitetura mestre-escravo

  • Segurança de dados, backup de dados pode ser realizado;
  • Separação de leitura e escrita, para a maioria dos sistemas empresariais, mais leitura e menos escrita.Se a pressão de acesso for muito alta, a solicitação pode ser distribuída para o servidor escravo, aliviando assim a pressão de acesso ao banco de dados;
  • Failover (alta disponibilidade), quando o nó primário ficar inativo, ele passará do serviço para o nó primário para continuar prestando serviços.

Princípio de sincronização

A arquitetura mestre-escravo do Mysql é geralmente implementada por meio de logs de log binário, que registram todas as operações da biblioteca mestre. Após a biblioteca escrava e a biblioteca principal estabelecerem uma conexão TCP, a biblioteca principal é solicitada a transferir o log binário.Neste momento, outro thread de despejo da biblioteca principal transfere o log binário para a biblioteca principal. O log binlog lido da biblioteca é gravado em seu próprio relaylog e outro thread lê o conteúdo no relaylog para reprodução.

Primeiro, os benefícios da construção do Docker

  • Os recursos são limitados e são necessários mais hosts;
  • A construção da máquina virtual requer configuração da máquina, e as etapas para instalar o mysql são complicadas;
  • Vários contêineres do Docker podem ser instalados e executados em uma máquina;
  • Os contêineres do Docker são independentes uns dos outros, têm seu próprio IP e não afetam uns aos outros;
  • O Docker é fácil de usar e inicia um contêiner em segundos;

2. Etapas de construção do Docker

2.1 Instale o mysql

docker pull mysql

Versão mais recente padrão

2.2 Inicie o contêiner mestre-escravo

Use a imagem msyql para iniciar o container e inicie os containers master e slave respectivamente;

  •  -p: porta do mapa
  • --name: Indica o nome do container
  • -e MYSQL_ROOT_PASSWORD: Configura a senha do mysql, parâmetro que deve ser configurado;
  • -d mysql Tag: Tag representa o id do espelho;
  • Mestre
docker run -p 3339:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 
-d mysql:latest
  • Escravo (de)
docker run -p 3340:3306 --name mysql-slave1 -e MYSQL_ROOT_PASSWORD=123456 
-d mysql:latest
  • A porta mapeada externamente do Master é 3339 e a porta mapeada externamente do Slave é 3340. Como os contêineres do docker são independentes uns dos outros, cada contêiner tem um IP independente, portanto, contêineres diferentes usando a mesma porta não entrarão em conflito.

Ferramenta de teste Navicat: Conexão bem-sucedida! 

 2.3 Configurar Mestre

1) Entre no recipiente

  • Digite através do comando docker exec -it mysql-master /bin/bash;
  • mysql-master: o nome ou id do container também funciona;

2) mudar de diretório

  • cd /etc/mysql

3) Edite o arquivo my.cnf

  • vim meu.cnf

 Se um erro for relatado,

bash: vim: command not found

Execute o seguinte comando,

  • apt-get install vim

Se ainda relatar um erro, você precisa atualizar o apt-get e executar o seguinte comando

Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package vim
  • apt-get update e, em seguida, execute a etapa anterior para concluir a instalação;

4 ) Adicione a seguinte configuração em my.cnf

[mysqld]

## 同一局域网内要唯一
server-id=100

## 开启二进制日志功能,可以随时取消
log-bin=mysql-bin

5) Reinicie o container mysql-master

  • docker reinicie o mysql-master
  • docker exec -it mysql-master /bin/bash:运行mysql

6) Configure a biblioteca escrava e sincronize os dados

  • Digite mysql: mysql -u root -p, digite a senha;
  • criar usuário 'slave'@'%' identificado por '123456';
  • concede escravo de replicação, cliente de replicação em *.* para 'slave'@'%';
  • liberar privilégios; atualizar

sucesso!

Formato de sintaxe: CREATE USER <nome do usuário> [ IDENTIFIED ] BY [ PASSWORD ] <password>

<nome de usuário>

Especifica a criação de uma conta de usuário no formato 'user_name'@'host_name'. Aqui user_nameestá o nome do usuário, que host_nameé o nome do host, ou seja, o nome do host onde o usuário se conecta ao MySQL. Se durante o processo de criação for fornecido apenas o nome de usuário da conta, mas o nome do host não for especificado, o nome do host será padronizado como "%", indicando um grupo de hosts.

SENHA Senha, opcional, é usada para especificar a senha de hash, ou seja, se a senha for definida em texto não criptografado, a palavra- PASSWORDchave precisa ser ignorada.

   IDENTIFICADO POR

É usado para especificar a senha correspondente à conta do usuário. Se a conta do usuário não tiver senha, esta cláusula pode ser omitida.
<senha> Especifica a senha da conta de usuário, após a IDENTIFIED BYpalavra-chave ou palavras- PASSWOEDchave. O valor de senha fornecido pode ser um texto simples consistindo apenas de letras e números, ou um valor de hash obtido pela função PASSWORD().

Formato de sintaxe: conceder replicação

Para o usuário MySQL recém-criado, ele deve ser autorizado, e a instrução GRANT pode ser usada para realizar a autorização do usuário recém-criado.

  • replicação slave: Com esta permissão, você pode visualizar o servidor slave e ler o log binário do servidor master, somente concedendo esta permissão a replicação pode realmente funcionar;
  • Cliente de replicação: Com esta permissão, você pode consultar o status do servidor mestre e do servidor escravo, somente concedendo essa permissão a replicação pode realmente funcionar;

2.4 Configurar Escravo (escravo)

Igual à configuração Maser (principal), omitida antes!

1) Adicione o arquivo de configuração do Slave my.cnf

[mysqld]

## 同一局域网内要唯一
server-id=101

## 开启二进制日志功能,以备份Slave作为其他Slave的Master时使用
log-bin=mysql-slave-bin

## 配置中继日志
relay_log=edu-mysql-relay-bin

2) Reinicie o mysql-slave1

2.5 Conecte Mestre e Escravo

1) Digite mysql-master

Executando um pedido:

show master status;

Os valores dos campos Arquivo e Posição serão utilizados posteriormente;

2) Digite mysql-slave1

Executando um pedido:

change master to master_host='172.17.0.3',master_user='slave',
master_password='123456',master_port=3306,
master_log_file='mysql-bin.000005',
master_log_pos=0,master_connect_retry=10,
get_master_public_key=1;
  • master_host: O endereço do Master, que é o IP oposto do container, que pode ser visualizado com o seguinte comando
docker inspect --format='{
    
    {.NetworkSettings.IPAddress}}' 容器名称|容器id

  • master_port: O número da porta do Master, que é o número da porta do container;
  • master_user: o usuário usado para sincronização de dados;
  • master_password: a senha usada para sincronizar o usuário;
  • master_log_file: Especifica de qual arquivo de log o Slave começa a copiar os dados, ou seja, o valor do campo Arquivo mencionado acima;
  • master_log_pos: De qual Posição iniciar a leitura, ou seja, o valor do campo Posição mencionado acima;
  • master_connect_retry: Se a conexão falhar, o intervalo de repetição, a unidade é segundos, o padrão é 60 segundos;

Lembre-se de adicionar get_master_public_key=1, porque a criptografia RSA é necessária para transmitir senhas acima do mysql8.0.

Perceber:

Se você usar o IP do container ( master_host ) e PORT ( master_port ), ele deve ser substituído pelo IP do host e mapeado para uma porta externa, para evitar erros. por exemplo

 3) Visualize o status de sincronização mestre-escravo

  • Digite o terminal mysql no escravo para executar o comando:
show slave status \G;

  • Em circunstâncias normais, SlaveIORunning e SlaveSQLRunning são Não, porque o processo de replicação mestre-escravo não foi iniciado. Use o seguinte comando para iniciar a replicação mestre-escravo:
start slave

# 此外 若想关闭则 stop slave;即可
  • Consultar o status da replicação mestre-escravo novamente mostrar o status do escravo \G;

Tornou-se sim!

2.6 Solução de problemas de replicação mestre-escravo

Após usar start salve para habilitar a replicação mestre-escravo, se SlaveIORunning estiver sempre Conectando, significa que a replicação mestre-escravo sempre esteve conectada. Esta situação geralmente é causada pelos seguintes motivos, que podem ser descartados de acordo com o prompt Last_IO_Error.

1) Falha de rede 

  • Verifique ip, porta

2) A senha está incorreta

  • Verifique se o usuário a ser criado para sincronização e a senha do usuário estão corretos

3) pos não está certo

  • Verifique a posição do mestre

4) O problema da versão do mysql

  • mysql8.0 ou criptografia de senha superior, você precisa adicioná-lo ao conceder,
因为mysql8.0以上需要使用RSA加密来传输密码

2.7 Testar a replicação mestre-escravo

Crie um banco de dados no Master e verifique se o banco de dados existe no Slave

  • Mestre

  • Escravo

Acho que você gosta

Origin blog.csdn.net/Jiangtagong/article/details/123134137
Recomendado
Clasificación