MyTetra Share
Делитесь знаниями!
Бэкап данных с помощью rsnapshot и NFS
Время создания: 28.04.2016 04:01
Раздел: Компьютер - Linux - Резервное копирование и синхронизация
Запись: xintrea/mytetra_syncro/master/base/1461805288wfdb1afbw2/text.html на raw.github.com

Простой бэкап данных с помощью утилиты rsnapshot на расшаренную папку NFS или удаленный сервер. rsnapshot — утилита для создания копий состояния файловых систем на базе rsync. Особенностью является ориентация на создания полных снапшотов файловой системы через заданный интервал времени, для экономии места на диске, использует хитрый трюк с hard-линками. Не изменившиеся файлы по сути представляются hard-линками что экономит много места на диске. Может бэкапить как на удаленный (NFS,SAMBA,SSH,SCP,FTP,SFTP), так и на локальный хост.

Установка и настройка NFS-сервера и NFS-клиента

В моем случае схема такая:
NFS Server IP Address: 172.17.17.96/16
NFS Client IP Address: 172.17.18.61/16

Само-сабой мы бэкапим клиент на сервер.

На сервере:

yum -y install nfs-utils

Указываем домен (если такой имеется):

vi /etc/idmapd.conf
...
Domain = home.local
...

Создаем папку которую будем шарить:

mkdir /root/share

И собсвтенно прописываем саму шару:

vim /etc/exports
/root/share     172.17.18.61(rw,sync,no_root_squash,no_subtree_check)

Теперь надо запустить сервисы:

/etc/rc.d/init.d/rpcbind start
/etc/rc.d/init.d/nfslock start
/etc/rc.d/init.d/nfs start

И добавить в автозагрузку:

chkconfig rpcbind on
chkconfig nfslock on
chkconfig nfs on

Так как может понадобиться перезапускать их в будущем, проще засунуть это в один файл:

vim /etc/restart.nfs.sh
/etc/rc.d/init.d/rpcbind restart
/etc/rc.d/init.d/nfslock restart
/etc/rc.d/init.d/nfs restart

Перезапускаем NFS:

chmod +x /etc/restart.nfs.sh
/etc/restart.nfs.sh

Если у вас есть IPtables:

vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2049 -j ACCEPT  
-A INPUT -m state --state NEW -m tcp -p tcp --dport 111 -j ACCEPT 
-A INPUT -m state --state NEW -m tcp -p tcp --dport 32803 -j ACCEPT 
-A INPUT -m state --state NEW -m tcp -p tcp --dport 892 -j ACCEPT  
-A INPUT -m state --state NEW -m tcp -p tcp --dport 875 -j ACCEPT 
-A INPUT -m state --state NEW -m tcp -p tcp --dport 662 -j ACCEPT

Настройка клиента:

yum -y install nfs-utils

Опять таки домен, если есть:

vi /etc/idmapd.conf
...
Domain = home.local
...

Теперь надо запустить сервисы:

/etc/rc.d/init.d/rpcbind start
/etc/rc.d/init.d/nfslock start
/etc/rc.d/init.d/nfs start

И добавить в автозагрузку:

chkconfig rpcbind on
chkconfig nfslock on
chkconfig nfs on

Снова делаем файл с перезапуском:

vim /etc/restart.nfs.sh
/etc/rc.d/init.d/rpcbind restart
/etc/rc.d/init.d/nfslock restart
/etc/rc.d/init.d/nfs restart

Перезапускаем NFS:

chmod +x /etc/restart.nfs.sh
/etc/restart.nfs.sh

Теперь монтируем шару:

mkdir /root/share
exportfs -a -v
mount -t nfs 172.17.17.96:/root/share /root/share

Убеждаемся что она на месте:

df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              20G   11G  8.3G  56% /
tmpfs                 504M     0  504M   0% /dev/shm
172.17.17.96:/root/share    15G  9.0G  4.8G  66% /root/share

Если нужен авто-маунт при старте системы:

vim /etc/fstab
172.17.17.96:/root/share /root/share nfs rw,sync,hard,intr 0 0

