Rsync的介绍
远程数据同步工具,支持本地复制与远程同步,优于scp,cp。rsync基础采用c/s架构,监听端口tcp 873;
一、环境准备
1.两台centos7 系统主机
2.主机内网可互通
3.修改主机名
4.配置好hosts文件
二、命令的使用
1.安装rsync命令
[root@server-rsync ~]# yum install rsync -y
2.rsync常用选项
# 最常用选项
rsync -avz
# 选项说明
-a 包含-rtplgoD
-r 同步目录时要加上,类似cp时的-r选项
-v 同步时显示一些信息,让我们知道同步的过程
-l 保留软连接
-L 加上该选项后,同步软链接时会把源文件给同步
-p 保持文件的权限属性
-o 保持文件的属主
-g 保持文件的属组
-D 保持设备文件信息
-t 保持文件的时间属性
--delete 删除DEST中SRC没有的文件
--exclude 过滤指定文件,如--exclude “logs”会把文件名包含logs的文件或者目录过滤掉,不同步
-P 显示同步过程,比如速率,比-v更加详细
-u 加上该选项后,如果DEST中的文件比SRC新,则不同步
-z 传输时压缩
3.本地复制
[root@server-rsync ~]# ls
anaconda-ks.cfg
[root@server-rsync ~]# ls /opt/
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo zhouxiang
[root@server-rsync ~]# rsync -avz /opt/* ./
sending incremental file list
CentOS-Base.repo
CentOS-CR.repo
CentOS-Debuginfo.repo
CentOS-Media.repo
CentOS-Sources.repo
CentOS-Vault.repo
CentOS-fasttrack.repo
zhouxiang
sent 3403 bytes received 164 bytes 7134.00 bytes/sec
total size is 7825 speedup is 2.19
[root@server-rsync ~]# ls
anaconda-ks.cfg CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo zhouxiang
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo
[root@server-rsync ~]#
三、rsync 通过ssh通道传输方式
1.推送数据到远程主机
# 服务端推送数据客户端通过ssh通道传输
[root@server-rsync ~]# rsync -avz -e 'ssh -p22' /opt/* root@client-rsync:/opt/
root@client-rsync's password:
sending incremental file list
CentOS-Base.repo
CentOS-CR.repo
CentOS-Debuginfo.repo
CentOS-Media.repo
CentOS-Sources.repo
CentOS-Vault.repo
CentOS-fasttrack.repo
zhouxiang
sent 3403 bytes received 164 bytes 1019.14 bytes/sec
total size is 7825 speedup is 2.19
[root@server-rsync ~]#
# 进去客户端查看
[root@client-rsync ~]# ls /opt/
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo zhouxiang
[root@client-rsync ~]#
2.从远程主机拉取数据
[root@server-rsync ~]# rsync -avz -e 'ssh -p22' root@client-rsync:/opt/ ./
root@client-rsync's password:
receiving incremental file list
./
CentOS-Base.repo
CentOS-CR.repo
CentOS-Debuginfo.repo
CentOS-Media.repo
CentOS-Sources.repo
CentOS-Vault.repo
CentOS-fasttrack.repo
zhouxiang
sent 166 bytes received 3425 bytes 1026.00 bytes/sec
total size is 7825 speedup is 2.18
[root@server-rsync ~]# ls
anaconda-ks.cfg CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo zhouxiang
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo
[root@server-rsync ~]#
四、rsync 守护进程传输方式,自身非常重要的功能
1.用法介绍
# 这是守护进程传输方式常用写法
[root@server-rsync ~]# rsync -avz /root/C* rsync_backup@172.168.100.40::backup/ --passwprd-file=/etc/rysnc.passwprd
# rsync_backup 表示rsync的虚拟用户,传输时使用rsync的用户传输
# ::backup/ 表示模块并不是目录,但可以在模块中定义这个目录(服务端需备份的路径)
# --passwprd-file=/etc/rysnc.passwprd 表示指定rysnc虚拟用户的密码文件
使用 rsync 守护进程传输方式与ssh没有关系,守护进程方式传输数据时不需要输入ssh密码也不需要ssh密钥认证,只需要配置好rsync虚拟用户和密码,因为这种方式是以配置的rsync虚拟用户的省份传输数据的。
2.rsync 服务端配置 /etc/rsyncd.conf
# 以rsync用户身份来传输数据(需创建这个用户)
uid = rsync
# 以rsync用户组来传输数据
gid = rsync
# 监听端口默认873
port = 873
# 程序出现文件就会开启,开启给个空目录就行
use chroot = no
# 最大可连接客户端数
max connections =2000
# 超时
timeout = 600
# rsync进程pid存放文件
pid file = /var/run/rsyncd.pid
# 锁文件
lock file = /var/run/rsync.lock
# 日志文件
log file = /var/log/rysnc.log
# 忽略错误
ignore errors
# 可读写
read only = false
# 不允许列出模块名称
list = false
# 监听内网rsync服务端地址
address = 172.168.100.30
# 允许传输网段
hosts allow = 172.168.100.0/24
# 拒绝传输网段,一般不使用
hosts deny = 0.0.0.0/32
#指定rsync虚拟用户,与系统用户无关
auth users = rsync_backup
# 指定rsync虚拟用户密码文件
secrets file = /etc/rsync.password
# 指定模块并定义模块对应的目录,可配置多个模块
[backup]
path = /backup
[data]
path = /data
# 拷贝进去再修改
uid = rsync
gid = rsync
port = 873
use chroot = no
max connections =2000
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rysnc.log
ignore errors
read only = false
list = false
address = 172.168.100.30
hosts allow = 172.168.100.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
path = /backup
[data]
path = /data
3.创建 rsync 这个用户,不创建家目录,不可登录系统
[root@server-rsync ~]# useradd -M -s /sbin/nologin rsync
[root@server-rsync ~]# id rsync
uid=1000(rsync) gid=1000(rsync) groups=1000(rsync)
4.创建 /backup/ 目录 并授权给 rsync用户
[root@server-rsync ~]# mkdir /backup
[root@server-rsync ~]# chown -R rsync:rsync /backup/
[root@server-rsync ~]# ll -d /backup/
drwxr-xr-x. 2 rsync rsync 6 Apr 6 04:59 /backup/
[root@server-rsync ~]#
5.创建rsync_backup虚拟用户和密码文件,并设置600权限
[root@server-rsync ~]# echo "rsync_backup:000000" > /etc/rsyncd.password
[root@server-rsync ~]# cat /etc/rsyncd.password
rsync_backup:000000
[root@server-rsync ~]#
# 设置600 权限防止因权限问题报错
[root@server-rsync ~]# chmod 600 /etc/rsyncd.password
[root@server-rsync ~]# ll /etc/rsyncd.password
-rw-------. 1 root root 20 Apr 6 05:06 /etc/rsyncd.password
[root@server-rsync ~]#
6.启动rsync守护进程,并查看进程和端口是否启动,关闭防火墙
[root@server-rsync ~]# rsync --daemon
[root@server-rsync ~]# ss -lntp |grep 873
LISTEN 0 5 172.168.100.30:873 *:* users:(("rsync",pid=2764,fd=3))
[root@server-rsync ~]#
[root@server-rsync ~]# ps aux |grep rsync
root 2764 0.0 0.0 114640 488 ? Ss 05:11 0:00 rsync --daemon
root 2774 0.0 0.0 112644 948 pts/0 R+ 05:12 0:00 grep --color=auto rsync
[root@server-rsync ~]#
# 关闭防火墙
[root@server-rsync ~]# systemctl stop firewalld
[root@server-rsync ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.
[root@server-rsync ~]#
[root@server-rsync ~]# setenforce 0
1.推送数据至远程主机
方式1:这种推送需手动输入密码
[root@client-rsync-node1 ~]# #rsync -avz /backup/ rsync_backup@server-rsync::backup/
方式2:客户端总配置密码文件,通过指定密码文件进行直接推送
[root@client-rsync-node1 ~]# vi /etc/rsync.password
[root@client-rsync-node1 ~]# cat /etc/rsync.password
000000
# 密码文件必须设置权限600,否则会报错
[root@client-rsync-node1 ~]# chmod 600 /etc/rsync.password
[root@client-rsync-node1 ~]# rsync -avz /backup/ rsync_backup@server-rsync::backup/ --password-file /etc/rsync.password
2.从远程拉取数据
[root@client-rsync-node2 ~]# rsync -avz rsync_backup@server-rsync::backup /root/ --password-file /etc/rsync.password
五、无差异备份数据
在服务端数据和客户端数据同步时,如果删除服务端的某条备份数据后,在到客户端进行无差异备份则服务端没有的数据客户端就算有也会删除
# 无差异数据拉取
[root@client-rsync-node2 ~]# rsync -avz --delete rsync_backup@server-rsync::backup /backup/ --password-file /etc/rsync.password
# 无差异数据推送
[root@client-rsync-node2 ~]# rsync -avz --delete /backup/ rsync_backup@server-rsync::backup --password-file /etc/rsync.password