为了避免服务器故障导致数据丢失,我们通常会将一台机器上的数据在多台机器上进行备份。下面介绍一下如何使用crontab+rsync在服务器间进行数据备份。
假设有两台服务器10.0.0.1和10.0.0.2,希望将10.0.0.1上的~/test
文件夹备份到10.0.0.2上的/data/backup/1/test
文件夹
手动数据备份
一个简单的数据备份方式是使用rsync手动同步:
rsync [OPTION...] <source folder> <target folder>
e.g. rsync -avzl --delete 10.0.0.1:~/test 10.0.0.2:/data/backup/1
(传输时进行压缩,同步删除)
具体用法查看rsync --help
定时自动数据备份
手动操作比较麻烦,而且可能出现遗漏。为了更稳定便捷地备份数据,我们希望数据能够定时自动备份。
crontab可以实现定时执行指令,但是由于rsync将数据传输到另一台机器时需要手动输入密码,我们不能简单地使用crontab执行上面的rsync命令,而是需要将用来备份的机器配置为daemon模式服务端。
配置daemon模式服务端
- 在服务端创建rsync配置文件
/etc/rsyncd.conf
#客户端以如下两行的用户权限连过来
uid = rsync
gid = rsync
#与安全相关
use chroot = no
#设置可以允许多少客户端的连接
max connections = 2000
#超时600秒即自动断开
timeout = 600
#Rsync daemon进程号存放的文件地址
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
#忽略错误
ignore errors
read only = false
#客户端对服务器没有列表查看的功能
list = false
hosts allow = 10.0.0.1/2
#host deny = 0.0.0.0/32
#相当于用来作验证的名字(不需要创建),放在secrets file中的格式为: rsync_backup:pwd.
auth users = rsync_backup
secrets file = /etc/rsync.password
##################################
# test module
[test]
path = /data/backup/1
hosts allow = 10.0.0.1
(参考rsync备份工具使用)
- 在服务器端创建
/etc/rsyncd.conf
指定uid gid的相应虚拟用户.
sudo useradd -M -s /sbin/nologin rsync - 将
/etc/rsyncd.conf
指定的auth users和密码以<auth user>:<password>
格式(e.g.rsync_backup:hahaha
)写入/etc/rsync.password
- 修改密码文件及备份路径权限
sudo chmod 600 /etc/rsync.password
sudo chown -R rsync.rsync /data/backup/1
- 启动rsync daemon服务
sudo rsync --daemon
查看服务是否开启ps -ef | grep rsync
将rsync --daemon
写入/etc/rc.local
,以便开机时自动启动
配置客户端
- 将daemon服务端中指定的密码(hahaha)写入密码文件(e.g.
/etc/rsync_<deamon_name>.password
) - 修改密码文件权限
sudo chmod 600 /etc/rsync_<deamon_name>.password
设置crontab
- 打开crontab配置文件
sudo crontab -e
- 写入文件备份指令
e.g.* * * * * rsync -avzl --delete 10.0.0.1:~/test 10.0.0.2:/data/backup/1
(每分钟备份一次)
e.g.30 4 * * 0 rsync -avzl --delete 10.0.0.1:~/test 10.0.0.2:/data/backup/1
(每周日凌晨4:30备份一次) - 查看crontab定时任务
crontab -l
- 查看crontab执行情况
sudo tail -f /var/log/cron.log
(如果没有日志,将/etc/rsyslog.d/50-default.conf
中#cron.*
的注释去掉,重启rsyslog服务:sudo service rsyslog restart
,重启cron服务:sudo service cron restart
)
配置和权限可能有坑,建议先用一个测试文件夹测试全部流程。
网友评论