Зеркала сайта

Как пришлось мне однажды (16.04.2010 г.) убедиться, жизнь сайта - штука сложная, "полная лишений и выгоняний"! В указанный выше день прекратил работу мой хостер - McHost.ru и мой сайт http://rus-linux.net стал недоступен. Как говорят, пострадали более 30 тысяч сайтов. Но мне то не легче от того, что мои 4 сайта не одиноки. Ну про 3 других сайта разговор вести незачем - они у меня были в зачаточном состоянии, а вот rus-linux.net - это плод 10-летних усилий и его мне реально жалко. Конечно, первая мысль - просто перенести сайт на другой хостинг. Решение очевидное и я этим сразу же занялся, но одновременно задумался о создании зеркала сайта на независимом хостинге. А на этой страничке расскажу, что такое зеркало сайта вообще и как я создавал зеркало своего сайта.

Что такое "зеркало сайта"?

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

Зеркала создаются с несколькими разными целями. Во-первых, с целью распределния нагрузки на сервер в случае, если у сайта огромное число посетителей. Пример такого зеркала - сайт SourceForge.net, который имеет огромное количество зеркал в разных странах. Второй причиной создания зеркала может служить желание застраховаться от разных неожиданностей типа выхода из строя жесткого диска сервера, на котором размещается сайт или аналога той ситуации, в которую попал я - когда хостер оказался не в состоянии выполнить свои обязательства по поддержке сайта. В третьих, зеркала могут создаваться с целью занятия доменных имен, схожих с именем вашего сайта. Например, для моего сайта rus-linux.net целесообразно создать зеркало с именем ruslinux.net, чтобы посетитель, забывший вставить дефис при наборе адреса попадал тоже на мой сайт. Иногда зеркала создаются с целью выдачи одного и того же содержания в разных кодировках. Следует также помнить, что http://example.com и http://www.example.com — фактически два разных доменных имени и можно создать две копии вашего сайта с этими именами. Однако при этом возможны такие ситуации, когда продвигается www.example.com, а "глупые" пользователи поставят пару ссылок на сайт без www, после чего "тупые" роботы начинают индексировать оба сайта по отдельности.

Зеркала могут возникать и помимо желания владельца сайта. Администратор вашего хостинга может определить домен domain.ru как *.domain.ru, что в последующем облегчит его жизнь при создании поддоменов третьего уровня. В дальнейшем, при определенных условиях, у вас может получиться неопределенное количество "зеркал" вашего сайта в виде ранее созданных доменов третьего уровня. Например, на сервере Apache подобная ошибка возникает фактически самопроизвольно (при настройках по умолчанию) – при определении домена третьего уровня для вспомогательных целей.

Проблемы с зеркалами

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

Еще одной проблемой является также организация обновлений информации на разных зеркалах. С этой точки зрения зеркала сайта различаются:

  • по времени обновления информации: сразу же после изменения информации на основном сайте или спустя короткое время.
  • по методу обновления:
    • выполняющееся со стороны основного сайта (реплицирование);
    • выполняющееся со стороны зеркала;
    • вручную, по команде администратора.
  • по синхронности обновления:
    • синхронное, через определенные промежутки времени;
    • асинхронное, например, при изменении содержимого веб-страницы.
  • по полноте идентичности: полная копия основного сайта или частичная копия основного сайта (например, копия исходного программного кода без графики).

Резервная копия сайта на независимом хостинге

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

Создать такого рода зеркало достаточно просто. Достаточно регулярно делать копии файлов с основного сервера на резервный и реплицировать базы данных с ведущего сервера на резервный. Можно делать это по cron-у, где-то в ночное время.

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

Зеркало как резервная копия

Зеркала для распределения нагрузки на сайт

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

Сделать балансировку нагрузки через DNS.

Для одного и того же домена в DNS прописывается несколько записей "A". По запросу клиента, DNS выдает все записи, клиент выбирает какую-то одну из них. В общем и целом получается более-менее (с точностью процентов 30%) равномерное распределение клиентов по IP адресам.

Более сложные схемы балансировки это использовать или frontend reverse proxy (напр. всеми любимый nginx), или пожертвовать под это дело выделенный сервер, или использовать "железный" балансировщик нагрузки (какое-нибудь cisco или что-то в этом роде). Все эти решения не помогут, впрочем, если у провайдера "проблемы с каналом". Далее, можно попробовать приспособить CDN (или построить свое) но это уже будет слишком затратное решение и вряд ли Ваш сайт его окупит.

Полезные ресурсы

Загляните на досуге

Счетчики

Рейтинг@Mail.ru

LiveInternet

Rambler's Top100