Назад | Перейти на главную страницу

Контрольная сумма реплик mysql по ssl

После нескольких часов попыток понять, как работает pt-table-контрольная сумма набора инструментов percona (2.1), я пытаюсь попробовать вас.

Ситуация

Проблема

Идея решения

Вопросы

  1. Неужели pt-table-контрольная сумма (2.1) действительно не может подключиться через SSL?
  2. Как мне настроить контрольную сумму pt-table для подключения (только) к не настроенному внутренне ведомому устройству
  3. Может ли вариант DSN быть решением?
  4. Если так: я не могу понять, как это работает. Не могли бы вы направить меня в нужное русло?
  5. Что лучше: старую версию или мааткит? (потому что там я могу настроить master / slave в командной строке)
  6. Вообще: какова наилучшая практика для реплик контрольной суммы в незащищенных сетях, когда контрольная сумма pt-table не работает через SSL?

С надеждой:)

Я никогда не пробовал репликацию мастер-мастер, но я установил SSL-соединения с контрольной суммой pt-table. Надеюсь, мои примечания ниже могут помочь ответить на некоторые из ваших вопросов, связанных с SSL.

В моем случае у меня настроена репликация master-slave с использованием SSL-соединений, и я использую Percona Toolkit 2.1.2. Поскольку способ его настройки был неочевиден, я подумал, что мои заметки помогут сэкономить вам время и силы в вашей ситуации. Ниже приведен пример того, как я получил SSL-соединения, работающие для соединений pt-table-контрольной суммы как с главным, так и с подчиненным серверами баз данных.

Ключ состоит в том, чтобы передать информацию DSN (содержащую настройки SSL) ведомому устройству путем явной передачи файла по умолчанию (например, -F = / etc / my.cnf.percona) ведомому устройству с помощью "--recursion-method dsn "настройка. Из того, что я прочитал на веб-сайте Percona и просмотрев код контрольной суммы pt-table-control, информация DSN не копируется из одного соединения в другое в более поздних версиях Percona Toolkit (начиная с версии 2.0, я полагаю). Итак, вам необходимо настроить ведомое соединение отдельно от ведущего.

Передайте информацию DSN для ведомого соединения, используя:
--recursion-method dsn = "D = percona, t = dsns, F = / etc / my.cnf.percona"

Предположения:
а. Учетная запись базы данных "percona" имеет соответствующие привилегии для контрольной суммы таблицы-pt-таблицы Percona. Я рекомендую использовать "REQUIRE SSL", чтобы убедиться, что учетная запись требуется для использования SSL-соединений.
б. Ведомое устройство и ведущее устройство настроены на использование SSL-соединений.

Примечание. Все описанные ниже действия выполняются на мастере.

(1) Чтобы передать настройки SSL для соединения DBI (т. Е. Конфигурацию DSN), создайте отдельный файл my.cnf специально для программного обеспечения 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) Проверьте настройки /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:       percona@master.domain.com
    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:       percona@master.domain.com
    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) Настройте таблицу DSN в базе данных percona на главном сервере.


    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) Запустите контрольную сумму pt-table и явно передайте файл значений по умолчанию (-F = / etc / my.cnf.percona) ведомому устройству, используя параметр "--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"'

Это должно создать таблицу контрольных сумм в базе данных percona и подключиться к ведомому (и главному) с помощью SSL-соединений.

Я никогда не пользовался инструментарием percona, но мне кажется, что

(2) pt-table-контрольная сумма не предназначен для «подключения» к ведомому устройству; он предназначен для запуска непосредственно на какой-либо машине и генерирования контрольных сумм на этой же машине (и, при необходимости, подключения к главной машине).

(6) Для файлов в целом рекомендуется использовать реплики контрольной суммы в незащищенных сетях: туннелирование rsync через ssh. а б c d е (Под "rsync" здесь я имею в виду протокол rsync, используемый внутри многих утилит - утилита rsync, duplicity, rsyncrypto, rdiff-backup, dirvish и т. Д.). Я иногда использую rsync --dryrun который просто определяет контрольную сумму, чтобы сказать мне, идентична ли резервная копия / ведомое устройство ведущему. Но чаще я запускаю rsync без опции --dryrun. Без этой опции, если обнаруживаются какие-либо различия, rsync автоматически продолжает обновлять резервную копию / ведомое устройство.

Увы, в базах данных с высокой активностью записи образ базы данных на диске (это все, что может видеть rsync) часто находится в несогласованном состоянии. Чтобы позволить rsync создать полезную резервную копию / реплику, нам обычно нужно ненадолго выключить программное обеспечение базы данных на обоих концах ссылки, чтобы заставить его сбросить все данные из ОЗУ на диск, выполнить обновление rsync и затем перезапустить базу данных. программное обеспечение. Обычно это происходит очень быстро, потому что обычно подавляющее большинство данных не изменяется, а rsync передает только те немногие части данных, которые действительно изменились.

(Насколько я могу судить, единственное преимущество утилит, работающих с базами данных, таких как "pt-table-sync" перед rsync, заключается в том, что эти утилиты, работающие с базами данных, по-видимому, каким-то образом выполняют синхронизацию до согласованного состояния, даже не завершая работу программного обеспечения базы данных. ).