Постановка задачи
Необходимо архивировать все сайты на поддержке,требования:
1) Удобная и быстрая настройка
2) Архивы должны хранится 7 дней и быть циклическими.
3) Решили что классическая архивация с помощью rsync и mysqldump надежней
Реализация
Раньше у нас уже был опыт решения подобной задачи, написали кучу скриптов на bash'e в результате процесс настройки был сложноват. На этот раз решили пойти другим путем, а именно воспользоваться программой rsnapshot, которая в свою очередь может удовлетворить все наши требования без какого-либо страшного программирования.
Настройка
Теперь после небольшой вводной части можно перейти непосредственно к настройке. Настройку выполняем на Debian 7.
Установка rsnapshot достаточно проста:
aptitude install rsnapshot
Настраиваем общий конфиг для всех сайтов /etc/rsnapshot.common, наша версия конфига выглядит так:
#################################################
# rsnapshot.conf - rsnapshot configuration file #
#################################################
# #
# PLEASE BE AWARE OF THE FOLLOWING RULES: #
# #
# This file requires tabs between elements #
# #
# Directories require a trailing slash: #
# right: /home/ #
# wrong: /home #
# #
#################################################
#######################
# CONFIG FILE VERSION #
#######################
config_version 1.2
###########################
# SNAPSHOT ROOT DIRECTORY #
###########################
# All snapshots will be stored under this root directory.
#
snapshot_root /var/snapshots/
#################################
# EXTERNAL PROGRAM DEPENDENCIES #
#################################
# LINUX USERS: Be sure to uncomment "cmd_cp". This gives you extra features.
# EVERYONE ELSE: Leave "cmd_cp" commented out for compatibility.
#
# See the README file or the man page for more details.
#
cmd_cp /bin/cp
# uncomment this to use the rm program instead of the built-in perl routine.
#
cmd_rm /bin/rm
# rsync must be enabled for anything to work. This is the only command that
# must be enabled.
#
cmd_rsync /usr/bin/rsync
# Uncomment this to enable remote ssh backups over rsync.
#
cmd_ssh /usr/bin/ssh
# Comment this out to disable syslog support.
#
cmd_logger /usr/bin/logger
# Uncomment this to specify the path to rsnapshot-diff.
#
cmd_rsnapshot_diff /usr/bin/rsnapshot-diff
#########################################
# BACKUP INTERVALS #
# Must be unique and in ascending order #
# i.e. hourly, daily, weekly, etc. #
#########################################
retain daysago 7
############################################
# GLOBAL OPTIONS #
# All are optional, with sensible defaults #
############################################
# Verbose level, 1 through 5.
# 1 Quiet Print fatal errors only
# 2 Default Print errors and warnings only
# 3 Verbose Show equivalent shell commands being executed
# 4 Extra Verbose Show extra verbose information
# 5 Debug mode Everything
#
verbose 2
# Same as "verbose" above, but controls the amount of data sent to the
# logfile, if one is being used. The default is 3.
#
loglevel 3
# If you enable this, data will be written to the file you specify. The
# amount of data written is controlled by the "loglevel" parameter.
#
logfile /home/admin/log/rsnapshot.log
# If enabled, rsnapshot will write a lockfile to prevent two instances
# from running simultaneously (and messing up the snapshot_root).
# If you enable this, make sure the lockfile directory is not world
# writable. Otherwise anyone can prevent the program from running.
#
lockfile /home/admin/rsnapshot.pid
# Default rsync args. All rsync commands have at least these options set.
#
rsync_short_args -avz
rsync_long_args --delete --numeric-ids --delete-excluded --chmod=a+rwx,g+rwx
Для каждого сайта добавляем конфигурационный файл в папке ~/config, например /home/user/config/drupal-admin.ru:
#Подключение общего файла конфигурации
include_conf /etc/rsnapshot.common
#Архивация папки сайта
backup user@drupal-admin.ru:~/domains/drupal-admin.ru/html/ drupal-admin.ru/
#Архивация базы данных
backup_script /usr/bin/ssh user@drupal-admin.ru mysqldump -uuser -ppassword --default-character-set=utf8 drupal-admin.ru > drupal-admin.sql drupal-admin.ru/mysql
Теперь создаем общий файл конфигурации rsnapshot ~/backup_allsites, в который добавляем все файлы сайтов, например:
include_conf /home/user/config/drupal-admin.ru
include_conf /home/user/config/supportsite1.ru
include_conf /home/user/config/supportsite2.ru
После этого добавляем задание cron команда crontab -e:
#Архивация сайтов ежедневно в 00:30
30 00 * * * /usr/bin/rsnapshot -c /home/user/backup_allsites daysago
#Сжатие всех каталогов архивов сайтов ежедневно в 00:59 и отправка отчета на email
59 00 * * * /usr/local/bin/rsnaptar support@initlab.ru
Теперь у нас всё готово. Архивы делаются ежедневно и есть архив сайтов за 7 дней.
|