zona7o
@zona7o
Веб-разработчик

Сервера в разных ДЦ разных провайдеров — как осуществить?

Добрый день всем.


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


Что можете посоветовать в качестве решения этой проблемы?


Вариант с балансировкой nginx'a — понятен, но ведь на удаленных серверах необходимо еще держать и копию всех файлов. А бывает, что среди файлов — видео весом ~ 35-50 Мб.


Решение, которое мне представляется — это кластерные ФС. Но я не уверен, что думаю в верном направлении.


Если есть у кого опыт — буду признателен за советы и консультацию.
  • Вопрос задан
  • 4957 просмотров
Решения вопроса 1
@rukhem
clusterFS это все очень медленно.
Мы сделали так — выделил 1 сервер как master-stat и на него выкладываются обновления.

Остальные stat сервера (в других дата-центрах) если локально не могут найти файл файл лезут на этот конкретный master-stat и скачивают недостающий файл:

set $root /opt/www/img.domain.com;

location / {
root $root;
try_files $uri @master-stat;
}

location @master-stat{
internal;
proxy_pass img.master-stat.domain.com;
proxy_set_header Host img.domain.com;
proxy_store on;
proxy_store_access user:rw group:rw all:r;
proxy_temp_path /opt/tmp;
root $root;
break;
}

Ну и раз в сутки с mster-stat rsync на все остальные, чтоб удалить ненужное и перелазить обновленные (редко но всеже надо).
Ответ написан
Пригласить эксперта
Ответы на вопрос 6
unconnected
@unconnected
Собственно я не хотел бы привязываться в ответе к конкретным реализациям (nginx, apache, etc), т.к. сам сейчас работаю в основном с Windows Azure (по нему могу и конкретно с реализацией подсказать).
По задачам:
1. Нужно, чтобы какой-то из серверов откликнулся на запрос, даже при отказе одного из них — это делается фокусами с DNS
2. Нужно, чтобы копия UGC, была доступна с других серверов например — загруженных файлов, особенно если они большие.
Вот тут я бы делал примерно следующее: сервер получивший файл, сообщает другим серверам, что у него есть новый файл. Те складывают это знание себе в базу. При запросе пользователем этого файла с другого сервера — осуществляется загрузка файлика на сервер, ставим отметку, что фай2л у нас теперь есть и отдаем его пользователю.
Если речь идет, допустим, о блог записях — то проще при получение записи сразу реплицировать ее на другие сервера.
Ответ написан
unconnected
@unconnected
Вообще, это называется CDN, они используются не только для ускорения загрузки, но и для отказоустойчивости.
Кластерные FS, имхо, не вариант. Сложно обеспечить достаточные скорости по внешним каналам, чтобы конструкция работала стабильно.

Я бы строил механизм репликаций.
Ответ написан
zona7o
@zona7o Автор вопроса
Веб-разработчик
gag_fenix, мы ищем надежное решение :) Спасибо!
P.S. Промахнулся, ответ на комментарий
Ответ написан
Комментировать
polyakstar
@polyakstar
Виртуализация + репликация между ДЦ средствами СХД.
дорого.
Ответ написан
@rukhem
Есть еще вариант такой логики:
если локально нет файла — пройтись по остальным stat серверам и попробовать забрать его оттуда. Но отказались от этой схемы. Она нужна когда обновления заливают в разные stat. а у нас сложилось так что все равно заливают в один.
Ответ написан
CLaiN
@CLaiN
Ну например на винде есть DFSR, который все вопросы репликации файлов берет на себя. + RR в днс для отказоустойчивости между цодами. Репликация бд зависит от решения, но обычно достаточно мастер-слейв репликации с витнесом в третьем цоде.

Подозреваю, что в никсах есть свои похожие механизмы репликации файлов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы