Доброго утра.
Возникла необходимость создания зеркала сайта (файлы + БД) без посредничества локальной машины, исключительно сервер-сервер.
Перебрал литературу по этой теме, толкового маловато; единственное, начал немного вникать в принцип работы rsync, но и тут есть неясные моменты.
Отсюда вытекает вопрос: сталкивался ли кто-нибудь с такой проблемой, если да - как удавалось её решать.
Буду благодарен, если без нравоучений о пользе Гугла кто-то даст полезные ссылки на понятные материалы; поскольку мои поиски привели к чтению уж слишком специфической литературы. _________________ "Псих!", - подумал Ёжик
"Если абсурд и существует, то лишь во вселенной человека"
- Альбер Камю
1) mysql replication - далее гугл
2а) по крону один архивирует [ и грузит] измененные за период файлы и всю или часть БД[.я использую LinuxShell + mysqldump).
[если загрузки не происходила - уведомляет зеркало о готовности файлов, зеркало само забирает файлы.(я использую LinuxShell + wget)]
2б) разархивирует данные и применяет изменения.
3) логировать запросы, отличные от SELECT. с файлами см пп2. _________________ сервис DNS | разные http, DNS и прочие утилиты
можно такой алгоритм, сервер-зеркало для каждой записи в БД хранит дату и время её модификации, когда от главного сервера поступает команда объединения он выбирает все измененые записи + все измененые файлы сайта (тут простой алгоритм обхода всех каталогов сайта с проверкой времени модификации) все архивирует и передает главному серверу тот выполняет обратную операцию.
Этот алгоритм возможен в обе стороны, т.е. каждый сервер создает архив файлов и бд и передает другому. Основная проблема если возможна не только добавления новых записей, но и редактирование и удаления записей, в этом случае возможна ситуация, что одна запись (или файл) будет изменена сразу на двух серверах в этом случае алгоритм репликации очень сильно усложняется. _________________ Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)
Веденин
Весьма признателен, идея интересная. Особенно если учесть, что пока нет необходимости синхронизировать оба сайта, достаточно в одну сторону.
Единственное, в чём возникают сомнения - не слишком ли сложно предложенное Вами решение? Имею в виду, что было бы проще копировать всю базу целиком, а не выбирать построчно модифицированные записи. Разве нет? _________________ "Псих!", - подумал Ёжик
"Если абсурд и существует, то лишь во вселенной человека"
- Альбер Камю
Веденин
Единственное, в чём возникают сомнения - не слишком ли сложно предложенное Вами решение? Имею в виду, что было бы проще копировать всю базу целиком, а не выбирать построчно модифицированные записи. Разве нет?
Если у вас база 5 Мб, то проблем тут нет проще конечно целиком, если 500Мб в zip архиве, тогда только выбор модифицированных. C точки зрения производительности можно хранить только дату модификации и построить по полю даты модификации индекс, по идее все должно быстро выбиратся.
Просто я привык чаще работать с Oracl'aми и MS Servera'ми, где все базу тащить постоянно накладно мягко говоря.
P.S. Возможно есть какое то продуктовое решение на уровне MySQL, скорее всего о нем говорил lazutov (mysql replication) для репликации нескольких зеркал
P.P.S. Если объемы сайтов небольшие, то можно по простому архив всей базы + архив всех файлов (ну может кроме скриптов CMS) и передать его на другой сервер, там разархивация и все. _________________ Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)
передать его на другой сервер, там разархивация и все.
Вот в этом и загвоздка. Установить задания архивации для cron - не такая уж проблема; мой вопрос скорее заключается в том, каким способом автоматически связать два сервера и запустить процесс передачи. _________________ "Псих!", - подумал Ёжик
"Если абсурд и существует, то лишь во вселенной человека"
- Альбер Камю
Dis
ssh или даже netcat.
Если это сделать нельзя, то можно написать на php скрипт, которому методом POST по http отправлять файл с архивом и он уже будет его распаковывать и восстанавливать. _________________ Самая страшная ошибка - это ошибка без видимых причин и конкретных последствий.
phpBB3 [db_update.php generator] phpBB3 [Russian] Антисоциальный блог
передать его на другой сервер, там разархивация и все.
Вот в этом и загвоздка. Установить задания архивации для cron - не такая уж проблема; мой вопрос скорее заключается в том, каким способом автоматически связать два сервера и запустить процесс передачи.
Имхо, создаете zip файл на одном сервере, потом file_get_content если архив небольшой или fopen, fread и fwrite, если архив большой по моему должно работать
Правда, это не совсем безопасно (если боитесь что архив вашего сайта могут украсть), но если директория закрыта для просмотра, имя zip генерится случайным образом и zip удаляется после скачивания то вполне возможно, впрочем файл с паролями лучше в архив не добавлять.
Цитата:
ssh или даже netcat.
Если это сделать нельзя, то можно написать на php скрипт, которому методом POST по http отправлять файл с архивом
Хм, а в чем это лучше fopen, fread и fwrite c зеркала? В скорости или затрат производительности у ssh или POST ИМХО преимущества не будет. _________________ Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)
Ну тут тоже можно придумать много вещей кроме описанных выше, например отдавать zip только при запросе с указанного ip адреса или знающего определенный пароль (например выдавать архив с адреса export.php?password=2rytuwe8759827982) или закрыть директорию паролем и открывать её принимающим сервером и т.п. ssh использовать не обязательно, кстати метод передачи через POST вообще ужасно не безопасный, так как при при моем методе самое страшное это потеря архива, то при методе POST хакер легко сможет залить любую инфу на ваш главный сервер. _________________ Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)
Веденин
у меня это реализовано передачей в запросе ключа, который генерируется в зависимости от дня недели, и даты. _________________ сервис DNS | разные http, DNS и прочие утилиты
Alek$, Веденин благодарю вас за советы; при этом признаю свой промах - мне следовало бы конкретнее описать ситуацию. Возможно, в этом случае и вы будете избавлены от нецелевых рассуждений.
Написать скрипт, будь-то с методом POST, либо "fopen" - несложно. Трудность в том, что мне, к сожалению, не доводилось писать их с использованием внешних соединений.
Да, дилетант; поэтому в пределах одного сайта эти скрипты у меня работают, а все попытки "внедрения" параметров подключения к другим серверам окончились безуспешно. Либо статья по этой теме мне попалась неподходящая, либо что-то сам напутал. Но многократные проверки и переписывание результата не дали. _________________ "Псих!", - подумал Ёжик
"Если абсурд и существует, то лишь во вселенной человека"
- Альбер Камю
Написать скрипт, будь-то с методом POST, либо "fopen" - несложно. Трудность в том, что мне, к сожалению, не доводилось писать их с использованием внешних соединений.
Насколько помню fopen'у просто укзывается url документа на внешнем сайте и все он должен с ним работа (имеется в виду только на чтение)
Dis писал(а):
Да, дилетант; поэтому в пределах одного сайта эти скрипты у меня работают, а все попытки "внедрения" параметров подключения к другим серверам окончились безуспешно. Либо статья по этой теме мне попалась неподходящая, либо что-то сам напутал. Но многократные проверки и переписывание результата не дали.
Вы уверены, что сервер настроен правильно и хостер просто не запретил использование fopen с внешними серверами? _________________ Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)