Александр Байрак
В этой статье будет рассказано о создании простой и удобной системы зеркалирования
информации с помощью пакета CVSup.
Трудно переоценить ту пользу, которую приносят нам резервные копии,
заботливо нами же и сделанные. Сколько нервов и времени не было благодаря им
потрачено впустую…
Процесс зеркалирования хоть и схож по смыслу, но
все же несколько отличается от классического резервного копирования информации.
Более того, зеркалирование в полной мере не сможет его заменить. А зачем же
тогда использовать зеркалирование, если оно не заменит процесс стандартного бекапа?
Рассмотрим небольшой пример.
На работе у X есть веб-сервер, X как
добросовестный админ выполняет каждодневное резервное копирование, даже скрипты
для автоматизации процесса написал. И все бы ничего: резервные копии ведутся,
хотите контент сайта двухнедельной давности? Пожалуйста! Но случилось страшное,
злобные script-kiddies взломали веб-сервер и снесли все содержимое сайта.
Конечно, не беда, есть резервные копии, и все можно воcстановить, но сколько
времени это займет? Да, казалось бы, не долго, минут 20 (в лучшем случае), и
все будет на месте, но эти самые 20 минут сайт компании будет в простое, (это
если только содержимое сайта(ов) снесли, а что делать, если злодеи недрогнувшей
рукой набрали rm –rf / )… невеселая картина вырисовывается. Вот для того чтобы
этого не произошло, можно (и нужно) зеркалировать информацию. (Конечно, зеркалирование
не спасет вас от script-kiddies, но подразумевается, что восстановление
работоспособности сайта (или всего сервера) займет намного меньше времени.)
Если бы у нашего админа имелась зеркальная копия веб-сервера, он использовал бы
ее для работы, на время восстановления основного веб-сервера.
Почему я взял за основу CVSup? CVSup является
пакетом программ для передачи и обновления файлов через сеть. Он состоит из
двух частей – клиента и сервера. Да, есть аналогичные средства – sup и rdist, а
чем CVSup-то лучше? CVSup более гибок в настройках, и обеспечивает большую
скорость работы по сравнению с вышеуказанными средствами. CVSup может
эффективно копировать файлы любых типов, вплоть до файлов устройств. С помощью CVSup
можно зеркалировать как отдельные каталоги, так и весь сервер целиком. А что?
Очень удобно получается.
Я установил систему зеркалирования на FreeBSD, но
ее так же можно установить на любую другую BSD-систему или на Linux.
CVSup мной был установлен из пакаджей, которые
шли вместе с системой. При желании пользователи BSD-систем могут установить
этот пакет из коллекции портов, а можно самостоятельно скомпилировать из исходников,
которые располагаются тут: ftp://ftp.FreeBSD.org/pub/FreeBSD/development/CVSup.
В сети есть и rmp-пакеты CVSup.
В общем, проблем с получением и установкой
возникнуть не должно. Расписывать пошагово весь процесс не вижу смысла.
Так как эта статья не задумывалась как
исчерпывающее руководство по зеркалированию информации, я не буду рассматривать
примеры создания полной копии одного/нескольких серверов целиком, все будет
показано на одном простом примере, я думаю, его будет достаточно, для того
чтобы понять, как работает CVSup.
Перейдем от теории к практике:
Предположим, нам нужно держать зеркальные копии
следующих каталогов: /var/ftp; /info; /home/user22. Для начала нам нужно
создать каталоги, в которых разместятся файлы конфигурации, роль которых –
указывать демону cvsupd, какие данные пересылать зеркальной машине.
#cd /etc
#mkdir –p cvsup/sup
#cd cvsup/sup
#mkdir ftp info user22
После этого создаем в каждом каталоге по 2 файла
следующего содержания (расписываю на примере ftp):
Создаем первый файл:
#touch ftp.cvs
Помещаем в него следующее:
Upgrade ftp
rsymlink *
Создаем второй файл:
#touch releases
В котором пишем:
ftp list=ftp.cvs prefix=/var
В первом файле мы указываем, какой каталог мы
хотим иметь на резервной машине. А во втором указывается имя файла, в котором
мы описали, что мы хотим копировать, и место на диске, где располагается нужный
нам каталог.
Проделываем аналогичные манипуляции с остальными
каталогами.
После успешного завершения запускаем сервер cvsupd:
#cvsupd –b /etc/cvsup –C 1 –l
/dev/stdout
После опции –b указываем, где у нас лежит
каталог, в котором располагаются файлы конфигурации. По умолчанию это /usr/local/etc/cvsup,
если файлы с настройками вы поместили именно туда, эту опцию можно опустить.
Опция –C отвечает за определение максимального количества клиентов, которые
могут одновременно забирать файлы. В нашем случае это 1. После опции –l
указывается место, куда выводить логи. Для меня более удобным и наглядным
является вывод этой информации непосредственно на экран. Но никто не мешает вам
в качестве места для логов указать какой-либо файл. Например, –l /var/log/cvsup.log
– и все сообщения будут помещаться в этот файл. Если все запустилось без
ошибок, то переходим к настройке машины «зеркала», на этой нам больше делать
нечего. Если же возникнут какие-либо ошибки, изучайте файл, который вы
определили для вывода информации.
Важное замечание: CVSup по умолчанию работает
через 5999-й порт, так что не забудьте открыть его на своем межсетевом экране.
Создаем в каталоге /etc файл mirror (хотя
название вы можете выбрать произвольное).
В этот файл мы поместим следующее:
*default host=hostname
*default delete use-rel-suffix
*default compress
*default preserve
*default base=/backup/var
*default releases=ftp
ftp
В качестве hostname вам нужно указать имя вашего
хоста, информацию с которого вы хотите получать. Кстати, писать *default в
начале каждой строки абсолютно не обязательно, это делается только для
удобочитаемости файла. delete use-rel-suffix – эта инструкция дает CVSup право
удалять файлы на вашем компьютере. А почему в *default base= указано именно /backup/var,
а не /var ?
Потому что /var «основной» машины будет храниться
в каталоге /backup/var «резервной» машины. Как вы поняли, это сделано для того,
чтобы каталог /var с «основной» машины не заместил собой каталог /var на
«резервной» машине.
Такое можно допустить только в том случае, если
вы поддерживаете полное зеркалирование сервера. Вроде бы все готово, пробуем
запустить CVSup:
#cvsup –L 2 /etc/mirror
Число после опции –L указывает уровень
подробности выводимой информации. По умолчанию используется 1. В данном случае
2 – самый подробный вывод. При 0 в качестве параметра опции –L информация о
процессе не выводится. За ней следует указание месторасположения файла с
настройками. Вот пошел процесс синхронизации.
В зависимости от объемов информации и скорости
сети первоначальный обмен данными может продлиться достаточно долго. Должен
заметить, что если нажать Ctrl+C для завершения процесса копирования, CVSup
корректно завершит все свои операции, и в следующий раз продолжит свое дело с
того места, но котором вы его прервали.
Хочу обратить ваше внимание на одну очень важную
деталь: CVSup не копирует файлы, у которых совпадает контрольная сумма и права
доступа.
Получается, что если на машине-источнике и
машине-получателе присутствуют разные учетные записи пользователей, информация
о правах владения файлов может не совпасть.
Отсюда следует, что если какой-либо копируемый
файл имеет владельца, упоминаний о котором нет на машине-получателе, CVSup
будет копировать этот файл в каждом сеансе синхронизации.
Для того чтобы этого избежать, нам нужно иметь на
обеих машинах одинаковые учетные записи пользователей, файлы которых мы
собираемся зеркалировать.
Если все отлажено и отлично работает, вполне
логичным может выглядеть добавление нового задания для демона cron. Через какой
промежуток времени запускать процесс зеркалирования – решать вам. У меня он
происходит каждые полчаса.
Существует перевод на русский язык оригинального CVSup
faq, который я очень рекомедую вам внимательно почитать. Находится он на: http://ozz.pp.ru/cvsup.html.
Завершая эту небольшую статью, невольно
вспоминаются золотые слова: «Лучше 2 бекапа, чем вообще без них». Так что не
пренебрегайте такой важной штукой, как резервное копирование информации.