Новинки техники    ·    Гостевая книга    ·    Улыбочку шире!    ·    Улыбочку шире-2!
Новости
Поиск

Резервное копирование. Лишняя копия не перетянет

Компьютерная техника-->Серверные решения

Что копируем?

Вернее, где было бы полезно описываемое решение? Представим себе офис небольшой компании. Компания, как правило, нуждается в бухгалтерской системе. Скажем 1С. 7-ка, 8-ка, не важно. Плюс надо где-то хранить надежно персональную информацию, которую бы не хотелось бы потерять, если вдруг что-то случится с локальным жестким диском. А случится может. Причем даже с довольно надежными и, казалось бы, проверенными моделями дисков.

Решением может быть покупка сервера под 1С и под шары пользователей. Ага. сервер. Но мы помним, что компания то небольшая и не всегда в бюджет заложены деньги на сам сервер (от 80 т.р.) и лицензионное серверное ПО от Miscrosoft (от 40 т.р.), которому несмотря на всю лицензионность без честного купленного антивируса все равно никуда. Почему я тут упомянул именно Майкрософт? И именно его серверные версии?

Мой личный опыт и опыт уважаемых мной коллег показывает, что обычно ситуация с 1С развивается таким образом.  Мастера из 1С настраивают работу бухгалтерии на работу базы локально на одном компе, а другим пользователям после настраивают путь к файлам на папку на том компьютере, открывая к ней общий доступ. Но, при увеличение числа пользователей (компьютеров, присоединяемых к базам 1С, расположенным на сетевой шаре) 1С больше 3 начинают замечаться тормоза в работе 1С по сети.
Для решения этих проблем 1С-ники обычно и рекомендуют переходить на терминальную версию, а это и выливается в покупку боле менее надежного сервера и лицензионного серверного Виндоуса, ибо обычный поддерживает только один удаленный рабочий стол и все.

Мне же кажется боле менее разумным решение такого плана. В качестве сервера использовать обычную рабочую станцию (i3 и 4 Гб Озы хватит за глаза) + пара дисков на ней, настроенных как зеркалируемый RAID. А в качестве серверной ОС использовать проверенную лошадку - FreeBSD и SAMBA на ней.

Кстати, чтобы сетевых тормозов было поменьше при большом числе пользолвателей (не 100, конечно, на больше, чем 3. Скажем 10-15) помогают некоторые настройки ядра системы, метко названные "sysctl-гайками", рекомендованные на форуме FreeBSD. Я использую эти:

# Настройки для SAMBA
kern.ipc.maxsockbuf=2097152
net.inet.tcp.recvspace=262144
net.inet.tcp.sendspace=262144
net.inet.tcp.mssdflt=1452
net.inet.udp.recvspace=65535
net.inet.udp.maxdgram=65535
net.local.stream.recvspace=65535
net.local.stream.sendspace=65535

Настройку SAMBA и вообще всего этого описывать здесь не стану, ибо интернет кишит документацией по обеим этим вещам, а я тут просто рассказываю про решение вопроса резервного копирования работающей системы. Хотелось бы только отметить, что для наденой работы зеркалирования и оперативного получения резервных копий надо использовать FreeBSD на файловой системе ZFS, позволяющей делать очень много полезных вещей. Нам же пригодятся две их них:

  1. организация зеркалируемого хранилища;
  2. получение моментальных резервных копий файловых систем.

Помимо основных ФС, создаваемых скриптом установки zfsinstall (/, /var и / home), надо сделать еще одну, куда и будем сваливать дампы:

zfs create tank/noDumpFS

Полезным будет озаботится сохранением ежедневных копий файлов 1С. На случай, если кто-то по криворукости или с бодуна удалит в 1С несколько проводок. Имея сохраненные, делающиеся ночью архивы базы, можно запросто все вернуть на состояние сегодняшнего утра.

Очень полезно и даже просто необходимо регулярно мониторить состояние зеркала, а может даже и состояние жетских дисков пула, используя smartmontools. Я обычно ограничиваюсь ежедневной отсылкой на почту инфоромации о здоровье ZFS-пула:

#!/usr/local/bin/bash
HOSTNAME=`/bin/hostname`;
/sbin/zpool status -v | mail -s "ZPOOL Status on ${HOSTNAME}" root;

Если на почте в какой-нибудь прекрасный день вместо ONLINE мы увидели DEGRADED, то идем к начальству на предмет получения 3 т.р. на новый жесткий диск. Сама же система, скорее всего будет работоспособна, просто один из дисков будет из пула исключен. Купив диск, вставим его на место умершего, подключим его к зеркалу и продолжим счастливый полет.
Используя же smartmontools, и читая информацию из SMART-контроллера диска, мы можем предвосхитить появление надписи DEGRADED, заменив диск до его кончины.

