Verifica as réplicas do mysql através do ssl

2

Depois de horas lutando para entender como os kits de ferramentas percona (2.1) pt-table-checksum funcionam, eu tento tentar você.

Situação

  • Execução da replicação do MySQL (Mestre-ativo: Mestre: passivo)
  • É necessário que o usuário escravo se conecte via SSL
  • pt-table-checksum não pode se conectar ao escravo

Problema

  • pt-table-checksum não funciona para mim com um usuário mysql "checksum" requerido por SSL

A ideia de uma solução

  • é usar pt-table-checksum no master ativo,
  • verificando um túnel via ssh conectado localmente ao MySQL-Slave,
  • com um usuário "checksum" não obrigado a usar SSL

Perguntas

  1. A soma de verificação da tabela pt (2.1) é realmente incapaz de se conectar via SSL?
  2. Como eu configuro a soma de verificação da tabela pt para conectar (somente) a um escravo não configurado internamente
  3. A opção DSNs poderia ser a solução?
  4. Em caso afirmativo: não consigo descobrir como funciona. Você poderia me colocar no caminho certo?
  5. Devo usar uma versão mais antiga ou maatkit? (porque lá eu posso configurar mestre / escravos na linha de comando)
  6. De forma alguma: Qual é a melhor prática para réplicas de soma de verificação em redes inseguras, com a soma de verificação de tabela pt não funcionando sobre SSL?

Com esperança:)

    
por Ruben 04.07.2012 / 13:08

2 respostas

4

Eu nunca tentei a replicação master-master, mas configurei conexões SSL com o checksum pt-table-checksum. Espero que minhas anotações abaixo possam ajudar a responder algumas de suas perguntas relacionadas ao SSL.

No meu caso, tenho replicação mestre-escravo configurada usando conexões SSL e estou usando o Percona Toolkit 2.1.2. Como a maneira de configurá-lo não era óbvia, achei que minhas anotações poderiam ajudá-lo a economizar tempo e esforço em sua situação. Abaixo está um exemplo de como eu obtive as conexões SSL trabalhando para as conexões pt-table-checksum para os servidores de banco de dados master e slave.

A chave é passar a informação de DSN (contendo as configurações de SSL) para o escravo explicitamente passando o arquivo de padrões (por exemplo, -F = / etc / my.cnf.percona) para o escravo usando o "- recursion-method dsn "configuração. Pelo que li no site da Percona e revisando o código de soma de tabela pt-pt, as informações de DSN não são copiadas de uma conexão para a próxima em versões posteriores do Percona Toolkit (começando com 2.0, acredito). Então, você tem que configurar a conexão escrava separadamente do mestre.

Passar informações DSN para a conexão escrava usando:
- método de recuperação dsn="D = percona, t = dsns, F = / etc / my.cnf.percona"

Suposições:
uma. A conta de banco de dados "percona" tem privilégios adequados para a soma de verificação da tabela pt de Percona. Recomendo o uso de "REQUIRE SSL" para garantir que a conta seja necessária para usar conexões SSL.
b. O escravo e o mestre estão configurados para usar conexões SSL

Observação: todas as etapas abaixo são feitas no mestre.

