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 的问题,仔细检查一下配置文件即可解决。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值