В маунте все видно:

mount
/dev/sda1 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)
172.17.17.96:/root/share on /root/share type nfs (rw,vers=4,addr=172.17.17.96,clientaddr=172.17.18.61)

Установка и настройка rsnapshot

Утилиту rsnapshot мы конечно будем ставить на NFS клиенте и бэкапить данные в шару на удаленный сервер:

yum install rsnapshot rsync -y

###############################
Если вы хотите бэкапить данные через SSH протокол на удаленный сервер, то нужно будет сгенерировать ключи, это просто. На клиенте:

ssh-keygen -t rsa

Жмакаем пару раз Enter и копируем ключ на сервер:

ssh-copy-id 172.17.17.96

Теперь можно заходить по SSH на удаленный сервер без пароля:

ssh root@172.17.17.96

###############################

Вся конфигурация rsnapshot происходит в одном файле:

vim /etc/rsnapshot.conf

Его не стоит пугаться, там по дефолту уже все сделали правильно за вас, нужно только подкоректировать пару строк:
Для бэкапа на NFS шару:
snapshot_root /root/share/ — сюда будем складывать снапшоты, помним что это NFS шара
backup /root/ — это та директория которую я буду бэкапить, можно указать много

Далее, нам необходимо рассмотреть, сколько резервных копий, мы хотели бы хранить. Т.е. мы говорим rsnapshot сохранить определенное количество резервных копий каждого вида интервала.
interval hourly 6
interval daily 7
interval weekly 4
interval monthly 3

backup /root/ — домашняя директория бэкапа
cmd_du /usr/bin/du — диск репорты

Проверяем что с синтаксисом все в порядке:

rsnapshot configtest
Syntax OK

Делаем пробный бэкап в ручную:

rsnapshot hourly

Смотрим что в шаре на сервере появился бэкап:

cd /root/share
ls -l
total 4
drwxr-xr-x 3 root root 4096 May  7  2014 hourly.0

Как видите бэкап прошел.
Теперь добавим все это дело в крон:

vim /etc/cron.d/rsnapshot
0 */4         * * *           root    /usr/bin/rsnapshot hourly 
30 3          * * *           root    /usr/bin/rsnapshot daily
0  3          * * 1           root    /usr/bin/rsnapshot weekly
30 2          1 * *           root    /usr/bin/rsnapshot monthly

Расписание бэкапов:
6 часовых бэкапов в день (каждые 4 часа, в 0,4,8,12,16,20)
1 дневной бэкап каждый день, в 3:30 ночи
1 недельный бэкап каждую неделю, в 3:00 ночи в Субботу (шестой день каждой недели)
1 месячный бэкап каждый месяц, в 2:30 ночи каждлый 1-ый день месяца

Для бэкапа через SSH стоит позабиться о таких вещах как:
cmd_ssh /usr/bin/ssh — бэкенд
cmd_du /usr/bin/du — диск репорты
ssh_args -p 25000 — ТОЛЬКО В СЛУЧАЕ ЕСЛИ ВЫ МЕНЯЛИ СТАНДАРТНЫЙ 22 ПОРТ
backup root@172.17.17.96:/root/share subdirectory/ — место куда бэкапы будут заливаться

Ну и собственно бэкап удаленного линукс хоста в конфиг фале выглядит так:

backup  root@svn.example.com:/home/svn   svn/
backup  root@svn.example.com:/var        svn/
backup  root@svn.example.com:/etc        svn/
backup  root@svn.example.com:/root       svn/

Только помните, что если вы хотите бэкапить удаленный сервер, вам необходимо сделать ключ и положить на этот самый удаленный сервер:

ssh-keygen -t rsa
ssh-copy-id svn.example.com

К примеру я использую rsnapshot имеено для таких целей, существует бэкап сервер, где собственно сами бэкапы хранятся, на этом сервер я установил rsnapshot и настроил бэкап удаленных серверов на бэкап сервер.


 
MyTetra Share v.0.65
Яндекс индекс цитирования