Как построить отказоустойчивый сервис? Можно вбух... вложить крупную
сумму в супер-сервер с функцией «горячей» замены процессоров, памяти, блоков
питания и т. д.,
а затем молиться на этот сервер. Убедившись, что молитва все-таки не помогла,
перейти к кластерному решению из недорогих компонентов. Предлагаем вам начать
сразу со второго варианта и построить недорогой отказоустойчивый сервис с
использованием Cisco Content Switch (CCS).
Итак, для начала немного о ситуации с которой я столкнулся и которая,
наверное, знакома большинству системных администраторов.
В нашей компании используются два выделенных
DNS-сервера, на каждом из которых установлено два типа DNS-демонов – MyDNS
(порядка 10 000 доменов и 2 000 000 записей) для обслуживания запросов,
приходящих из Интернета, и DNS cache для обслуживания запросов серверов,
расположенных внутри корпоративной сети.
И хотя такое решение являлось
достаточно стабильным, но существовал ряд проблем:
n Отсутствие балансировки. Несмотря на то что в
корневых серверах DNS зарегистрированы оба DNS-сервера, соотношение запросов к
первому и ко второму DNS составляло около 90/10.
n Так как первичный сервер DNS cache был указан
первым на всех серверах в файле resolv.conf, то он же и обслуживал все 100%
запросов, приходящих из локальной сети (для клиентов,
не поддерживающих ротацию серверов DNS в resolv.conf).
n Замедление обслуживания в случае отказа одного
из серверов. Из-за того, что вся система DNS построена на протоколе UDP,
клиенты вынуждены ожидать стандартное время перед обращением к следующему
серверу, что вызывает сильное замедление ответов сервисов.
n В случае отказа первого сервера с DNS cache
многие службы (основанные на проколах POP, FTP, SMTP), использующие обратное
преобразование адреса IP в доменное имя, отвечают клиентам с большой задержкой.
И это также вызывает шквал сообщений от систем мониторинга из-за превышения
времени ожидания (timeout).
n Невозможность указания более трех серверов DNS
для многих служб, использующих DNS, что может быть серьезным ограничением для
высоконагруженных сетей.
Одно время я попытался обратиться к проекту Linux-HA
(The High Availability Linux Project), но такие ограничения, как отсутствие
балансировки, сложная структура при использовании более двух серверов, большое
время переключения (порядка 5-7 секунд) на запасной сервер, не позволили
использовать этот проект для устранения вышеописанных проблем.
После некоторого исследования был
обнаружен замечательный продукт Cisco Content Switch (CCS), который позволил
реализовать следующие очень важные функции:
n Балансировку нагрузки.
n Обнаружение отказа одного из серверов и
исключение его из списка используемых.
n Построение «виртуального» маршрутизатора. Если
установлено два и более CCS, то в случае выхода одного из них клиенты прозрачно
переключаются на запасной CCS.
n Возможность использования более трех серверов
DNS.
Аппаратное обеспечение
Семейство Cisco Content Switch включает в себя различные модели, начиная от
простейших моделей типа Cisco CCS 11000 до высокопроизводительных Cisco CSS
11506 с полным дублированием всех подсистем (см. таблицу). В моем случае
скорость потока к серверам DNS составляла порядка 10 Мбит/c, поэтому я
остановился на CCS 11000.