Rsync(remote sync)
一款数据镜像备份软件,可以根据数据的变化进行差异备份。
它可以进行本地数据或远程数据的复制,也可以使用 SSH 安全隧道进行加密数据传输。
原理:Rsync服务器端定义源数据,Rsync客户端仅在源数据发生改变后才会从服务器上实际复制数据至本地,如果源数据在服务器端被删除,则客户端数据也会被删除,以确保主机之间的数据是同步的。
Rsync默认使用TCP协议,监听873端口。
Rsync主要进行两个动作
推Push:将本地的数据推送到 备份服务器。
拉Pull:将备份服务器的数据拉取到本地。
rsync有三种传输模式
一,本地传输
二,远程传输 ssh协议 :
三,守护进程 rsync协议 ::
一,本地传输:
单个主机目录间的数据拷贝,类似于cp
yum install rsync -y
rsync -avz /root/file.txt /tmp/
二,远程传输:
1.借助ssh协议进行传输,(意味着他需要知道对端的用户名和密码)
Push: rsync [OPTION…] SRC… [USER@]HOST:DEST
Pull: rsync [OPTION…] [USER@]HOST:SRC… [DEST]
2.将本地/root/file.txt文件推送到 172.16.1.31 服务器的 /opt 目录,使用的是 31 服务器的 root用户。
rsync -avz /root/file.txt root@172.16.1.31:/opt
拉取远程服务器 172.16.1.31 /opt目录下的file.txt 文件 至 本地 /mnt 目录
rsync -avz root@172.16.1.31:/opt/file.txt /mnt/
3.推送目录区别
rsync -avz /etc/ root@172.16.1.31:/opt/ #添加/表示推送目录下的所有内容
rsync -avz /etc root@172.16.1.31:/opt #不添加/表示推送该目录本身,以及目录下的内容
远程传输特点:
依托对端主机的用户身份权限:
1.使用系统root用户 ( 不安全 )
2.使用系统的普通用户 ( 会出现权限不够的情况 )
三,守护进程:
可以不使用系统用户,使用的是一个虚拟的用户(不存在的用户) 来实现推送。
服务:运行在我们的后台,持续提供服务支持
Push:
1.使用172.16.1.31 推送 client.txt 文件至 备份服务器 41 的 backup模块------->>> ::
rsync -avz client.txt rsync_backup@172.16.1.41::backup
Pull:
2.拉取 172.16.1.41 备份服务器 backup模块下的数据
rsync -avz rsync_backup@172.16.1.41::backup /opt
配置详解
cat /etc/rsyncd.conf
uid = rsync — 表示管理传输数据用户信息
gid = rsync — 表示管理传输数据用户组信息
port = 873 — 指定服务端口信息
#fake super = yes — 伪装成超级管理员
守护进程备份数据需要修改数据权限, 具有修改权限能力
use chroot = no — 实现安全配置 实现假根安全配置
max connections = 200 — 设置服务最大连接数 (并发连接数)
timeout = 300 — 设置有一个超时时间
pid file = /var/run/rsyncd.pid — 创建出pid进程号码文件
1. 可以根据文件号码信息快速停止进程
2. 根据文件存在与否判断服务运行状态
lock file = /var/run/rsync.lock — 根据连接数限制, 给服务网络连接上锁
log file = /var/log/rsyncd.log — 备份服务日志文件
ignore errors = yes — 忽略错误信息 不是特别严重网络错误, 会先忽略, 保证数据传输
read only = false — 确认备份目录是否为只读状态
list = false 能否被列出
hosts allow = 172.16.1.0/24 — 设置白名单功能
hosts deny = 0.0.0.0/32 — 设置黑名单功能
auth users = rsync_backup — 定义虚拟认证用户
secrets file = /etc/rsync.password — 定义认证用户密码文件
[backup] — 一个模块 对应一个备份目录
comment = “backup dir by oldboy” — 模块功能描述
path = /backup — 定义一个备份数据目录 扩展配置参数: reverse lookup = no — 是否关闭服务反向解析过程
根据配置文件解读,我们发现还需要做一些初始化的操作:
创建Rsync进程运行的用户 ( rsync 服务器上操作)
useradd -M -s /sbin/nologin rsync(创建进程用户)
id rsync
uid=1008(rsync) gid=1008(rsync) 组=1008(rsync)
定义虚拟用户名rsync_bakcup的密码,服务器与客户端均需建立,进行了ssh密钥认证可跳过
echo "rsync_backup:123456" > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
–password-file=/etc/rsync.password #免密
创建存储的数据的目录 /backup
mkdir /backup
chown -R rsync.rsync /backup
Sersync
基于inotify开发的,类似于inotify-tools的工具,可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或者某一个目录的名字。
RSYNC+SERSYNC实时同步
原理步骤:
- 在同步服务器(Master)上开启sersync服务,sersync负载监控配置路径中的文件系统事件变化。
- 调用rsync命令把更新的文件同步到目标服务器(S1 和 S2)。
- 需要在主服务器配置sersync,在同步目标服务器配置rsync server。
环境要求:
所有接受数据的主机,开启 rsync 服务,开放 873端口,随时等待主机发送数据。主机实现ssh登录无密登录其他节点。
实现操作流程:
1.所有节点安装rsync
yum install rsync
2.配置 rsyncd.conf,并同步到其他节点。
3.其他节点上分别启动 rsync 服务,开启端口。
4.在发布节点(主机)上,安装Sersync工具。(工具无yum源)
5.编辑sersync的配置文件
示例:
<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
<host hostip="localhost" port="8008"></host>
<debug start="false"/>
<fileSystem xfs="true"/>
<filter start="false">
<exclude expression="(.*)\.svn"></exclude>
<exclude expression="(.*)\.gz"></exclude>
<exclude expression="^info/*"></exclude>
<exclude expression="^static/*"></exclude>
</filter>
<inotify>
<delete start="true"/>
<createFolder start="true"/>
<createFile start="true"/>
<closeWrite start="false"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="false"/>
<modify start="true"/>
</inotify>
<sersync>
<localpath watch="/data/web-data/news.com">
<remote ip="192.168.10.21" name="news.com"/> #name即rsync模块名
<remote ip="192.168.10.22" name="news.com"/>
<remote ip="192.168.10.131" name="news.com"/>
</localpath>
<rsync>
<commonParams params="-av"/>
6.查看应用程序的帮助手册, 按照建议,先修改内核相关参数
sersync2 -h
7.手动执行 完全镜像同步
/usr/local/sersync/sersync2 -r -o /usr/local/sersync/confxml.xml #-r:在监控前,将监控目录与远程主机用rsync命令推送一遍,-o:指定配置文件,默认使用confxml.xml文件
8.开始实时监控,进入 实时同步模式
/usr/local/sersync/sersync2 -d -n 10 -o /usr/local/sersync/confxml.xml #-n: 指定开启守护线程的数量,默认为10个
ps -aux 查看监控进程。 使用 kill 的方式停止监控