小白成长之路-Rsync+sersync实现数据实时同步
一、rsync概述
Rsync(Remote Sync)是Linux系统下的数据镜像备份工具。该工具可以实现远程同步、不同主机之间的同步,也能实现全量备份和增量备份,保持数据链接和权限,并采用优化的同步算法,传输前对数据进行压缩,故该工具非常适合架构集中式备份或异地备份。也支持本地复制或与ssh、rsync同步。
官网地址:https://rsync.samba.org/
优点:
- scp无法备份大量数据,而rsync备份、统计、比较一起进行。
- 可以备份整个目录树和文件系统,并保持文件原来的权限、时间、软硬链接。
- 安装较容易,无需特殊权限。
- 同步快速,首次同步完全备份,再次同步增量备份。
- 可以使用scp和ssh等方式传输备份文件
- 支持匿名传输
- 选择性保持:符号链接、硬链接、文件属性、权限、时间等
- 传输速度快:压缩再传输、解压再使用,减少带宽。
# 查看版本信息
[root@server ~]# rsync --version
rsync version 3.1.2 protocol version 31
Copyright (C) 1996-2015 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,append, ACLs, xattrs, iconv, symtimes, preallocrsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you
are welcome to redistribute it under certain conditions. See the GNU
General Public Licence for details.
备份分类:
- 完全备份:所有文件进行备份
- 差异备份:备份自上次完全备份以来所有的修改
- 增量备份:备份自上次备份依赖所作的修改
二、rsync运行原理
rsync采用C/S模式,即点到点的传输。通过xinetd服务监听873端口,再让xinetd服务下的rsync服务作出响应。
源主机:需要同步数据的服务器
目标主机:存放服务器同步数据的主机
数据同步方式:push 和 pull
- 推push:主动同步,把数据发送给目标主机。服务器开销大,适合后端服务器较少的情况。【服务器备份推给rsync客户端存放,主动模式】
目的主机配置为 rsync 服务端,源主机周期性的使用 rsync 命令把要同步的目录推过去。
- 拉pull:所有客户端主机去服务器上面拉数据,导致数据传输缓慢。【rsync客户端去服务器上拉数据,存放到客户端上,被动模式】
源主机配置为 rsync 服务端,目的主机周期性的使用 rsync 命令把要同步的目录拉过来。
三、案例
案例一:实现同步功能
# /etc/rsyncd.conf
#全局参数:对rsync服务器生效,优先级较低
port # rsync占用端口号,默认是873
address # 监听地址,一般是目标主机的IP地址
uid # 运行进程的用户
gid # 运行进程的用户组
max connections # 最大连接数
lock file # 最大连接数的锁文件
motd file # 同步登录后的提示语,填写欢迎同步信息,自行创建
log file # 日志文件
pid file # 进程PID文件,自动生成
hosts allow # 允许同步的主机#模块参数:针对某一个目录定义的参数,优先级较高
[mod_name] # 同步目录名
comment # 描述信息
path # 同步目录
read only # 同步目录的读写权限
exclude
exclude from
include
include from
auth users # 备份的用户,自动创建,与系统用户无关
secrets file # 存放rsync用户的密码文件
hosts allow
hosts deny
list
timeout
准备两台虚拟机,一台客户机client,一台主机server3
主机:
/etc/rsyncd.conf
创建接受目录
mkdir -p /data/backup
初始文件
echo "Welcome to Backup Server" > /etc/rsyncd.motd
密码文件并赋予权限
echo "rsyncuser:123456" > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
重启服务
客户机:
创建目录
mkdir /data
该目录里面内容自行定义
然后开始同步文件
去主机验证
在主机创建一个文件
在客户机删除
再去主机验证,做到同步了
案例二、如果不想输入密码直接同步:
在客户机/etc/rsync.passwd里面写入和主机相同的密码并赋予和主机文件相同的权限
rsync -avz /data rsyncuser@192.168.115.112::data --password-file=/etc/rsync.passwd
然后没有输入密码就传给主机了
案例三、实时同步:
下载或者导入sersync
会生成一个目录进去后vim编辑confxml.html文件
html文件修改如下
然后对客户机再开一台客户机,在/data下创建或者重命名文件
在第一台客户机上监测
strace ./sersync2 -r -o ./confxml.xml
再去主机验证:
总结:
-
rsync可以进行数据的同步,可以使用推和拉两种方式。推即源主机推数据到目标主机,拉即目标主机从源主机上拉数据。
-
push:服务器向客户端推送数据,要在目标主机上配置一个共享目录,在服务端上使用rsync命令推送数据给目标主机。
-
pull:客户端向服务器拉去数据,需要把服务器上的同步目录配置成一个共享目录,然后客户端去这个共享目录上拉去数据。
-
仅使用rsync同步数据,不会记录数据的变化,每次同步都是同步整个目录,不适合大量数据的同步。
-
结合使用rsync+sersync,sersync负责监控源主机上同步目录的数据变化,rsync负责同步变化的部分,极大地提高了同步的效率。