- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Маркетинг для шоколадной фабрики. На 34% выше средний чек
Через устранение узких мест
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Здравствуйте.
Беспокоюсь о беспрерывной работе сайта. Поэтому решил провести работы по повышению отказоустойчивости.
Сейчас сижу на KVM (CentOS, nginx, php-fpm, mysql), данные (mysql, php, img - т.е. то что касается только сайта, а не сервера) бэкапятся на другой KVM с помощью "XtraBackup" и "Rsync + lsyncd".
Все это позволяет относительно быстро восстановить работоспособность при потере данных с основного KVM, но с остановкой сайта.
Прочитал множество статей на эту тему (зеркалирование, кластеризация (облако), RAID, масштабируемость ...) и обсуждения в комментариях к ним, но так и не смог найти и остановиться на том, что мне надо.
А конкретнее, что в итоге хотелось бы получить:
Самым оптимальным решением на данный момент для меня:
- создаем два KVM
- синхронизируем их с помощью "Rsync + lsyncd" (и сразу вопрос, можно ли синхронизировать таким образов и файлы баз данных mysql)
- при отказе или проведении моих работ на "KVM_1", переключать с помощью "A" записи в "Управление DNS зоной" с ip "KVM_1" на ip "KVM_2".
Минусы данной схемы:
- это все происходит не автоматом, а в ручном режиме.
- не используются ресурсы "KVM_2" совместно с "KVM_1"
- и не нашел информацию можно ли синхронизировать "Rsync + lsyncd" файлы баз данных mysql
Рассматривал так же DNS ротацию, но она откидывает половину пользователей при не рабочем одном KVM, так что это не вариант.
Как и любой другой нормальный проект, планируется постоянное увеличение пользователей и соответственно нагрузки на систему, увеличения размера БД, количества файлов, поэтому хотелось с самого начала организовать все максимально правильно, чтобы потом не грызть локти. НУ а сейчас все это умещается на не большом KVM )))
Прошу поделиться рабочими примерами (схемы и реализация), желательно с реальных проектов. Кто уже сталкивался с этим, не проходите мимо, подскажите, пожалуйста, как это делается ПРАВИЛЬНО.
****************************************************************************
А что мешает настроить репликацию баз? Балансировку http можно и на базе Nginx настроить: http://nginx.org/ru/docs/http/ngx_http_upstream_module.html или HAproxy
Нельзя синхронизировать виртуалки так, как вы пишете. Для перемещения сайта с одного kvm-узла на другой в kvm есть миграция, при которой мигрируемая система "замораживается". Вживую копировать образы диска - получите битую базу данных или файловую систему.
Баланисировку надо делать через nginx, а не через DNS лучше. БД реплицировать между узлами.
На сколько я понимаю, это может поможет для бекапа и балансировки при SELECT, но если не доступен "KVM_1", то все равно ничего не работает. С Nginx и HAproxy, таже ситуация.
---------- Добавлено 09.11.2013 в 16:32 ----------
Ведь это делается всего на несколько секунд максимум, для создания слепка. Или на все время пока весь диск не скопируется и его разместят на "KVM_2". И эта "миграция" делается только один раз в начале, а потом все синхронизируется автоматом?
Как же быть если нет доступа к "KVM_1", как перебросить на "KVM_2"?
Правильно это делается на уровне приложения
Правильно ли я понял, Вы про дальнейшую синхронизацию автоматом через "Rsync + lsyncd" после слепка диска.
А можете меня немного распутать, чтобы я понял суть...
Вот, например, Вконтакте, Google и т.п., как они держат постоянную доступность сайта. Получается у них есть аппаратный балансировщик, который принимает все запросы на себя и потом распределяет все на другие сервера. Он должен быть доступен 24/7. Но это же нереально. Или у них несколько аппаратных балансировщиков?
На сколько я понимаю, это может поможет для бекапа и балансировки при SELECT, но если не доступен "KVM_1", то все равно ничего не работает. С Nginx и HAproxy, таже ситуация.
Это уже вопрос настройки серверов и приложения. Если топорно, то берите Failover DNS с маленьким TTL и A-записями, направленными на оба сервера. на каждом из серверов Nginx с балансировкой. Между базами правильная репликация (master-slave или master-master решать Вам), и т.д. и .т.п.
Правильным решением было бы обратиться к профессионалам, которые проанализируют приложение и предложат оптимальный вариант конкретно для Вашего приложения. А на форуме могут быть только общие советы и ссылки на тонны документации.
---------- Добавлено 09.11.2013 в 14:55 ----------
Вот, например, Вконтакте, Google и т.п., как они держат постоянную доступность сайта. Получается у них есть аппаратный балансировщик, который принимает все запросы на себя и потом распределяет все на другие сервера. Он должен быть доступен 24/7. Но это же нереально. Или у них несколько аппаратных балансировщиков?
$ host google.com
google.com has address 173.194.39.66
google.com has address 173.194.39.65
google.com has address 173.194.39.67
google.com has address 173.194.39.73
google.com has address 173.194.39.72
google.com has address 173.194.39.64
google.com has address 173.194.39.71
google.com has address 173.194.39.78
google.com has address 173.194.39.70
google.com has address 173.194.39.68
google.com has address 173.194.39.69
Как-то так :)
Вот это уже ответ, есть куда копать. Но все равно есть вопросы.
Не получается что это DNS Round-Robin, то что я описывал в начале?
Не будет ли большая нагрузка на DNS сервер с маленьким TTL?
Обычная ситуация: проект не коммерческий и соответственно бюджет невелик. Вот и спрашиваю здесь.
Обычная ситуация: проект не коммерческий и соответственно бюджет невелик. Вот и спрашиваю здесь.
Загрузите своим проектом сначала один сервер по максимуму, потом далее будете думать. А то даже сотни тысяч уников нету в день, а уже кластеры хочется строить.
Вот это уже ответ, есть куда копать. Но все равно есть вопросы.
Не получается что это DNS Round-Robin, то что я описывал в начале?
Не будет ли большая нагрузка на DNS сервер с маленьким TTL?
В каком-то смысле да, round robin, но небольшой TTL позволит быстро переключиться. Как я говорил, решение топорное и не спасет от глупых провайдеров, игнорирующих TTL и кеширующих записи на несколько дней. Поэтому и нужен умный Failover-сервис. Городить свое решение в рамках небольшого бюджета нет смысла.
Обычная ситуация: проект не коммерческий и соответственно бюджет невелик. Вот и спрашиваю здесь.
Вы думали что будете делать, если все это дело развалится на каком-то из уровней? Поднять - это одно. Поддерживать сложнее.
Да мне самое главное не нагрузку распределить, а "Отказоустойчивость сайта на KVM", т.е доступность. А то получается иногда, что вроде бы и есть сайт, а он недоступен. Представьте как плохо без если бы лежали Google, Яндекс...
---------- Добавлено 09.11.2013 в 17:39 ----------
А я уже подумал это панацея.
А он спасет от тех "глупых провайдеров"?
Так получается, что нужен бюджет по-больше, а потом: покупка дедиков и аппаратных балансировщиков?
Или все же есть что-то среднее?