14.21.6 Подключение InnoDB memcached и репликация
Так как плагин daemon_memcached поддерживает MySQL, обновления, внесенные на сервере-источнике через интерфейс memcached, могут быть реплицированы для резервного копирования, балансирования интенсивных операций чтения и обеспечения высокой доступности. Все команды memcached поддерживаются с бинарным протоколированием.
Вам не нужно настраивать плагин daemon_memcached на серверах-репликах. Главное преимущество этой конфигурации — увеличение пропускной способности записи на источнике. Скорость механизма репликации не затронута.
В следующих разделах показано, как использовать возможности бинарного журнала при использовании плагина daemon_memcached с репликацией MySQL. Предполагается, что вы выполнили настройку, описанную в Разделе 14.21.3 «Настройка плагина InnoDB memcached».
Включение бинарного журнала InnoDB memcached
-
Чтобы использовать плагин
daemon_memcachedс MySQL, включите параметр конфигурацииinnodb_api_enable_binlogна сервере-источнике. Этот параметр можно установить только при запуске сервера. Также необходимо включить бинарный журнал MySQL на сервере-источнике, используя параметр--log-bin. Вы можете добавить эти параметры в файл конфигурации MySQL или в командную строку mysqld.mysqld ... --log-bin -–innodb_api_enable_binlog=1
Настройте сервера-источник и реплику, как описано в Разделе 16.1.2 «Настройка репликации на основе положения файла бинарного журнала».
-
Используйте mysqldump для создания моментальной копии данных источника и синхронизируйте её на сервере реплики.
source $>
mysqldump --all-databases --lock-all-tables > dbdump.dbreplica $>mysql < dbdump.db -
На сервере-источнике выполните
SHOW MASTER STATUSдля получения координат бинарного журнала источника.mysql>
SHOW MASTER STATUS; -
На сервере-реплике используйте оператор
CHANGE MASTER TOдля настройки сервера-реплики с использованием координат бинарного журнала источника.mysql>
CHANGE MASTER TOMASTER_HOST='localhost',MASTER_USER='root',MASTER_PASSWORD='',MASTER_PORT = 13000,MASTER_LOG_FILE='0.000001,MASTER_LOG_POS=114; -
Запустите реплику.
mysql>
START SLAVE;Если в журнале ошибок выводится сообщение, подобное следующему, реплика готова к репликации.
2013-09-24T13:04:38.639684Z 49 [Note] Slave I/O thread: connected to master 'root@localhost:13000', replication started in log '0.000001' at position 114
Тестирование конфигурации репликации InnoDB memcached
Этот пример демонстрирует, как протестировать конфигурацию репликации InnoDB memcached с использованием memcached и telnet для вставки, обновления и удаления данных. Клиент MySQL используется для проверки результатов на серверах-источнике и реплике.
В примере используется таблица demo_test, которая была создана скриптом конфигурации innodb_memcached_config.sql во время начальной настройки плагина daemon_memcached. Таблица demo_test содержит один пример записи.
-
Используйте команду
setдля вставки записи с ключомtest1, значением флага10, значением срока действия0, значением cas 1 и значениемt1.telnet 127.0.0.1 11211Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'.set test1 10 0 1t1STORED -
На сервере-источнике проверьте, что запись была вставлена в таблицу
demo_test. Предполагая, что таблицаdemo_testранее не изменялась, должно быть две записи. Пример записи с ключомAAи запись, которую вы только что вставили, с ключомtest1. Столбецc1соответствует ключу, столбецc2— значению, столбецc3— значению флага, столбецc4— значению cas, а столбецc5— времени истечения срока действия. Время истечения срока действия было установлено в 0, так как оно не используется.mysql>
SELECT * FROM test.demo_test;+-------+--------------+------+------+------+ | c1 | c2 | c3 | c4 | c5 | +-------+--------------+------+------+------+ | AA | HELLO, HELLO | 8 | 0 | 0 | | test1 | t1 | 10 | 1 | 0 | +-------+--------------+------+------+------+ -
Проверьте, что та же запись была реплицирована на сервере-реплике.
mysql>
SELECT * FROM test.demo_test;+-------+--------------+------+------+------+ | c1 | c2 | c3 | c4 | c5 | +-------+--------------+------+------+------+ | AA | HELLO, HELLO | 8 | 0 | 0 | | test1 | t1 | 10 | 1 | 0 | +-------+--------------+------+------+------+ - ...
Заметки по бинарному журналу InnoDB memcached
Формат бинарного журнала:
Большинство операций memcached отображаются в операторах (аналогичные insert, delete, update). Поскольку MySQL-сервер не обрабатывает фактический оператор SQL, все команды memcached (кроме
flush_all) используют протоколирование репликации на основе строк (RBR), которое независимо от параметраbinlog_formatсервера.Команда memcached
flush_allотображается в командеTRUNCATE TABLE. Поскольку команды могут использовать только протоколирование на основе операторов, командаflush_allреплицируется путём отправки оператораTRUNCATE TABLE.
Транзакции:
Концепция транзакций обычно не является частью приложений memcached. Из соображений производительности используются
daemon_memcached_r_batch_sizeиdaemon_memcached_w_batch_sizeдля управления размером пакета для операций чтения и записи. Эти настройки не влияют на репликацию. Каждая SQL-операция в подлежащей таблицеInnoDBреплицируется после успешного завершения.Значение по умолчанию параметра
daemon_memcached_w_batch_sizeсоставляет1, что означает, что каждая операция записи memcached коммитится немедленно. Это значение по умолчанию влечёт за собой определённую издержки производительности, чтобы избежать несоответствий в данных, видимых на серверах-источнике и реплике. Реплицированные записи всегда доступны немедленно на сервере-реплике. Если вы установитеdaemon_memcached_w_batch_sizeна значение больше1, записи, вставленные или обновлённые через memcached, не будут немедленно отображаться на сервере-источнике. Чтобы увидеть записи на сервере-источнике до их коммита, выполнитеSET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED.
© 2025 Oracle
Licensed under the GPLv2 License.