mysql-репликация с блек джеком - поделитесь опытом

Metal Messiah
На сайте с 01.08.2010
Offline
152
1425

Добрый вечер.

Имеется сайт, по сути онлайн каталог на русском языке (php, mysql, smarty) живущий на Debian (nginx + apache). Некоторое время как запустил версию на другом языке, в блюижайший месяц планирую еще несколько локализаций, в предположении что каждая локализация добавляет еще столько же посетителей (что реально далеко не так, но в сферическом приближении) нужно это все надежно разместить. Пока это дешевая VPS'ка :crazy: на которой диск подходит к концу, скоро переезжать.

Начитался много статей и даже запись вебинара прослушал по организации высоконадежных и продуктивных решений. Скажем так до Вконтакте мне очень далеко, но развесить все на 2-3 сервера в разных локациях не мешало бы, т.к. на одном сервере может быть пол часа технических работ либо упадет mysql до тех пор пока я об этом не узнаю. Хотелось бы чтобы это все долго работало стабильно, без переездов, а даже если что и падало - это терпело несколько дней, если я, например, в турпоходе без интернета.

Пока что в планах только удвоить MySQL (второй сервер уже есть), далее (после модификации движка для нормального многоязычного шаблона и сообщений) это будет еще и клон файловой системы с синхронизацией (один сервер главный, на нем изменения скриптов если че). Демоны (автоматическое обновление некоторой информации для сайта в кроне) остаются на главном сервере, на вторичном же запускаются в 2 раза реже нормы чтобы на случай если главный оффнется, данные обновлялись с адекватной периодичностью.

Потом скорее всего прикручу каждый nginx ко всем апачам-бекендам, а не только к "своему" на случай мало ли что, хотя еще ни разу не было чтобы упал бекенд а фронтенд работал.

Спереди будет стоять Roundrobin DNS на 2 А-записи nginx, а позже посмотрю статистику по локализациям (на субдоменах) и подумаю что куда развесить для уменьшения пинга.

Такой себе low cost cluster. Т.к. не имею привычки держать на VPS только 1 сайт, видимо имеет смысл по той же схеме на эту же пару (а в перспективе может быть и тройку) серверов развесить и еще минимум 1 посещаемый сайт (репликация все равно будет, не отключать же базы).

Собственно вопрос такой: у кого есть опыт настройки и долгосрочной эксплуатации mysql репликации, какие там возможны вылеты и как часто они реально случаются на практике?

Есть ли смысл использовать mysql-proxy или достаточно в php прописать mysql_connect 127.0.0.1 if mysql_error() connect IP2? Много ли mysql-proxy ест ресурсов?

Из-за особенностей сайта (что одного что другого) там нет такого чтобы были только SELECT запросы, обязательно есть Update, а если посетители что-то добавляют то и Insert. Держать Master-Slave репликацию и 2 коннекта к базе (1 на чтение и 1 к мастеру на изменение) по идее глупо и настраивать надо именно Master-Master. Я прав?

Читал что бывают частые ситуации, когда репликация слетает и для возобновления работы нужно вмешательство администратора. Насколько они реально часто возникают? Подымется ли она автоматически после рестарта VPS из-за технических работ в ДЦ?

В мануалах для Master-Slave по SSL указано что надо сгенерировать сертификат сервера на мастере, а на slave его использовать, настроив параметры ssl-ca ssl-cert ssl-key. Для Master-Master по SSL информации не нашел - нужно использовать одинаковые ключи или наоборот настроить разные? Позволит ли это mysql сервер?

Я так понял что репликация осуществляется через mysql-bin.log. До каких размеров этот файл может разрастаться и как часто он обнуляется? После успешной синхронизации обнуляется, а в случае потери связи растет пока не синхронизируется?

Спасибо.

anonymous, думай что говоришь и не забывай подписать отзыв :)
Metal Messiah
На сайте с 01.08.2010
Offline
152
#1

извините, но АП. Не верю что никто не работал с репликацией

N
На сайте с 06.05.2007
Offline
419
#2
Metal_Messiah:
Начитался много статей и даже запись вебинара прослушал по организации высоконадежных и продуктивных решений. Скажем так до Вконтакте мне очень далеко, но развесить все на 2-3 сервера в разных локациях не мешало бы, т.к. на одном сервере может быть пол часа технических работ либо упадет mysql до тех пор пока я об этом не узнаю.

Если единственная причина, по которой вы решили задать столько вопросов, случайное нахождение этих статей - вам это не нужно.

