目录
1、rsync服务详解
rsync具有本地和远程连他主机之间的数据快熟复制同步镜像、远程备份的功能。类似于ssh的scp命令。
1)rsync服务工作原理
2)scp命令与rsync服务工作方式对比
ssh的scp命令 | rsync服务 |
scp每次都是全量拷贝 优点: a、保证了数据的完整性 | rsyncs是增量拷贝 优点: a、可以很容易做到保持原来文件的权限、时间、软硬连接等。 b、速度快。第一次同步时rsync复制全部内容,但在下一次值传输修改过的内容 c、压缩传输。rysnc在传输的过程中可以实行压缩及解压缩操作,可以使用更少的带宽 d、rsync不仅可以远程同步数据(类似于scp),而且可以本地同步数据(类似于cp),做差异同步 |
2、rsync的传输模式
在官方手册中查看可知:
rsync的传输模式 | |
本地模式 | -a 保持不变 -v 显示过程 -z 传输过程中压缩,提高效率 |
远程访问模式 | #将远端文件拉(下载)到本地 Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] #将本地文件推送(上传)到远端 Push: rsync [OPTION...] SRC... [USER@]HOST:DEST |
守护进程模式(C/S架构) | #把远程机器的文件同步到本地 rsync [OPTION]… [USER@]HOST::SRC [DEST] rsync [选项] [--port=] [--password-file=] [用户名@]服务端IP::[模块名] [/local/path] 举个例子: rsync -azv --password-file=/etc/rsync.passwd myuser@10.10.10.10::backup local/ #把本地的文件同步到远程服务器 rsync [OPTION]… [SRC]… [USER@]HOST::DEST # rsync [选项] [--port=] [--password-file=] [/local/path] [用户名]@服务端IP::[模块名] 举个例子: rsync -azv --password-file=/etc/rsync.passwd local/ myuser@10.10.10.10::backup |
1)本地模式
##本地 rsync 选项 源 目标
Local: rsync [OPTION...] SRC... [DEST]
#将/etc目录备份到/opt目录下,和cp的区别在于会自动增量备份
rsync -avz /etc /opt
2) 远程访问模式
# 默认使用 SSH 进行远程登录和数据传输
# 不需要做任何配置,需要都安装rsync,操作上类似scp
#将etc推送到10.10.10.10下的自定义文件夹下
rsync -az /etc/ 10.10.10.10:/opt/etc-$(hostname)-$(date +%F)
3)守护进程模式*
环境准备
主机 | IP地址 |
rsync服务端 : rsync_server | 192.168.81.132/24 |
rsync客户端 : rsync_client | 192.168.81.133/24 |
a、配置部署服务端
安装rsync
修改/etc/rsync.conf配置文件。
uid = rsync #运行进程的用户
gid = rsync #运行进程的用户组
port = 873 #监听端口
fake super = yes #无需让rsync以root身份运行,允许接收文件的完整属性
use chroot = no #禁锢推送的数据至某个目录,不允许跳出该目录
max connections = 200 #最大连接数
timeout = 600 #超时时间
ignore errors #忽略错误信息
read only = false #对备份数据可读写
list = false #不允许查看模块信息
auth users = myuser #定义虚拟用户,作为连接认证用户
secrets file = /etc/rsync.passwd #定义rsync服务用户连接认证密码文件路径
log file = /var/log/rsyncd.log #定义日志文件路径
hosts allow = 192.168.81.0/24 #只允许192.168.81.0/24网段内的IP地址连接
[backup] #定义模块信息.装到哪里哪里就是服务端
comment = commit #模块注释信息
path = /backup #定义接收备份数据目录
避坑指南:将上面参数信息写入到配置文件中,需要将参数后面的注释行删除!!!
如果大家是直接复制的话,参考命令: sed -i 's/#.*//g' /etc/rsyncd.
根据配置文件中信息,创建必要信息。
创建虚拟用户
创建虚拟用户密码文件。
# 服务端需要定义一个客户端连接的虚拟用户名和密码
# 密码文件形式 user:passwd
创建用户上传数据的目录/backup,并且所属组为rsync
启动rsync服务,并且将其加入到开机启动项中
验证rsync服务是否启动成功
最后,配置防火墙,放行873端口的流量
b、配置部署客户端
# 在客户端安装完毕rsync服务后,是不需要启动rsync服务的。
# 只需要在客户端创建连接rsync服务器时,验证用户所需要的密码文件即可。
# 该密码文件中的密码要与rsync服务器上的密码文件中的密码对应
# 并且也要与rsync服务器rsyncd.conf配置文件中的认证模块中的用户匹配
安装rsync服务
配置防火墙,放行873端口的流量。
查看rsync 守护进程分配所有的module列表,可以执行下面命令
rsync rsync://服务端IP地址
c、使用rsync
进行实验前,查看rsync的备份数据目录
示例1:在客户端新建文件hello.txt ,文件内容为“ABCDE”,然后将hello.txt文件上传到rsync服务端。
问题记录:
遇到的第一个报错。
临时关闭selinux后 ,刚才的问题得到了解决。
selinux永久关闭的方法:修改配置文件,然后重启生效。
使用sed命令一键修改,就无需使用vim编辑器修改了。
不理解这条命令的小伙伴可以参考:这篇博文
然后,selinux问题解决后,再次同步。
示例2:在服务端新建文件text.txt,文件内容为"123456789",然后在本地同步服务端的备份数据目录中数据到客户端的家目录的backup目录中。
d、补充配置
如果不想客户端都需要输入密码,实现免交互。需要在客户端配置密码验证文件,密码为服务端定义的认证密码。
避坑指南:在客户端用于密码验证的文件必须与服务端配置参数中的密码验证文件同名!!!
然后,只需要在远程同步数据时,加上 --password-file=客户端存放验证密码文件路径 这个参数即可。
3、使用crontab实现定时备份
编写备份脚本,然后crontab -e 设置定时任务,实现每周五下午6.执行备份脚本,远程备份数据。