一.rsync简介
1.什么是rsync
- rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。并且可以不进行改变原有数据的属性信息,实现数据的备份迁移特性。
- rsync(remote synchronize)是Liunx/Unix下的一个远程数据同步工具。
- 它可通过LAN/WAN快速同步多台主机间的文件和目录,并适当利用rsync算法(差分编码)以减少数据的传输。
- rsync算法并不是每一次都整份传输,而是只传输两个文件的不同部分,因此其传输速度相当快
2.rsync的优点
- 可以镜像保存整个目录树和文件系统。
- 可以做到保持原来文件的权限、时间、软硬连接等。
- 无需特殊权限即可安装。
- 快速:第一次同步时rsync复制全部内容,但在下一次值传输修改过的内容
- 压缩传输:rysnc在传输的过程中可以实行压缩及解压缩操作,可以使用更少的带宽
- 安全:可以使用scp、ssh等方式来进行文件传输
- 支持匿名传输,以方便进行网站镜像
- rsync不仅可以远程同步数据(类似于scp),而且可以本地同步数据(类似于cp),做差异同步
3.rsync同步的方式
全量备份:原有的数据全部传送,把原来的文件和新的文件一起统一传送,全量复制,效率低差量备份:备份上次完全备份以后有变化的数据(针对的是上次的完全备份,备份过程中不清除存档属性)增量备份:在传输数据之前通过算法将你有的数据和我有的数据进行对比,把不一样的数据通过网络传输增量复制,效率高
4.rsync的认证方式
rsync有两种常用的认证方式,一种是rsync-daemon方式,另外一种是ssh方式。 在平时使用过程,我们使用最多的是rsync-daemon方式。 注意:在使用rsync时,服务器和客户端都必须安装rsync程序。
4.1 rsync-daemon认证
rsync在rsync-daemon认证方式下,默认监听TCP的873端口。
rsync-daemon认证方式是rsync的主要认证方式,这个也是我们经常使用的认证方式。 并且也只有在此种模式下,rsync才可以把密码写入到一个文件中。
注意: rsync-daemon认证方式,需要服务器和客户端都安装rsync服务 并且只需要rsync服务器端启动rsync,同时配置rsync配置文件。 客户端启动不启动rsync服务,都不影响同步的正常进行。
4.2 ssh认证
rsync在ssh认证方式下,可通过系统用户进行认证,即在rsync上通过ssh隧道进行传输,类似于scp工具。
此时同步操作不在局限于rsync中定义的同步文件夹。
注意: ssh认证方式,不需要服务器和客户端配置rsync配置文件 只需要双方都安装rsync服务,并且也不需要双方启动rsync。
若rsync服务端SSH为标准端口,此时rsync使用方式如下:
rsync -avzp /root/test root@10.10.10.10:/root/
# 从远端服务器下载到本地
rsync -avzp root@10.10.10.10:/var/ /root/test
若rsync服务端SSH为非标准端口,可通过rsync的-e参数进行端口指定。使用方式如下:
rsync -avz /root/test -e 'ssh -p 1234' root@10.10.10.10:/root/
5. rsync-daemon认证配置
5.1 服务端配置
- 安装rsync
yum install rsync -y
# 配置开机自启动
systemctl enable rsyncd
systemctl start rsyncd
- 修改配置文件
编辑配置文件 vim /etc/rsyncd.conf
cat >> /etc/rsyncd.conf << EOF
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connection = 200
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = yes
auth users = myuser
secrets file = /etc/rsync.passwd
[backup]
comment = backup_dir
path = /bakup
[date]
comment =date_dir
path = /test1/date
EOF
# 以用户rsync用户启动,此用户对应后续创建的无法登录shell的系统用户
uid = rsync
gid = rsync
# 监听端口信息(默认为873)
port = 873
#无需让rsync以root身份运行,允许接受文件的完整性
fake super = yes
#禁锢推送的数据至某个目录,不允许跳出该目录
use chroot = no
#最大连接数
max connection = 200
#超时时间
timeout = 600
#进程对应的进程号文件
pid file = /var/run/rsyncd.pid
#锁文件
lock file = /var/run/rsync.lock
#日志文件,显示出错信息
log file = /var/log/rsyncd.log
#忽略错误信息
ignore errors
#对备份数据可读写
read only = false
#允许查看模块信息
list = yes
# 定义虚拟用户,作为连接认证用户,此为myuser
auth users = myuser
#定义rsync服务用户连接认证密码文件路径
secrets file = /etc/rsync.passwd
#定义模块信息,可设置多个模块,此为backup模块
[backup]
#模块注释信息
comment = commit
#定义接受备份数据目录
path = /bakup
# 此为date模块
[date]
comment =date
path = /date
其余配置参数说明
# 在独立运行时,用于指定的服务器运行的 IP 地址
address = IP
# 无需让rsync以root身份运行,允许接收文件的完整属性
fake super = yes
# 指定当客户请求列出可以使用的模块列表时,该模块是否应该被列出。
# 默认为 true,如果设置该选项为 false,可以创建隐藏的模块
list = false
模块其余参数说明
# 指定多个由空格隔开的多个文件或目录(相对路径)
# 并将其添加到 exclude 列表中。这等同于在客户端命令中使用 –exclude 来指定模式。
exclude = exclude_file
# 指定一个包含 exclude 规则定义的文件名,服务器从该文件中读取 exclude 列表定义
exclude from = exclude-file.txt
# 指定多个由空格隔开的多个文件或目录(相对路径),并将其添加到 include 列表中。
# 这等同于在客户端命令中使用 –include 来指定模式 。
include = include-file.txt
# 指定一个包含 include 规则定义的文件名,服务器从该文件中读取 include 列表定义
include from = exclude-file.txt
# 一个模块只能指定一个exclude 参数、一个include 参数
# 结合 include 和 exclude 可以定义复杂的exclude/include 规则
# 这几个参数分别与相应的rsync 客户命令选项等价,唯一不同的是它们作用在服务器端
- 创建用户
# 创建一个rsync进程运行时使用的普通用户 rsync
useradd rsync -M -s /sbin/nologin
- 创建两个模块中的备份目录
mkdir -p /backup /test1/date
- 修改目录所有者
chown -R rsync:rsync /backup;chown -R rsync:rsync /test1/date
- 创建rsync软件专用的账号密码
#服务端需要定义一个客户端连接 虚拟用户名和密码
#密码文件形式 user:passwd
# 该存放密码文件的位置和名称随意,但需要与rsync.conf中的secrets file指定的路径一致
echo "myuser:123456" > /etc/rsync.passwd
# 降低文件权限为600,必须是600
chmod 600 /etc/rsync.passwd
- 以上配置完成,重启服务
systemctl restart rsyncd
5.2 客户端配置
- 在客户端安装完毕rsync服务后,是不需要启动rsync服务的。
- 我们只需要在客户端创建连接rsync服务器时,验证码用户所需要的密码文件即可。
- 账号和密码需要与
/etc/rsync.passwd中的一致
- 安装rsync
yum install rsync -y
- 提供密码认证
客户端进行密码认证时有2个简便方法,默认是无密码文件,无密码变量,需要自己手动输入虚拟用户的密码
方式一:使用密码文件,将密码写入到密码文件中,使用时调用密码文件即可
#密码写入到密码文件,此密码文件无位置名称限制
echo “123456”>>/etc/rsync.passwd
chmod 600 /etc/rsync.passwd # 修改权限,必须是660
# 查看 rsync 守护程序分配的所有 模块 列表,可以执行下面命令。
rsync rsync://192.168.106.29
# 使用示例参考
rsync -avzP /var/nginx.log 账户@主机名::模块名
rsync -avzP --password-file=/etc/rsync.passwd /var/nginx.log myuser@192.168.106.29::date
# 从远端服务器下载文件到本地
rsync -avzP --password-file=/etc/rsync.passwd myuser@192.168.106.29::backup /etc/nginx/backup
方式二:使用密码变量,RSYNC_PASSWORD
export RSYNC_PASSWORD='123456' # 导入myuser的密码
rsync -avzP /var/nginx.log myuser@192.168.106.29::backup
# 撤销这个密码变量,或重启失效
unset RSYNC_PASSWORD

Comments NOTHING