rsync远程同步


1.rsyc基本概述
1)remote sync(远程同步)
2)开源
3)备份
4)官网:https://rsync.samba.org/
5)端口:tcp 873
6)运行模式:
C/S:客户端 服务端
B/S:浏览器 服务端
7)常见备份方式
完全备份:对所有数据做备份
增量备份:只备份上一次备份之后增加的数据
差异备份:备份是上一次完全备份后变化的差异

常见备份组合
完全+增量:一次完全+多次增量
完全+差异:一次完全+一次差异

2.rsync应用场景
数据同步方式
推:push,上传(upload)
将客户端数据上传到rsync服务端
所有主机推送本地数据至rsync备份服务器,会导致数据同步缓慢(适合少量数据备份)

拉:pull,下载(download)
将rsync服务端的数据下载到客户端
rsync备份服务端拉取所有主机上的数据,会导致备份服务器开销大
推拉是由客户端发起的

3.rsync传输模式
rsync大致分为三种数据传输模式
-v 详细模式输出
-z 传输时进行压缩以提高传输效率
-a 以递归方式传输文件,并保持所有文件的属性
-r 对子目录以递归模式,即目录下的所有目录都以同样的模式传输,注意是小写的r
-P 显示同步的过程及传输时的进度等信息
-e 使用信道协议,指定替代rsh的shell程序,例如ssh
-n 测试选项,模拟执行
-o 保持文件属主信息
-p 保持文件权限
-g 保持文件属主信息
--exclued 指定排除不需要传输的文件模式(和tar参数一样)
--delete 是目标目录内容和源文件保持一致,删除不同的文件
--bwlimit=KBPS 限制传输速度
本地方式:
类似于cp命令 如下:
rsync -avzropg 选项
rsync -avz 只是作为增量备使用
[root@keepalived01 ~]# rsync -avzropg /etc/passwd /data/
passwd就会复制到/data/下

如果让两个文件夹一模一样的话就要使用delete参数
就是rsync -avz /data/ /opt/ --delete (完全一样)
这时就会删除两个文件夹不一样的地方,直到完全一样

远程方式:
使用的是ssh协议,过程是加密,类似于scp命令
tcp传输过程,每传输一个数据都会有连接的建立,维护,断开过程

守护方式:
服务端操作流程:
守护进程传输方式:rsync自身非常重要的功能(不使用系统用户,更加安全)
----1.拉取rsync备份服务的backup模块数据至本地/mnt目录
Pull:rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync ----命令
[OPTION...] ----选项
[USER@] ----远程主机用户(虚拟用户)
HOST:: ----远程主机地址
SRC... ----远程主机模块(不是目录)
[DEST] ----远程主机数据备份至本地位置
例子:# rsync -avz rsync_backup@192.168.20.21::backup/ /mnt/ --password-file=/etc/rsync.password

----2.将本地/mnt/目录推送至rsync备份服务器的backup
Push:rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync ----命令
[OPTION...] ----选项
SRC... ----远程主机模块(不是目录)
[USER@] ----远程主机用户(虚拟用户)
HOST:: ----远程主机地址
[DEST] ----将远程主机模块备份至本地位置
例子:# rsync -avz /mnt/ rsync_backup@192.168.20.21::backup/ --password-file=/etc/rsync.password

准备:

192.168.20.21            服务端

192.168.20.22            客户端

服务端配置:
1)安装软件包
yum -y install rsync
2)修改配置文件
查找配置文件
# rpm -qc rsync
/etc/rsyncd.conf
/etc/sysconfig/rsyncd
# rpm -ql rsync | grep /etc/
/etc/rsyncd.conf
/etc/sysconfig/rsyncd
修改配置文件 /etc/rsyncd.conf

path = /backup
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.password
log file = /var/log/rsyncd.log
#########################################
[backup]
comment = welcome to oldboyedu backup!
path = /backup

3)创建程序用户

# useradd -M -s /sbin/nologin rsync
4)创建目录
# mkdir [-p] /backup
# chown -R rsync:rsync /backup
5)创建虚拟用户认证文件
# echo "rsync_backup:1" > /etc/rsync.password
# chmod 600 /etc/rsync.password
6)启动服务
# systemctl start rsyncd
# systemctl enable rsyncd
查看端口号
# ss -antulp | grep 873

客户端操作流程:
安装rsync包
# yum -y install rsync
客户端验证:
查看报错日志文件:
tail /var/log/secure
tail /var/log/messages
1)验证
Access via rsync daemon: 守护进程方式传输
Push:rsync [OPTION...] SRC... [USER@]HOST::DEST
Pull:rsync [OPTION...] [USER@]HOST::SRC... [DEST]

推:上传
客户端推送/etc/至服务端/backup/
# rsync -avz /etc/ rsync_backup@192.168.20.21::backup
# mkdir /null/
# rsync -avz /null/ rsync_backup@192.168.20.21::backup --delete 清空服务端的backup目录里面的文件

拉:下载
# cp -r /etc/hosts /etc/passwd /etc/fstab /backup
ps:在cp命令中 前面指定文件再多都是源文件(/etc/hosts /etc/passwd /etc/fstab) 最后一个才是目标文件(/backup)
客户端从服务端将backup模块下的内容下拉到本地/mnt/
# rsync -avz rsync_backup@192.168.20.21::backup/ /mnt/

排错注意:
1)如果服务端密码文件(/etc/rsync.password)没有修改权限为600,会报错
2)需要考虑服务端下拉的文件权限,主要是读权限

4.免密
1)方法一:适合终端执行指定用户密码文件
在客户端创建密码文件,并给600权限
# echo "1" > /etc/rsync.password
# cat /etc/rsync.password
1
# chmod 600 /etc/rsync.password
# rsync -avz rsync_backup@192.168.20.21::backup/ /mnt/ --password-file=/etc/rsync.password

2)方法二:适合写脚本,强烈推荐方式
在/etc/profile文件中定义全局变量
export RSYNC_PASSWORD=1
这样就不需要输入--password-file=/etc/rsync.password这句话了
# rsync -avz rsync_backup@192.168.20.21::backup/ /mnt/