уверен, что это будет самым полезным ответом :

Найдите один надежный, хостинг который не будет простаивать. И все.

Кнопка вызова админа ()
Metal Messiah
На сайте с 01.08.2010
Offline
152
#3

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

Плюс репликация это лишний бекап и возможность поднять сайт (или не ронять его вообще) в случае краша диска на сервере, плюс это снижение нагрузки на 1 сервер и в случае географического разнесения - уменьшение пинга и времени закачки для конечных посетителей. А еще примитивный анти-ддос и еще много чего.

N
На сайте с 06.05.2007
Offline
419
#4

Metal_Messiah, саму репликацию mysql настроить тривиально. Для этого даже в phpmyadmin мастер настройки есть. Механизм репликации master-slave достаточно надежен, обкатан годами и постарше некоторых посетителей форума будет (14 лет ему, с версии 3.23.15 ).

Нетривиально же решить все остальные смежные вопросы. Один сервер - одна проблема. Два связанных сервера - восемь проблем !

Исходя из постановки ваших вопросов, я делаю вывод, что вам очень много придется разбираться с ними.

Оно вам надо ? Какая такая гигантская выгода в итоге получится от освоения этой массы смежных технологий?

Отказоустойчивость ? Да терпят все. Как только у %%хостернейм%% возникают проблемы, соответствующая тема затухает на следующий день же после исправления этих проблем.

Ну сходите в раздел Хостинг. Там раз в полгода такие темы возникают. А давно что-то не было их.

Metal Messiah
На сайте с 01.08.2010
Offline
152
#5

Т.е. рекомендуете делать master-slave и 2 постоянных коннекта от php 1 для SELECT (рандом мастер-слейв) и 2й для UPDATE / INSERT (только мастер) в предположении что когда мастер упадет сайт работать будет но не будет обновляться?

N
На сайте с 06.05.2007
Offline
419
#6

Metal_Messiah, мы сейчас о том как сделать рабочей конкретную технологию или о выборе архитектуры вообще?

Можете делать. А можете не делать. Оптимальный выбор зависит от разных факторов, которые вы тут не изложили.

но исходя из описания

Имеется сайт, по сути онлайн каталог на русском языке (php, mysql, smarty) живущий на Debian (nginx + apache).

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

Сколько раз в день у вас падает VPS и почему это вообще происходит ? Не проще ли поменять ?

Metal Messiah
На сайте с 01.08.2010
Offline
152
#7

Дублирование данных must have это я уже решил, хотя Вы правы, вопрос скорее о выборе архитектуры. Я думал Master-Master, но меня уже почти убедили что лучше Master-Slave, 2 веб сервера. Падал mysql 2 раза за последние 3 или 4 месяца, один раз упал утром, а я об этом узнал только вечером когда добрался до компьютера. Скорость закачки с сайта зависит от географии, а посетители грубо говоря со всего мира. Плюс мало ли вдруг забуду вовремя продлить один из серверов. Плюс мало ли будет ддос атака на один из них или на соседей, а ляжет половина ДЦ.

MySQL proxy ставить или нет? Можно же подключаться ко 2 серверу при отсутствии коннекта к первому, а чтобы не ждать mysql connection timeout каждый раз - при пропадании сервера писать файл-флаг, который будет периодически устаревать, а до тех пор php будет подключаться к альтернативному серверу - итого при проблемах только 1 страница будет открываться 30 секунд, остальные быстро.

У меня нет опыта работы с репликацией, потому и начал с того что прошу совета тех, у кого опыт есть.

Metal Messiah
На сайте с 01.08.2010
Offline
152
#8

Пока перевожу движок с php/mysql на mysqli. Будет 1 мастер и 2 слейва.

Вопрос выбора архитектуры: в php добавить проверку при проблемах с коннектом подключаться к другому серверу с кешем этого флага на файле (чтобы при падении каждое открытие страницы не ломилось на дохлый серв) + проверка куда слать запрос (запись в мастер, чтение на слейв) или подключаться только на localhost, где поставить mysql-proxy? Как лучше?

С одной стороны, пишут что mysql-proxy дает потерю производительности (хотя я не понимаю откуда, если и БД и прокси будут на одном VPS и пинг не должен расти), с другой мой самодел на php будет по сути повторять код mysql-proxy.

TF-Studio
На сайте с 17.08.2010
Offline
334
#9

Не тем вы занимаетесь, имхо

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий