Здравствуйте!
Имеется 2 сервера с полностью идентичными системами (FreeBSD 7.1). На них поднят MySQL кластер (ацкий пожиратель оперативы) и запущенны 2 апача, на которых крутится нагруженный сайт и юзает кластерную БД. Сервера находятся у двух разных провов и имеют разные ip. Для балансировки нагрузки тупо сделали в NAMED 2 ip на одно имя.Вопрос:
Как сделать чтобы если один сервер выключен, DNS не выдавал клиентам его адрес? А то половина запросов в никуда уходит....
Вы изначально пошли не тем путем. На мой взгляд, гораздо эффективнее было бы поставить что-то типа mysql-proxy, для балансировки между MySQL серверами. Кроме того, nginx для ускорения отдачи статистики. Один из серверов может сугубо отрабатывать скрипты, а результат как статику отдавать nginx.
Советую почитать умные статьи про организацию высоконагруженных систем: http://community.livejournal.com/ru_highload/
>Вы изначально пошли не тем путем. На мой взгляд, гораздо эффективнее было
>бы поставить что-то типа mysql-proxy, для балансировки между MySQL серверами. Кроме
>того, nginx для ускорения отдачи статистики. Один из серверов может сугубо
>отрабатывать скрипты, а результат как статику отдавать nginx.
>Советую почитать умные статьи про организацию высоконагруженных систем: http://community.livejournal.com/ru_highload/Путей распределения нагрузки действительно много. Но я смотрю вопрос не именно в распределении, а ближе к обеспечению отказоустойчивости и непрерывной работы некой системы. Присоединюсь к автору вопроса, возможно ли такое средствами DNS?
>Путей распределения нагрузки действительно много. Но я смотрю вопрос не именно в
>распределении, а ближе к обеспечению отказоустойчивости и непрерывной работы некой системы.
>Присоединюсь к автору вопроса, возможно ли такое средствами DNS?Логически рассуждая, отказоустойчивость делается дублированием сервисов и обеспечением их доступности. Дублирование к DNS-у не имеет отношения, дублирование самого DNS тоже бы надо %) делать, но для простоты %) опустим этот вопрос. Доступность -- мониторингом состояния и включением-выключением доступа к клиента серверам. К мониторингу DNS никакого отношения не имеет, по идее. Включать-выключать диступ по имени к узлам в кластере через dns - можно. TTL "поменьше" поставить и при изменении сосотояния узлов/сервисов обнослять зону/имя в dns.
Теоретически как-то так. Наверное что-то пропустил. $)
Отказоустойчивость MySQL обеспечивается не кластеризацией, а репликацией. Единственное узкое место - веб-сервер. Ставим CARP.
http://img.fotki.yandex.ru/get/1/vbob.2/0_881_da8caa39_orig
Покапайся на форуме, тут уже этот вопрос проходил, были варианты, точно.
Итак по порядку отвечаю на все сообщения:1) Насчет нетого пути - путей много и можно сделать и как вы пишите, но проблем с моим путем (с распределением нагрузки) у меня ещё не возникло.
2) Рассуждения от Andrey Mitrofanov - уже ближе к делу, а именно: обеспечить кластеризацию рядом стоящих серверов несложно(для специалиста), речь идет о том, что есть 2 кластера, допустим в каждом по 2 сервера, кластеры у двух разных провов, упал канал, свет, или ещё что там у одного провайдера, и клиенты должны автоматом перекинуться на второй кластер, который в штатном режиме просто ловил 50% обращений.
3) CARP - совсем жарко :-) это часть решения, которую я уже испытываю в данный момент(результат опишу), но это кластеризация(CARP может как просто "подхватывать адреса", так и балансировать запросы) именно двух серверов у одного провайдера.
4) Отказоустойчивость достигается как кластером, так и репликацией, порой эти понятия даже имеют единый смысл, например в доках по кластеру на postgresql часто используют слово репликация вместо кластера.... Но сейчас не идет речи о том, что уменя БД плохо синхронится, или апач перегружен....
Сейчас есть промежуточное решение, но оно как-бы сказать дорогое и ИМХО из пушки по муровьям, итак:
2 кластера, каждый состоит из 2-х серверов, кластера стоят у 2-х разных провайдеров.
1) Между серверами в кластере поднимается CARP с балансировкой.
2) Покупается автономная система, на своем роутере настраиваем маршруты или делаем round-robin для балансировки запросов ещё и между кластерами.
На сисадминс.ру не так давно была задорная статья про человека, который кластеризовал DNS.
>На сисадминс.ру не так давно была задорная статья про человека, который кластеризовал
>DNS.Посмотрел.... Простите меня модераторы, но аффтор того топика просто придурок...
То о чем я завел речь очень востребовано, и вроде как ещё не решено, что предает актуальность тематике. Если тема будет решена без покупки AS, то обесчаю написать статью о построении решения от а до я.
>1) Между серверами в кластере поднимается CARP с балансировкой.
>2) Покупается автономная система, на своем роутере настраиваем маршруты или делаем round-robin
>для балансировки запросов ещё и между кластерами.C AS это оччень "из пушки по воробьям", запаритесь. CARP'а вполне достаточно должно быть, дальше уже по туннелю можно прокинуть этот мультикаст.
По постановке вопроса выходит что есть некая третья точка, на которой стоит DNS сервер. Если так то проверяем на этой третей точке доступность двух других и соответственно оповещаем named. Желательно выставление низкого ttl, дабы уменьшить влияние кеширования клиентами и/или их isp
Если же третьей точки нет, то named придется ставить на обоих, что отлично согласуется с требованием наличия минимум двух dns серверов в разных сетях. Дальше поступаем аналогично первому случаю.
>По постановке вопроса выходит что есть некая третья точка, на которой стоит
>DNS сервер. Если так то проверяем на этой третей точке доступность
>двух других и соответственно оповещаем named. Желательно выставление низкого ttl, дабы
>уменьшить влияние кеширования клиентами и/или их isp
>Если же третьей точки нет, то named придется ставить на обоих, что
>отлично согласуется с требованием наличия минимум двух dns серверов в разных
>сетях. Дальше поступаем аналогично первому случаю.автор топика решения не нарыл? нечто подобное и у меня имеет место быть. пока что без кластера, потом - как вариант. AS уж больно дорогое удовольствие.
>автор топика решения не нарыл? нечто подобное и у меня имеет место
>быть. пока что без кластера, потом - как вариант. AS уж
>больно дорогое удовольствие.если честно то я не согласен с утверждением что AS больно дорогое удовольствие - посмотрите цены на www.ipaddr.ru(это не реклама!!!) - мы сами недавно воспользовались их помощью. AS + 1 блок адресов обойдётся в 130 + 240 баксов = итого 370 $ - неужели это дорого?
>>автор топика решения не нарыл? нечто подобное и у меня имеет место
>>быть. пока что без кластера, потом - как вариант. AS уж
>>больно дорогое удовольствие.
>
>если честно то я не согласен с утверждением что AS больно дорогое
>удовольствие - посмотрите цены на www.ipaddr.ru(это не реклама!!!) - мы сами
>недавно воспользовались их помощью. AS + 1 блок адресов обойдётся в
>130 + 240 баксов = итого 370 $ - неужели это
>дорого?Мне провайдер (Питер, Ланк) выставил предложение-счет : 500$ за регистрацию, 1000$ - год (аб. плата) Блок адресов просил из 8 штук. А за ссылочку спасибо большое.
>Как сделать чтобы если один сервер выключен, DNS не выдавал клиентам его
>адрес? А то половина запросов в никуда уходит....TTL 0 выставляйте, тогда при каждом обращении к серверу DNS будет выдавать новый ip. Мы так делали с VPN-"кластером". Причём поскольку по умолчанию попытка установить TCP соединение происходит три раза, то все эти три раза DNS честно выдаёт разные ip.