Вот, казалось бы и все готово. Данные на двух дисках, вряд ли погибнут оба одновременно. Но, хоть и с минимальной вероятностью, но такое может случиться. Не знаю, как вам, а мне самому как-то не по себе, когда что-то важное лежит всего на одном компьютере.

А значит будем копировать полностью все основные файловый системы сервера. Куда? Да на любую клиентскую Виндоус-машину в сети. Сделаем на ней папку, дадим разрешения записывать в нее. По хорошему, доступ к этой папке лучше сделать по паролю. Я остановился на простом варианте, без пароля. Если Вам захочется, чтобы доступ был только после авторизации, то в вызове smbclient надо будет убрать параметр -N и поставить ключ --user=ИМЯ_ПОЛЬЗОВАТЕЛЯ%ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ.

Итак, вот два скрипта. Первый - проверяет, что в данный момент никто не использует сервис самба (не сидит в базе). Если так и есть, то скрипт останавливает сервис samba, делает моментальные снимки файловых систем, запускает samba заново и записывает снимки в файлы, сжимая их по пути.

#!/usr/local/bin/bash
# Проверяем, что нет соединений к SAMBA-шарам
CONNECT=`/usr/local/bin/smbstatus -S | /usr/bin/grep "Connected at" -A 2 | tail -n 1`;

if [ "$CONNECT" ];then
    echo "Имеются подсоединенные клиенты";
    echo "Первый этот - ${CONNECT}";
    exit 1;
fi

echo "Подсоединенных клиентов нет. Можно останавливать Самбу";

/usr/local/etc/rc.d/samba stop;

# Делаем снимки файловых систем
/sbin/zfs snapshot tank/root@lastBackup;
/sbin/zfs snapshot tank/root/var@lastBackup;
/sbin/zfs snapshot tank/root/hosting@lastBackup;

/usr/local/etc/rc.d/samba start;

/sbin/zfs send tank/root@lastBackup | /usr/bin/gzip > /noDumpFS/FSDumps/rootFS.gz;
/sbin/zfs send tank/root/var@lastBackup | /usr/bin/gzip > /noDumpFS/FSDumps/varFS.gz;
/sbin/zfs send tank/root/home@lastBackup | /usr/bin/gzip > /noDumpFS/FSDumps/homeFS.gz;

# Удаляем снимки файловых систем
/sbin/zfs destroy tank/root@lastBackup;
/sbin/zfs destroy tank/root/var@lastBackup;
/sbin/zfs destroy tank/root/hosting@lastBackup;

Запуск этого скрипта можно настроить через cron по ночам.

Второй скрипт закидывает сделанные ночью дампы на Виндоус-машину (в моем случае под именем WINDOWS001 в шару server_backups, где есть папка FSDumps), его запуск надо настроить на то время, когда Виндоус-машина обычно включена.

#!/usr/local/bin/bash
WIN_MACHINE='WINDOWS001';
DUMPS_LOCAL_PATH="/noDumpFS/FSDumps";

/usr/local/bin/smbclient -N //${WIN_MACHINE}/server_backups -D FSDumps -c "ls;quit";
RES=$?;
if [ $RES -ne 0 ]; then
    echo "Machine ${WIN_MACHINE} unreachable";
    exit 1;
fi

echo "Machine ${WIN_MACHINE} ready to get dumps";

/usr/local/bin/smbclient -N //${WIN_MACHINE}/server_backups -D FSDumps -c "ls;put ${DUMPS_LOCAL_PATH}/rootFS.gz rootFS.gz;quit;";
/usr/local/bin/smbclient -N //${WIN_MACHINE}/server_backups -D FSDumps -c "ls;put ${DUMPS_LOCAL_PATH}/varFS.gz varFS.gz;quit;";
/usr/local/bin/smbclient -N //${WIN_MACHINE}/server_backups -D FSDumps -c "ls;put ${DUMPS_LOCAL_PATH}/homeFS.gz homeFS.gz;quit;";

exit 0;

Вот теперь, мне кажется, можно быть спокойным за сохранность данным 1С-бухгалтерии.



Комментарии к статье (1)
К списку Назад
Техника
Самое свежее
Вспышка

Когда мы говорим "Вспышка", то подразумеваем "портрет", верно? Люди. Я имею в виду, что все мы выросли на вечеринках, днях рождения и свадьбах, где вспышка врезается в нашу память. Чи-и-з! Вспышка!

Конденсационные газовые котлы – плюсы и минусы

Чудо расчудесное, если верить без оглядки в заверения изготовителей и продавцов газовых котлов об их КПД в 109%. Но это так стали замерять КПД еще давно, когда конденсационники даже не придумали. Рассмотрим плюсы и минусы.

Ошибка Р304 - пропуски зажигания в цилиндре 4 у Фокуса и не только

Никак не руководство к действию, а просто рассказ, как я победил этот неприятный код. А неприятностей он может сулить довольно затратных - причины его очень разные. Ну что говорить? Почитайте там не очень много букв )