rsync是linux下的一款快速增量备份工具Remote Sync,是一款实现远程同步功能的软件(数据镜像备份软件),它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。它不像FTP那样需要全备份,rsync可以根据数据的变化进行差异备份,从而减少数据流量,提高工作效率。
假设有两台服务器:
IP:114.22.168.67 -- 作为rsync服务器 需要配置rsyncd.conf文件
IP:46.94.110.123 -- 作为rsync客户端 不需要配置rsyncd.conf,文件可为空
在服务器端创建/demo目录作为共享目录,复制一些测试文件到该目录中,用于进行测试。
1、安装
# 服务器和客户端都要安装。Centos是默认安装了的
[root@localhost ~]# yum -y install rsync
2、配置
rsync主要分为三个配置文件,分别是:
rsyncd.conf -- 主配置文件
rsyncd.secrets -- 密码文件
rsyncd.motd -- 服务器信息文件
分别创建如下目录和文件:
[root@localhost1 ~]# mkdir /etc/rsyncd
[root@localhost1 ~]# touch /etc/rsyncd/rsyncd.conf
[root@localhost1 ~]# touch /etc/rsyncd/rsyncd.secrets
[root@localhost1 ~]# chmod 600 /etc/rsyncd/rsyncd.secrets
[root@localhost1 ~]# touch /etc/rsyncd/rsyncd.motd
修改主配置文件:
[root@localhost1 ~]# vi
/etc/rsyncd/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
[backup]
path = /demo
comment = This is a backup
ignore errors
read only = yes
list = no
hosts allow = 46.94.110.123 127.0.0.1
auth users = test
secrets file = /etc/rsyncd/rsyncd.secrets
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]
[backup]
path = /demo #同步目录的路径通过path指定
comment = This is a backup #定义注释说明的内容
ignore errors #忽略一些IO错误
read only = yes #是否允许客户端上传数据(双向同步),yes表示不允许
list = no #客户端请求显示模块列表时,本模块名称是否显示,默认为yes(true)
hosts allow = 46.94.110.123 127.0.0.1 #设置哪些主机可以同步数据,多ip和网段之间使用空格分隔
auth users = test #设置允许连接服务器的账户(自定义命名)
secrets file = /etc/rsyncd/rsyncd.secrets #密码验证文件名
修改密码配置文件:
[root@localhost1 ~]# vi
/etc/rsyncd/rsyncd.secrets
输入内容:test:123456(用户名:密码 )(自定义设置)
test:123456
修改服务器欢迎信息(非必改项,可不设置):
[root@localhost1 ~]# vi
/etc/rsyncd/rsyncd.motd
加入自定义内容:
welcome to
use
the rsync services!
启动rsync服务:
以 --daemon 方式启动服务
[root@localhost2 ~]# rsync --daemon --config=/etc/rsyncd/rsyncd.conf
#关闭服务:pkill rsync
查看rsync服务是否启动:
[root@localhost2 ~]# ps -ef|grep rsync
[root@localhost2 ~]# netstat -anlp | grep 873
[root@localhost2 ~]# lsof -i:873
设置开机启动 rsync服务
[root@localhost2 ~]# echo "rsync --daemon --config=/etc/rsyncd/rsyncd.conf" >> /etc/rc.local
添加防火墙规则,允许873端口的数据访问
[root@localhost2 ~]# firewall-cmd --permanent --add-port=873/tcp
#或者
[root@localhost2 ~]# vi /etc/sysconfig/iptables
#添加以下内容
-A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT#重启防火墙
[root@localhost2 ~]# service iptables restart
安装
[root@localhost2 ~]# yum -y install rsync
创建密码文件:
[root@localhost2 ~]#
touch /etc/rsyncd.secrets
输入密码:123456
[root@localhost2 ~]# echo "123456" > /etc/rsyncd.secrets
[root@localhost2 ~]# chmod 600 /etc/rsyncd.secrets
启用文件同步:
[root@localhost2 ~]# rsync -avzP --delete --progress [email protected]::backup --password-file=/etc/rsyncd.secrets /usr/backup
上述命令的意思是用test用户登陆到114.22.168.67的rsync服务器上,把backup模块中指定的数据同步到本地的/usr/backup目录下。以下是上一条命令中的参数介绍:
-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
来指定密码文件,这样就可以在脚本中使用而无需交互式地输入验证密码了,
这里需要注意的是这份密码文件权限属性要设得只有属主可读。
通过创建定时任务来完成同步
[root@localhost2 ~]# crontab -e
加入以下内容:
* * * * * rsync -avzP --delete --progress [email protected]::backup --password-file=/etc/rsyncd.secrets /usr/backup
上述内容表示每分钟执行一次命令
重新启动定时任务:
[root@localhost2 ~]# service crond restart
我们通过在服务端的 /demo 目录下创建新的文件,看看是否会同步到客户端的 /usr/backup 目录下。 等待一分钟后,文件成功同步到了客户端 ~
到此,配置就结束了!