Automatizando a configuração e configuração da replicação mestre / mestre em dois servidores

3

Estou no meio de escrever um script para automatizar a configuração da replicação do MySQL entre dois servidores (replicação mestre / mestre) e estava procurando alguns conselhos sobre algumas coisas relacionadas ao MySQL.

O objetivo é basicamente permitir que o mesmo script seja executado em ambos os servidores (provavelmente apenas solicitando o IP do outro servidor mestre) e configurá-lo completamente no MySQL. A maior parte é muito fácil, mas alguns dos valores de configuração são exclusivos do servidor. Os servidores são praticamente idênticos (incluindo credenciais do MySQL)

O arquivo /etc/my.cnf tem duas configurações únicas para o servidor, há um server-id e um incremento automático de incremento .

O server-id precisa ser iniciado em qualquer ordem ou ser consecutivo? Porque se não, então eu estava indo apenas para pegar o valor numérico do hostname do servidor (é algo como appdb-stg-m01 , então eu poderia pegar o 01, ou qualquer número, uma vez que será único), ou até mesmo o último octeto o endereço IP dos servidores ... Isso seria suficiente?

Em seguida, para o incremento automático de deslocamento , isso não pode ser definido da mesma maneira em ambos os servidores? Eu tenho isso definido em 1 no primeiro mestre, então 2 no outro. Eu obtive esses valores de alguns tutoriais on-line, mas eles não explicaram por que eles eram diferentes.

Então, para os valores usados no comando CHANGE MASTER TO ... Ele precisa do MASTER_LOG_FILE e do MASTER_LOG_POS ...

Podemos supor que esses servidores são relativamente novos, sem bancos de dados existentes neles. Então eu estava pensando que apenas redefinir o MASTER_LOG_FILE para mysql-bin.000001 seria suficiente, mas, em seguida, id precisa excluir o outro mysql-bin.? de / var / lib / mysql , bem como em /var/lib/mysql/mysql-bin.index . Isso seria suficiente?

A única outra configuração que eu estou um pouco atrasada seria o MASTER_LOG_POS ... Existe uma maneira de definir isso eu mesmo? Eu estou tentando tornar isso o menos complicado possível, então conectar-se ao outro servidor mysql e olhar para a saída de SHOW MASTER STATUS é algo que eu gostaria de evitar. Existe uma maneira de redefini-lo para 313 ?

Obrigado!

    
por Justin 11.05.2016 / 02:50

1 resposta

2

Eu estava tentando comentar, mas a resposta estava começando a ficar longa.

A idéia geral que temos de ter em mente com um relacionamento mestre-mestre do MySQL, é que com a replicação funcionando, temos agora dois servidores potencialmente gravando nos mesmos registros ao mesmo tempo, ou em momentos diferentes.

Então, tendo isso em mente, auto-increment-offset precisa ser diferente - eles têm que ser 1 e 2 porque a ideia é gerar números de registros diferentes ( ou seja, sem conflitos). Assim, os registros criados por um dos mestres serão pares e os outros ímpares e, portanto, não poderão criar um número de registro conflitante. Então, por exemplo, o primeiro mestre gera registros 1,3,5,7, e assim por diante, e o segundo, 2,4,6,8 ...

No que toca o ID do servidor, eles só precisam ser diferentes. Tradicionalmente, as pessoas usam 1 e 2, mas isso não é um requisito. Eu acho que eles não podem ser 0, não tenho certeza.

Finalmente, como para MASTER_LOG_FILE e MASTER_LOG_POS, você pode tentar assumir os valores padrão; no entanto, nunca é a melhor das ideias assumindo coisas e, mais importante, você pode querer reutilizar o roteamento para estabelecer novamente o relacionamento mestre-mestre em caso de qualquer evento e, como tal, em nome da reutilização de código, seria muito mais útil para se conectar ao MySQL remoto e obter os valores apropriados.

Para outro ângulo na automação de coisas, você tem aqui o link para a página do módulo Ansible mysql_replication

E aqui uma antiga resposta minha que lhe dará uma pista sobre o Ansible Linux equivalente ao remoting" one-to-many "do PowerShell

    
por 11.05.2016 / 08:59