1. Rsync
Rsync命令是一个远程数据同步的工具,可以通过LAN/WAN快速同步多台主机之间的文件。
同时也是一个快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份、保持链接和权限,且采用优化的同步算法,传输前执行压缩。适用于异地备份,镜像服务器。
2. rsync功能
- 作为命令,实现本地-远程文件同步
- 作为服务,实现本地-远程文件同步
3. rsync特点
-
可以镜像保存整个目录树和文件系统
-
可以保留原有的权限、时间、软硬连接、文件acl、文件属性等信息
-
传输效率高、使用同步算法、只是比较变化
-
支持匿名传输、方便网站镜像、也可以做验证,加强安全
4. rsync同类服务
- Sync同步:刷新文件系统缓存,强制将修改过的数据块写入磁盘,并且更新超级快
- Async异步:将数据先放到缓冲区,再周期性的同步到磁盘
- Rsync远程同步:remote synchronous
5. rsync使用
1)本地使用
格式: rsync 选项 复制源 目标位置
2)通过远程 shell使用
- 拉 :rsync 选项 user@hostIP地址:复制源 目标位置
将远程主机的内容复制到本地主机
- 推:rsync 选项 复制源 user@hostip地址:目标位置
将本地的内容复制到远程主机目标位置
3)访问rsync服务器
- 拉 : rsync 选项 user@hostIP地址::共享模块/复制源 目标位置
将远程主机的内容复制到本地主机的目标位置
- 推 : rsync 选项 复制源 user@hostIP地址::共享模块/目标位置
将本地主机的内容复制到远程主机的目标位置
6. rsync常用选项
-a : 归档模式,以递归方式传输文件,并保持所有属性、时间等,包含 -rtplgoD;
-r : 同步目录是使用,
-v : 同步时显示实时信息(详细信息)
-l : 保留软链接
-L : 同步软链接时会把源文件给同步了
-p : 保持文件的权限属性
-o : 保持文件的属主
-g : 保持文件的属组
-D : 保持设备文件信息
-t : 保持文件的时间属性
--delete:删除目标位置中有而原位置没有的文件
--exclude : 过滤指定文件,例如: --exclude “logs”会把文件名包含logs文件或目录过滤掉,不同步
-p : 显示同步过程,比-v更加详细
-u : 加上该选项后,如果目标文件比复制源的内容新,则不同步
-z : 传输时压缩
7. 配置文件详解
- 配置文件位于: /etc/rsyncd.conf
全局配置
uid = nobody ##同步源中创建和修改文件的用户
gid = nobody ##同步源中创建和修改文件的用户组
use chroot = yes ##锁定用户目录
max connections = 4 ##发起端的最大连接数,
pid file = /var/run/rsyncd.pid ##指定rsync进程号管理文件
port 873 ##监听端口号,默认是873
address = 1.1.1.1 ##监听IP地址
log file = /var/log/rsyncd.log ##指定日志文件
pid file = /var/run/rsyncd.pid ##指定pid文件
host allow = 1.1.1.0/24 ##指定可以访问rsync服务器的客户机IP地址
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
\##不需要压缩的文件扩展名
[share] ##共享名称
path = /home/ftp ##源目录的实际路径
write only = yes ##是否允许写入 only表示仅仅
read only = no ##是否允许只读
auth users = cjk ##授权用户
Secrets file = /etc/rsyncd_users.db ##存放账户信息的数据文件
Ps: 如果使用匿名用户进行操作,只需要将 auth users 和 secrets file选项去掉即可
8. 部署 Rsync 服务
- 系统默认已经安装 Rsync,不需要重新安装
- 如果没有使用 yum -y install rsync 安装即可
实验环境:
Host | IP |
---|---|
Rsync | 1.1.1.1 |
Client | 1.1.1.2 |
1) 修改配置文件
[root@localhost ~]# vim /etc/rsyncd.conf
uid = nobody
gid = nobody
use chroot = yes
max connections = 4
pid file = /var/run/rsyncd.pid
port 873
address = 1.1.1.1
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
# exclude = lost+found/
# transfer logging = yes
# timeout = 900
# ignore nonreadable = yes
# dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
[share]
path = /tmp/www
# comment = ftp export area
writable = yes
read only = no
auth users = cjk
secrets file = /etc/rsyncd_users.db
2) 创建目录
- 创建一个实验的目录
# 备份用户要对该目录拥有读取权限,所以将权限改为777,为了验证
[root@localhost ~]# mkdir /tmp/www
[root@localhost ~]# chmod 777 /tmp/www
[root@localhost ~]# ll /tmp | grep www
drwxrwxrwx. 2 root root 6 9月 9 10:22 www
3)为备份用户创建数据文件(用户目录)
-
根据上一步的设置,创建账号数据文件,添加一行用户记录,以冒号分开,
因为是明文存放用户和密码,需要调整权限,必须为600
[root@localhost ~]# vim /etc/rsyncd_users.db
cjk:123 ##无需建立同名的系统用户,对应用户名与密码
[root@localhost ~]# chmod 600 /etc/rsyncd_users.db
[root@localhost ~]# ll /etc/rsyncd_users.db
-rw-------. 1 root root 8 9月 9 10:24 /etc/rsyncd_users.db
4)启动rsync服务程序
[root@localhost ~]# rsync --daemon
[root@localhost ~]# netstat -anpt | grep rsync
tcp 0 0 1.1.1.1:873 0.0.0.0:* LISTEN 61511/rsync
- 关闭服务
kill $(cat /var/run/rsync.pid)
5) 编写rsync启动脚本
-
为了方便的管理rsync服务,所以编写一个脚本
为了使用systemctl命令进行管理
[root@localhost ~]# vim /etc/rc.d/init.d/rsyncd
#! /bin/bash
#chkconfig:35 25 23
case $1 in
start)
rsync --daemon
;;
stop)
kill $(cat /var/run/rsyncd.pid)
;;
restart)
kill $(cat /var/run/rsyncd.pid)
rsync --daemon
;;
*)
echo "(start / stop / restart )"
esac
- 添加至系统管理服务
[root@localhost ~]# chkconfig --add rsyncd
- 使用 systemctl 进行管理
[root@localhost ~]# netstat -anpt | grep rsync
tcp 0 0 1.1.1.1:873 0.0.0.0:* LISTEN 61857/rsync
6) 同步数据
- Client 创建同步的目录
[root@localhost ~]# mkdir /aaa
- Client 向上同步文件(上传)
[root@localhost ~]# rsync -avz /etc/passwd cjk@1.1.1.1::share
Password:
sending incremental file list
发送增量文件列表
passwd
rsync: chgrp "/.passwd.yQMm4Q" (in share) failed: Operation not permitted (1)
sent 958 bytes received 117 bytes 716.67 bytes/sec
total size is 2,231 speedup is 2.08
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]
- 将 Rsync 数据向下同步
[root@localhost ~]# rsync -avz cjk@1.1.1.1::share/passwd /aaa/
Password:
receiving incremental file list
passwd
sent 43 bytes received 959 bytes 400.80 bytes/sec
total size is 2,231 speedup is 2.23
##将服务器的passwd文件向下同步;针对于单个文件
-
rsync -avz cjk@1.1.1.1::share /aaa/ ##默认向下传输所有
-
其余选项同步时,要注意,只有两端都有的属主属组太能够保持原有的属性
7) 同步链接文件
-
创建软连接文件
[root@localhost test1]# ln -s /etc/init.d/network /test1/network
-
如果使用 之前的命令,则无法同步链接文件
[root@localhost test1]# rsync -rv /test1/* root@1.1.1.102:/test2
-
B 主机查看(没有同步 链接文件)
[root@localhost test2]# ls e f g q s sf w
-
使用 选项 -l 同步链接文件
[root@localhost test1]# rsync -lv /test1/* root@1.1.1.102:/test2
-
这个时候 再 去 B 主机目录查看
[root@localhost test2]# ls
e f g network q s sf w
8) 选项 -L 的使用
- 我们会在以下实验中发现, 使用 -L 将链接文件同步过去之后不再 是链接文件而是 链接文件的源文件
[root@localhost test1]# ln -s /etc/init.d/network /test1/network
[root@localhost test1]# ll
lrwxrwxrwx 1 root root 19 2月 8 22:58 network -> /etc/init.d/network
-
推, 向下同步
[root@localhost test1]# rsync -aLv /test1/network root@1.1.1.102:/test2/
-
在 主机 B 中 查看
[root@localhost test2]# ll 总用量 8 -rwxr-xr-x. 1 root root 7293 1月 3 2018 network