Наша компания создала два сервера MySQL, которые синхронизируются с использованием стратегии мастер-мастер. Кластер из двух машин управляется с помощью crmsh. Это только кластер с высокой доступностью, что означает, что один сервер MySQL отправляет данные за раз, а другой хранится для резервного копирования только в случае сбоя одного сервера.
Чтобы протестировать наш кластер (я раньше такого не делал), я написал скрипт, который запишет 100000 строк в таблицу в базе данных. Во время выполнения этого сценария я захожу на сервер, который получает данные (т.е. на сервер, на который указывает общий IP-адрес), и перезагружаю его, пытаясь смоделировать аппаратный сбой.
В некоторых случаях скрипт продолжает работать. Однако в некоторых других случаях я получаю печально известную PDOException: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away
исключение или PDOException: SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction
исключение и тд.
Как я могу справиться с этими ошибками? Я чувствую, что есть простой факт о программировании для кластера серверов, о котором я не знаю.
Задача ещё не решена.
Других решений пока нет …