linux文件自动备份:rsync
rsync是linux系统下的数据镜像备份工具,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。用于将文件和目录从一个位置同步到另一个位置。同步的位置可以在本地服务器或远程服务器上。
简而言之,就是可以解决文件自动将增量文件备份到另一台服务器上,当然这个自动是通过linux的定时任务crond实现的,当然这样做的缺点就是无法实时,一旦出现问题,定时任务时间差内的文件可能丢失,如果要求较高,科通过 rsync + inotify 实现。
假设有两台服务器:
192.168.0.101(node1),192.168.0.102 (node2)
要将 node1 上的 /home/sftp 文件夹下的所有文件备份到 node2 的 /home/backupsftp 中,因此,node1 作为rsync服务器,监控要备份的目录,node2 作为rsync客户端,定时从 node1 上将文件同步过来,从而达到备份的目的。当然 rsync 同样能实现服务端将增量文件推送到客户端,原理相同,这里只讲客户端主动拉取。
一 、安装 rsync
服务器和客户端都要安装,一般linux系统都默认有该软件,可先使用命令查看系统中有没有 rsync,如果没有,就安装一个。
[root@localhost test]# rpm -qa|grep rsync
# 出现下面这句代表已经有 rsync 了
rsync-3.0.9-18.el7.x86_64
# 如果没有则需要安装一个
[root@localhost test]# yum -y install rsync
二 、配置 rsync
1 服务端配置
rsync主要分有2个配置文件,分别是:
rsyncd.conf – 主配置文件(在 /etc目录下面)
rsyncd.pw – 密码文件
- 创建 rsyncd.pw 配置文件:
touch /etc/rsyncd.pw
- 修改主配置文件 rsyncd.conf
vim /etc/rsyncd.conf
在文件里加入一下内容:
uid = root
gid = root
use chroot = no
max connections = 5
strict modes = yes
port = 873
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[backupsftp]
path = /home/sftp
comment = This is a backup
ignore errors
read only = yes
list = no
hosts allow = 192.168.0.102 127.0.0.1
auth users = test
secrets file = /etc/rsyncd.pw
uid = root #运行 rsync 守护进程的用户
gid = root #运行 rsync 守护进程的组
use chroot = no #若为yes, 则需要root权限,并且在同步符号连接资料时只会同步名称不会同步内容。
max connections = 5 #设置并发连接数,0表示无限制
strict modes = yes #是否检查口令文件的权限
port = 873 #端口,873为 rsync 默认端口
pid file = /var/run/rsyncd.pid #PID文件路径
lock file = /var/run/rsync.lock #锁文件路径
log file = /var/log/rsyncd.log #日志文件路径#自定义模块名。模块是定义服务器哪个目录要被同步。格式:[name]
[backupsftp]
path = /home/sftp #同步目录的路径通过path指定
comment = This is a backup #定义注释说明的内容
ignore errors #忽略一些IO错误
read only = yes #是否允许客户端上传数据(双向同步),yes表示不允许
list = no #客户端请求显示模块列表时,本模块名称是否显示,默认为yes(true)
hosts allow = 192.168.0.102 127.0.0.1 #设置哪些主机可以同步数据,多ip和网段之间使用空格分隔
auth users = test #设置允许连接服务器的账户(自定义命名)
secrets file = /etc/rsyncd.pw #密码验证文件名
- 修改密码配置文件:
vim /etc/rsyncd/rsyncd.pw
# 用户名:密码(自定义)
test:111111
- 启动rsync服务:
systemctl start rsyncd
# 配置开机自启
systemctl enable rsyncd
# 关闭服务
pkill rsync
systemctl stop rsyncd
- 查看服务是否启动:
ps -ef|grep rsync
lsof -i:873
netstat -anlp | grep 873
- 防火墙配置
firewall-cmd --zone=public--add-port=873/tcp --permanent
2 客户端配置
- 修改密码文件
touch /etc/rsyncd.pw
echo "111111" > /etc/rsyncd.pw
- 修改密码文件权限
chmod 600 /etc/rsyncd.pw
三、同步文件
1 客户端主动拉取文件(手动):
rsync -avzP --delete --progress test@192.168.0.101::backupsftp --password-file=/etc/rsyncd.pw /home/backupsftp
-a archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD。
-r 是递归 -l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;
-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件;-r 是递归;
-l 是链接文件,意思是拷贝链接文件;
-p 表示保持文件原有权限;
-t 保持文件原有时间;
-g 保持文件原有用户组;
-o 保持文件原有属主;
-D 相当于块设备文件;
-z 传输时压缩;
-P 传输进度;
-v 传输时的进度等信息,和-P有点关系;
–progress 是指显示出详细的进度情况
–delete 是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致
–password-file=/etc/rsyncd.secrets
指定密码文件,这样就可以在脚本中使用而无需交互式地输入验证密码了,
这里需要注意的是这份密码文件权限属性要设得只有属主可读。
2 自动同步
自动同步通过在客户端配置定时任务来完成。
crontab -e
加入一下内容保存:
0 2 * * * rsync -avzP --delete --progress test@192.168.0.101::backupsftp --password-file=/etc/rsyncd.pw /home/backupsftp
表示每天凌晨2点执行一次。
查看当前定时任务:
crontab -l
重启定时任务:
systemctl restart crond
大公告成。
四、出现的问题
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1516)
可通过日志文件进行问题的定位:
cat /var/log/rsyncd.log
cat /var/log/messages
通过查看日志后发现是服务端主配置文件 rsyncd.conf 的问题,仔细检查一下配置文件即可解决。