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

Настройка mysql master-slave с синхронной репликацией

У меня очень тривиальная установка mysql master-> slave происходит между двумя серверами. Проблема в том, что репликация является асинхронной, и это может вызвать проблемы (даже на канале с низкой задержкой), если главный сервер выйдет из строя после COMMIT до того, как поток репликации из подчиненного устройства смог получить последний журнал бункера.

Есть ли способ заставить mysql выполнять синхронные коммиты, чтобы гарантировать согласованность данных в отношениях mysql-> slave?

MySQL 5.5 имеет полусинхронную репликацию. По сути, это гарантирует, что по крайней мере одно ведомое устройство получило транзакцию до ее фиксации.

http://dev.mysql.com/doc/refman/5.5/en/replication-semisync.html

Обычная репликация MySQL обязательно асинхронная, нет распределенных блокировок, и ведущее устройство никогда не блокируется в ожидании ведомых устройств. В этом есть свои преимущества и недостатки.

DRBD + heartbeat - стандартное решение, позволяющее избежать потери данных в случае безвозвратной потери ведущего.

Вы можете использовать DRBD + heartbeat под обычной репликацией, что обеспечивает масштабирование чтения или реплики за пределами площадки, а также очень высокую надежность.

Поскольку DRBD выполняет синхронную репликацию на уровне блоков, вам необходимо, чтобы сеть имела очень низкую задержку для обеспечения хорошей производительности (gigE в порядке, настраиваемые межсоединения с низкой задержкой лучше, если у вас очень высокие требования к производительности).

MySQL Cluster обеспечивает синхронную репликацию, но механизм (NDBCLUSTER) не подходит для многих случаев использования.

У Continuent было решение для синхронной репликации (Sequoia), но оно больше не активно развивается.

Стандарт де-факто - DRBD + Heartbeat, но его нетривиально настроить.

Ура