linux系统下rsync使用笔记

发布时间 2023-12-15 20:30:11作者: 第一夫人

rsync的功能

rsync能够基于网络(含局域网和互联网)快速地实现多台主机间的文件同步工作

rsync的特点

rsync有独立的文件内容差异算法,会在传送前对两个文件进行比较,只传送两者内容间的差异部分,因此速度更快

rsync的使用场景

1、本地代码更新到测试服务器,我们一般采用git方式,测试服务器部署到线上服务器可以采用rsync的方式(我使用过这种架构)

2、正式服务器上的一些数据或者日志备份到备份服务器,可以使用此工具,因为它是第一次全量传输,后面都是只传输差异部分数据,因此经济性和性能很好

rsync的推和拉

1、这里的推和拉都是相对来说的

2、我们确定源服务器和目标服务器2个角色,数量上可能是一对一,一对多,多对一,多对多,这些都是可能存在的情况

3、如果我是源服务器,给目标服务器发送数据,这叫推

4、如果我是目标服务器,从源服务器上获取数据,这叫拉

5、至于选哪种方式合适,要结合实际的场景需求,多方面考虑,易维护,性能高,数据安全等等方面综合考虑

rsync的认证方式

名称 是否需要密码 说明 命令示例
ssh认证

需要

1、只需数据同步的双方服务器都安装rsync服务即可,且不必启动服务

2、如果目标主机的ssh端口不是22,必须用-e选项指定协议类型和端口号,如果是22则无需使用-e参数

3、执行命令,每次都需要输入登录目标主机ssh的密码,不支持--password-file参数指定密码文件

1、对方ssh端口是22:rsync -avz /tmp/data root@192.168.1.100:/data

2、对方ssh端口非22:rsync -avz -e "ssh -p 端口号" /tmp/data root@192.168.1.100:/data/

deamon认证

需要

1、需要远程主机开启 rsyncd 服务

2、本地 rsyncd 服务可不必开启

3、远程主机需要配置rsyncd.conf,里面含有端口号,同步模块信息,账号密码校验等信息,下面会提供一个配置文件的格式出来,以供参考

4、rsync服务配置的虚拟账号密码

5、可以使用--password-file指定密码文件,免去每次都需要输入密码

1、目标主机开启rsyncd 服务:/usr/bin/rsync --daemon

2、本地使用命令:rsync -avz  --port 873  /tmp/data/* rsync@192.168.1.100::同步模块信息标识 --password-file=本机密码文件地址

rsync的常用参数

-a 归档模式, 表示以递归方式传输文件,并保持所有属性
-d 不递归目录文件,不传输子文件
-e 使用ssh协议进行传输,指定端口号
-r 递归处理所有子文件
-v 显示执行过程详细信息
-z 压缩文件
--delete 表示删除目标目录中源目录中没有的文件
--exclude 表示指定排除不需要传输的文件,等号后面跟文件名,可以是通配符模式(如 *.txt)
--include 参数用来指定必须同步的文件模式,往往与 --exclude 结合使用

rsync的deamon认证相关配置和使用

vim /etc/rsyncd.conf 配置文件

# Minimal configuration file for rsync daemon
# # See rsync(1) and rsyncd.conf(5) man pages for help
# # rsync统一配置文件
#
# # This line is required by the /etc/init.d/rsyncd script
 pid file = /var/run/rsyncd.pid
 #默认端口873,也可以改成别的端口
 port = 873
 address = 0.0.0.0
 uid = www
 gid = www
#
 use chroot = yes
 read only = no
#
# #permission
 incoming chmod = u+rwx,g+rx,o+rx
#
# #limit access to private LANs
# 可以指定IP地址的机器才能连接
 hosts allow=*
# #hosts deny=*
#
 max connections = 5
 motd file = /etc/rsyncd.motd
#
# #This will give you a separate log file
 log file = /var/log/rsync.log
#
# #This will log every file transferred - up to 85,000+ per user, per sync
 transfer logging = yes

 log format = %t %a %m %f %b
 syslog facility = local3
 timeout = 300
#
 [data1]
 path = /data/data1/
 list = yes
 ignore errors
 auth users = rsync
 secrets file = /etc/rsyncd.secrets
 comment = data1目录数据同步
 exclude = adminCache/ protected/runtime/ .git


[data2]
 path = /data/data2/
 list = yes
 ignore errors
 auth users = rsync
 secrets file = /etc/rsyncd.secrets
 comment = data2目录数据同步
 exclude = adminCache/ protected/runtime/ .git

vim /etc/rsyncd.secrets 账号密码,和配置文件里面的auth users值保持一致

rsync:xxxxxx

 说明:

1、这里的rsync是创建非登录用户且没有家目录的用户

useradd -s /sbin/nologin -M rsync

 2、修改用户密码文件属性,只有拥有者可以rwx,组和其他用户都没有rwx权限

chmod 600 /etc/rsyncd.secrets

 rsync连接服务端

rsync -avz --exclude=".git" --exclude="protected/runtime/" --exclude=".env" --port 873  本机数据目录 rsync@192.168.1.100::模块名称 --password-file=本机存放的服务器rsync用户密码

说明:

1、--port为服务端的端口号,默认873可以不用填写,如果是其他端口号,需要填写

2、模块名称是rsyncd.conf 配置文件里面的data1或者data2

3、本机存放的服务器rsync用户密码文件,必须设置权限为600