文章目录
一、功能
rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。rsync软件适用于unix/linux/windows等, 目前,已支持跨平台,可以在Windows与Linux间进行数据同步。
特征:
- 可以镜像保存整个目录树和文件系统;
- 可以很容易做到保持源文件的权限, 时间,软硬链接等;
- 无需特殊权限即可安装;
- 优化流程,传输效率高;
- 可以使用scp, ssh等方式来传输文件, 当然也可以通过直接的socket连接;
- 支持匿名传输
二、命令格式
# Rsync的命令格式常用的有以下三种;
rsync [OPTION]... SRC DEST
rsync [OPTION]... SRC [USER@]HOST:DEST
rsync [OPTION]... [USER@]HOST:SRC DEST
三、选项说明
-L 保留源文件的软连接文件
-H 保留源文件的硬链接文件
-r 递归模式,包含目录及子目录的所有信息
-z 在传输文件的同时进行压缩
-v 显示同步过程的信息
-t 保留文件的时间标记(修改时间不变)
-o 保留文件的属主标记
-p 保留了文件的权限标记
-D 保留了设备文件和一些特殊的文件
-S 对零散文件的处理
-g 保留了文件的属组信息
-a 归档
-v 显示详细的传输信息
-P 显示数据传输的进度信息
--version 查看rsync版本
--exclude=PATTERN 排除指定数据不被传输
--exclude-from=file 排除指定数据不被传输(批量排除)
--bwlimit=RATE 显示传输的速率 100Mb/8=12.5MB
--delete 无差异同步参数(慎用)
PS: 如果让-o和-g参数生效,需要将配置文件uid和gid改为root,需要将 fake super参数进行注释
四、常用示例
4.1 拷贝本地文件
[root@study ~]# ls
anaconda-ks.cfg
[root@study ~]# rsync -a anaconda-ks.cfg a.cfg
[root@study ~]# ll a.cfg
-rw-------. 1 root root 1388 Nov 23 2020 a.cfg
4.2 将本地机器的内容拷贝到远程机器
[root@study /]# rsync -avz anaconda-ks.cfg root@192.168.10.133:/root/b.cfg # 两边都要安装rsync
4.3 将远程机器的内容拷贝到本地机器
#目录后面没有加"/",就表示拷贝当前目录和目录下的文件
[root@study ~]# rsync -avz root@192.168.10.133:/etc/yum.repos.d /root/
[root@study ~]# ls
anaconda-ks.cfg yum.repos.d
# 目录后面加"/", 表示拷贝当前目录下的文件
[root@study ~]# rsync -avz root@192.168.10.133:/etc/yum.repos.d/ /root/
[root@study ~]# ls
anaconda-ks.cfg CentOS-CR.repo CentOS-Media.repo CentOS-x86_64-kernel.repo
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Sources.repo
CentOS-Base.repo.backup CentOS-fasttrack.repo CentOS-Vault.repo
五、rsync守护进程部署方式
客户端—服务端
5.1 rsync守护进程服务端配置
第一步: 下载安装软
rpm -qa|grep rsync
yum install -y rsync
第二步: 编写配置文件
man rsyncd.conf
vim /etc/rsyncd.conf
##created by HQ at 2017
###rsyncd.conf start##
uid = rsync --- 指定管理备份目录的用户
gid = rsync --- 指定管理备份目录的用户组
port = 873 --- 定义rsync备份服务的网络端口号
fake super = yes --- 将rsync虚拟用户伪装成为一个超级管理员用户
use chroot = no --- 和安全相关的配置
max connections = 200 --- 最大连接数 同时只能有200个客户端连接到备份服务器
timeout = 300 --- 超时时间(单位秒)
pid file = /var/run/rsyncd.pid --- 记录进程号码信息 1.让程序快速停止进程 2. 判断一个服务是否正在运行
lock file = /var/run/rsync.lock --- 锁文件
log file = /var/log/rsyncd.log --- rsync服务的日志文件 用于排错分析问题
ignore errors --- 忽略传输中的简单错误
read only = false --- 指定备份目录是可读可写
list = false --- 使客户端可以查看服务端的模块信息
hosts allow = 172.16.1.0/24 --- 允许传输备份数据的主机(白名单)
hosts deny = 0.0.0.0/32 --- 禁止传输备份数据的主机(黑名单)
auth users = rsync_backup --- 指定认证用户
secrets file = /etc/rsync.password --- 指定认证用户密码文件 用户名称:密码信息
[backup] --- 模块信息
comment = "backup dir by oldboy"
path = /backup --- 模块中配置参数 指定备份目录
第三步: 创建rsync服务的虚拟用户
[root@server ~]# useradd rsync -M -s /sbin/nologin
第四步: 创建备份服务认证密码文件
[root@server ~]# echo "rsync_backup:redhat123" > /etc/rsync.password
# 赋予文件权限
[root@server ~]# chmod 600 /etc/rsync.password
第五步: 创建备份目录并修改属主属组信息
[root@server ~]# mkdir /backup/ # 创建备份目录
[root@server ~]# chown rsync.rsync /backup/ # 修改属主属组权限
第六步: 启动备份服务
[root@server ~]# systemctl restart rsyncd # 重启服务
[root@server ~]# systemctl enable rsyncd # 设置开机自启动
[root@server ~]# systemctl status rsyncd # 查看rsyncd服务状态
● rsyncd.service - fast remote file copy program daemon
Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2021-06-13 22:52:02 CST; 20s ago
Main PID: 4126 (rsync)
CGroup: /system.slice/rsyncd.service
└─4126 /usr/bin/rsync --daemon --no-detach
Jun 13 22:52:02 server systemd[1]: Started fast remote file copy program daemon.
5.2 rsync守护进程名称语法
Access via rsync daemon
-
客户端做拉的操作: 主要用于恢复数据
Pull:
rsync [OPTION…] [USER@]HOST::SRC… [DEST]
rsync [OPTION…] rsync://[USER@]HOST[:PORT]/SRC… [DEST] -
客户端做推的操作: 主要用于备份数据
Push:
rsync [OPTION…] SRC… [USER@]HOST::DESTsrc: 要推送备份数据信息 [USER@]: 指定认证用户信息 HOST: 指定远程主机的IP地址或者主机名称 ::DEST: 备份服务器的模块信息
rsync [OPTION…] SRC… rsync://[USER@]HOST[:PORT]/DEST
5.3 rsync守护进程客户端配置
第一步: 创建一个秘密文件
[root@client ~]# echo "redhat123" > /etc/rsync.password # /etc/rsync.password 这个文件要和服务端匹配
[root@client ~]# chmod 600 /etc/rsync.password # 修改权限
第二步: 进行免交互传输数据测试
[root@client ~]# rsync -azv /etc/hosts rsync_backup@192.168.10.133::backup --password-file=/etc/rsync.password
sending incremental file list
hosts
sent 140 bytes received 43 bytes 366.00 bytes/sec
total size is 158 speedup is 0.86
六、守护进程服务企业应用
6.1 守护进程多模块功能配置
sa sa_data.txt
dev dev_data.txt
dba dba_data.txt
[backup]
comment = "backup dir by oldtest"
path = /backup
[dba]
comment = "backup dir by oldtest"
path = /dba
[dev]
comment = "backup dir by oldtest"
path = /devdata
6.2 守护进程的排除功能实践
准备环境:
[root@client ~]# mkdir -p /oldtest
[root@client ~]# mkdir -p /oldtest/{a..c}
[root@client ~]# touch /oldtest/{a..c}/{1..3}.txt
[root@client ~]# tree /oldtest
/oldtest
├── a
│ ├── 1.txt
│ ├── 2.txt
│ └── 3.txt
├── b
│ ├── 1.txt
│ ├── 2.txt
│ └── 3.txt
└── c
├── 1.txt
├── 2.txt
└── 3.tx
- 将/oldtest目录下面 a目录数据全部备份 b目录不要备份1.txt文件 c整个目录不要做备份;
–exclude=PATTERN (排除指定数据不被传输)
绝对路径方式:
[root@client ~]# rsync -azv /oldtest --exclude=/oldtest/b/1.txt --exclude=/oldtest/c/ rsync_backup@192.168.10.133::backup --password-file=/etc/rsync.password
sending incremental file list
oldtest/
oldtest/a/
oldtest/a/1.txt
oldtest/a/2.txt
oldtest/a/3.txt
oldtest/b/
oldtest/b/2.txt
oldtest/b/3.txt
sent 382 bytes received 135 bytes 206.80 bytes/sec
total size is 0 speedup is 0.0
查看服务端是否已经备份
[root@server ~]# tree /backup/
/backup/
├── hosts
└── oldtest
├── a
│ ├── 1.txt
│ ├── 2.txt
│ └── 3.txt
└── b
├── 2.txt
└── 3.txt
3 directories, 6 file
相对路径方式:
[root@client ~]# rsync -avz /oldtest --exclude=b/1.txt --exclude=c/ rsync_backup@192.168.10.133::backup password-file=/etc/rsync.password
- 将/oldboy目录下面 a目录数据全部备份 b目录不要备份1.txt文件 c整个目录1.txt 3.txt文件不要备份
–exclude-from=file — 批量排除
第一步: 编写好一个排除文件
[root@client ~]# cat /oldtest/exclude.txt
b/1.txt
c/2.txt
c/3.txt
exclude.txt # 这里出现exclude.txt是因为我们要把排除文件删掉,这不是我们想要的内容
第二步: 实现批量排除功能
[root@client ~]# rsync -avz /oldtest --exclude-from=/oldtest/exclude.txt rsync_backup@192.168.10.133::backup --password-file=/etc/rsync.password
sending incremental file list
oldtest/
oldtest/a/
oldtest/a/1.txt
oldtest/a/2.txt
oldtest/a/3.txt
oldtest/b/
oldtest/b/2.txt
oldtest/b/3.txt
oldtest/c/
oldtest/c/1.txt
sent 457 bytes received 158 bytes 1,230.00 bytes/sec
total size is 0 speedup is 0.00
6.3 守护进程来创建备份目录
[root@client ~]# rsync -azv /etc/hosts rsync_backup@192.168.10.133::backup/192.168.10.132/ --password-file=/etc/rsync.password
sending incremental file list
created directory 192.168.10.132
hosts
sent 140 bytes received 80 bytes 440.00 bytes/sec
total size is 158 speedup is 0.72
# 注意:要创建的目录后面一定要跟上/,表示在此目录下
# 客户端无法在服务端创建多级目录