(1) Para passar as configurações SSL para a conexão DBI (ou seja, a configuração DSN), crie um arquivo my.cnf separado especificamente para o software percona.

    /etc/my.cnf.percona
    [client]
    ssl=1
    user=percona
    password=xxxxxxxxx
    ssl-capath=/etc/mysql/ca/crt

    The /etc/my.cnf.percona file will be used to set up the SSL connections to both the master and slave.

    Make sure to set the ownership & permissions on the file since it contains a password:
    chown root:root /etc/my.cnf.percona (if it's not already owned by root or a system account)
    chmod 0600 /etc/my.cnf.percona

(2) Teste as configurações de /etc/my.cnf.percona

  
    # mysql --defaults-file=/etc/my.cnf.percona --host slave.domain.com
    mysql> \s
    --------------
    mysql  Ver 14.14 Distrib 5.5.23, for Linux (x86_64) using readline 5.1

    Connection id:      162
    Current database:   
    Current user:       [email protected]
    SSL:            Cipher in use is DHE-RSA-AES256-SHA
    Current pager:      stdout
    Using outfile:      ''
    Using delimiter:            ;
    Server version:     5.5.23-log MySQL Community Server (GPL)
    Protocol version:           10
    Connection:             slave.domain.com via TCP/IP
    Server characterset:    latin1
    Db     characterset:    latin1
    Client characterset:    utf8
    Conn.  characterset:    utf8
    TCP port:               3306
    Uptime:         2 days 2 hours 8 min 7 sec


    # mysql --defaults-file=/etc/my.cnf.percona --host master.domain.com
    mysql> \s
    --------------
    mysql  Ver 14.14 Distrib 5.5.23, for Linux (x86_64) using readline 5.1

    Connection id:      581433
    Current database:   
    Current user:       [email protected]
    SSL:            Cipher in use is DHE-RSA-AES256-SHA
    Current pager:      stdout
    Using outfile:      ''
    Using delimiter:            ;
    Server version:     5.5.23-log MySQL Community Server (GPL)
    Protocol version:           10
    Connection:             master.domain.com via TCP/IP
    Server characterset:    latin1
    Db     characterset:    latin1
    Client characterset:    utf8
    Conn.  characterset:    utf8
    TCP port:               3306
    Uptime:         9 days 3 hours 5 min 49 sec

(3) Configure a tabela DSN no banco de dados percona no master master


    On the master:
    Create the percona database (if it does not already exist):

    mysql> create database percona;

    If the percona database already exists and you want to redo everything from scratch, drop the checksums & dsns tables if they already exist:

    mysql> drop table percona.checksums;  -- do this only if you are sure you want to start over & redo everything 
mysql> drop table percona.dsns; -- ok to drop this, we're recreating it in the next step
Create the dsns table in the percona database:
mysql> use percona; mysql> CREATE TABLE 'dsns' ( -> 'id' int(11) NOT NULL AUTO_INCREMENT, -> 'parent_id' int(11) DEFAULT NULL, -> 'dsn' varchar(255) NOT NULL, -> PRIMARY KEY ('id') -> ); Insert the slave info into the table: mysql> insert into dsns (dsn) values ("h=slave.domain.com");

(4) Execute a soma de verificação pt-table e passe explicitamente o arquivo-padrão (-F = / etc / my.cnf.percona) para o escravo usando a configuração "--recursion-method dsn"


    /usr/bin/pt-table-checksum -F /etc/my.cnf.percona h=master.domain.com --recursion-method dsn="D=percona,t=dsns,F=/etc/my.cnf.percona"

    master connection uses "-F /etc/my.cnf.percona h=master.domain.com"
    slave connection uses '--recursion-method dsn="D=percona,t=dsns,F=/etc/my.cnf.percona"'

Isso deve criar a tabela de checksums no banco de dados percona e conectar-se ao escravo (e mestre) usando conexões SSL.

    
por 23.07.2012 / 17:22
0

Eu nunca usei o kit de ferramentas percona, mas parece-me que

(2) pt-table-checksum não foi criado "conectar" a um escravo; Ele foi projetado para ser executado diretamente em algumas máquinas e gerar somas de verificação na mesma máquina (e, opcionalmente, conectar-se à máquina master).

(6) Para arquivos em geral, a melhor prática para réplicas de checksum em redes não seguras é: Tunnel rsync over ssh. a b c d e (Por "rsync" aqui, quero dizer o protocolo rsync, como usado internamente por muitos utilitários - o utilitário rsync, duplicidade, rsyncrypto, rdiff-backup, dirvish, etc.). Ocasionalmente eu uso rsync --dryrun , que apenas faz a soma de verificação para me dizer se o backup / escravo é idêntico ao mestre. Mas mais frequentemente eu executo o rsync sem a opção --dryrun. Sem essa opção, se alguma diferença for detectada, o rsync automaticamente fará com que o backup / escravo fique atualizado.

Infelizmente, com bancos de dados com alta atividade de gravação, a imagem do banco de dados no disco (que é tudo o que o rsync pode ver) geralmente está em um estado inconsistente. Para permitir que o rsync produza um backup / réplica útil, geralmente precisamos desligar o software do banco de dados em ambas as extremidades do link para fazer com que ele esvazie todos os dados da RAM no disco, faça a atualização do rsync e reinicie o banco de dados Programas. Isso geralmente é muito rápido, porque geralmente a grande maioria dos dados não é alterada, e o rsync só transfere as poucas partes dos dados que realmente mudaram.

(Até onde eu posso dizer, a única vantagem dos utilitários com base em banco de dados como "pt-table-sync" sobre rsync é que esses utilitários aparentemente reconhecem a sincronização para um estado consistente sem nunca desligar o software de banco de dados).

    
por 05.07.2012 / 20:27