1、rsync 概念介绍
官方网站:rsync
rsync(Remote Sync) 是一个Unix/linux系统下的文件同步和传输工具。Rsync通过“rsync算法”提供了一个客户机和远程服务器的文件同步的快速方法。
采用C/S模式
端口tcp:873
a. rsync 特性
① 可以镜像保存整个目录树和文件系统。
② 可以很容易做到保持原来文件的权限、时间、软硬链接等
b. rsync 优点
① 快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。
② 压缩传输:rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。
③ 安全:可以使用ssh协议来传输文件
④ 支持匿名传输,以方便进行网站镜象。
⑤ 选择性保持:符号连接,硬链接,文件属性,权限,时间等,传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用。
c. rsync 备份分类
- 完整备份:每次备份都是从备份源将所有的文件或目录备份到目的地
- 差异备份:备份上次完全备份以后有变化的数据
- 增量备份:备份上次备份以后有变化的数据
d. rsync 同步方式
push:数据源服务器把数据推送给数据备份服务器,类似于数据上传,在备份服务器上配置rsync服务,如果后端备份服务器较多,数据源服务器开销会很大。
pull:所有的数据备份服务器去找数据源服务器拉数据,类似于数据下载,在数据源服务器上配置rsync服务,如果后端服务器同时去拉数据,会导致数据传输缓慢。
e. rsync 命令
描述:同步数据
语法:rsync [选项] 源文件 目标文件
- -a, –archive archive mode 权限保存模式,相当于 -rlptgoD 参数,存档,递归,保持属性等
- -r, –recursive 复制所有下面的资料,递归处理
- -p, –perms 保留档案权限 ,文件原有属性
- -t, –times 保留时间点,文件原有时间
- -g, –group 保留原有属组
- -o, –owner 保留档案所有者(root only)
- -D, –devices 保留device资讯(root only)
- -l, –links 复制所有的连接 ,拷贝连接文件
- -z, –compress 压缩模式, 当资料在传送到目的端进行服务器托管网档案压缩.
- -H, –hard-links 保留硬链接文件
- -A, –acls 保留ACL属性文件,需要配合–perms
- -P,—partial –progress 只是为了把参数简单化,表示传进度
- –version, 输出rsync版本
- -v , –verbose 复杂的输出信息
- -u, –update 仅仅进行更新,也就是跳过已经存在的目标位置,并且文件时间要晚于要备份的文件,不覆盖新的文件
- –port=PORT 定义rsyncd(daemon)要运行的port(预设为tcp 873)
- –delete 删除那些目标位置有的文件而备份源没有的文件
- –password-file=FILE 从 FILE 中得到密码
- –bwlimit=KBPS 限制 I/O 带宽
- –filter “-filename” 需要过滤的文件
- –exclude=filname 需要过滤的文件
- –progress 显示备份过程、
注意:如果传输的特别大的文件,就不要用-z参数,因为压缩和解压比较耗时
———————————————————–
配置rsync数据同步(push)
在远程同步任务中,负责发起rsync同步操作的主机称为发起端,而负责响应rsync同步操作的主机称为rsync服务器(也称为同步源)。
使用rsync同步工具时,同步源可以是服务器模式运行的rsync程序, 也可以是SSH服务器。
主机名 |
角色 |
Ip地址 |
Client01 |
rsync客户端, 数据源 |
192.168.137.6 |
Server |
rsync服务端,备份服务器 |
192.168.137.5 |
2、使用ssh作为同步源
使用SSH协议的好处是能够基于更安全的远程连接,增强备份的保密性。这种方式的同步源最容易配置,只要确认源文件夹的位置,并准备一个同步操作的系统用户,设置好相关权限即可。
a. 客户端和服务端安装rsync
yum install -y rsync
b. rsync 服务器配置
# 创建数据同步账号
useradd backup
# 设置账号密码
echo "backup:123456" | chpasswd
# 创建备份目录
mkdir /opt/webbackup
# 修改备份目录的所有者和所在组
chown -R backup:backup /opt/webbackup/
c. rsync 客户端配置
# 创建测试数据
mkdir -p /var/www/html
cp -r /boot/grub2 /var/www/html/
d. 测试数据同步
- 将本地的/var/www/html/目录下的所有数据同步到的备份服务器的/webbackup目录下
- 由于用户backup并非root用户,因此”-g”、”-o”、“-t”选项将不生效
# --delete 删除那些目标位置有的文件而备份源没有的文件
# 去掉--delete选项,只同步更新文件
rsync -avz --delete /var/www/html backup@192.168.137.5:/opt/webbackup
e. 服务端查看文件
3、使用rsync服务器作为同步源
rsync不仅仅用作远程同步的发起端(客户端),也可以作为守护进程运行,为其他客户机提供同步源,配置rsync同步源需要建立配置文件rsync.conf,创建备份账户(虚拟用户),然后将rsync程序以”- -daemon”选项运行。
a. 修改服务器配置文件
vim /etc/rsync.conf
# 运行进程的身份
uid = root
# 运行进程的组
gid = root
# 监听ip
address = 192.168.137.5
# 监听端口
port = 873
# 允许同步客户端的IP地址,可以使网段
hosts allow = 192.168.137.0/24
# 锁定家目录
use chroot = yes
# 最大连接数
max connections = 5
# PID文件
pid file = /var/run/rsyncd.pid
# 指定 max connections 参数的锁文件
lock file = /var/run/sync.lock
# 日志文件位置
log file = /var/log/syncd.log
# 客户端登录之后弹出的消息,需要创建
motd file = /etc/rsyncd.motd
# 共享模块名称
[wwwroot]
# 备份路径
path = /opt/webbackup
# 描述
comment = user for web-data root
# 设置服务端文件读写权限
read only = false
# 是否允许查看模块信息
list = yes
# 备份的用户和系统用户无关
auth users = backupuser
# 存放用户的密码文件
secrets file = /etc/rsync.passwd
b. 创建虚拟用户文件
创建账号数据文件,添加一行用户记录,以冒号分隔,用户名称为backupuser,密码为123456。由于账号信息采用明文存放,因此应调整文件权限,避免账号信息泄露。
# 创建虚拟用户文件
vim /etc/rsync.passwd
# 修改虚拟用户文件权限
chmod 600 /etc/rsync.passwd
c. 创建用户登录消息
echo "Welcome to Backup Server" > /etc/rsync.motd
d. 启动服务并设置开机自启动
rsync --daemon --config=/etc/rsyncd.conf
echo "rsync --daemon --config=/etc/rsyncd.conf" >> /etc/rc.d/rc.local
e. 客户端测试
格式1:rsync选项 用户名@同步源服务器IP::共享模块名目标目录
rsync -avz --delete /var/www/html/ backupuser@192.168.137.5::wwwroot
格式2:rsync选项 rsync://用户名@备份源服务器IP/共享模块名目标目录
rsync -avz --delete /var/www/html/ rsync://backupuser@192.168.1.12/wwwroot
f. 客户端传输时使用密码文件
# 编辑同步密码文件
vim /etc/rsyncd.passwd
123456
# 修改密码文件权限
chmod 600 /etc/rsyncd.passwd
# 传输时使用密码文件
rsync -avz --delete /var/www/html backupuser@192.168.137.5::wwwroot --password-file=/etc/rsyncd.passwd
g. 配置计划任务
# 编写rsync备份脚本
vim autobackup_rsync_push.sh
#!/bin/bash
/usr/bin/rsync -avz --delete /var/www/html/ backupuser@192.168.137.5::wwwroot --password-file=/etc/rsync.passwd
# 给脚本权限
chmod u+x autobackup_rsync_push.sh
# 计划任务
echo "30 22 * * * /usr/bin/sh /root/autobackup_rsync_push.sh" >> /var/spool/cron/root
4、配置rsync+inotify-tools实时同步
Linux内核从2.6.13版本开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件存取、删除、移动等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并服务器托管网针对目录或文件的变化及时作出响应。
使用rsync工具与inotify机制相结合,可以实现触发式备份(实时同步),只要原始位置的文档发生变化,则立即启动增量备份操作,否则处于静态等侍状态,这样一来,就避免了按固定周期备份进存在的延迟性、周期过密等问题。
a. 查看linux是否支持inotify
在linux内核中,默认的inotify机制提供了三个调控参数:max_queued_events、max_user_instances、max_user_watches。分别表示监控事件队列、最多监控实例数、每个实例最多监控文件数,当要监控的目录、文件数量较多或者变化较频繁时,建议加大这三个参数的值
ll /proc/sys/fs/inotify/
b. 安装inotify-tools工具
软件下载地址:https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/i/inotify-tools-3.14-9.el7.x86_64.rpm
# 客户端下载软件包
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/i/inotify-tools-3.14-9.el7.x86_64.rpm
# 客户端安装软件
rpm -ivh inotify-tools-3.14-9.el7.x86_64.rpm
c. inotifywait 命令
描述:监听目录
语法:inotifywait [选项] 目录
- -e: 用来指定要监控哪些事件(create,move,delete,modify)
- -m:表示持续监控
- -r: 表示递归整个目录
- -q: 表示简化输出信息
# 监听/var/www/html
inotifywait -mrqe create,move,delete,modify /var/www/html/
# 打开新终端测试监听
echo "123" > /var/www/html/bb.txt
echo "456" >> /var/www/html/bb.txt
rm -rf /var/www/html/bb.txt
touch /var/www/html/cc.txt
d. 编写触发式同步脚本
# 编写脚本
vim rsync-inotify.sh
#!/bin/bash
# rsync-inotify
inotifywait -mrqe create,move,delete,modify /var/www/html | while read dir event file
do
/usr/bin/rsync -avz /var/www/html/ backupuser@192.168.137.5::wwwroot --password-file=/etc/rsyncd.passwd &> /dev/null
echo "$file is rsync"
echo "++++++++++++++++++++++++++"
done
# 赋予脚本执行权限
chmod u+x rsync-inotify.sh
# 测试脚本
sh rsync-inotify.sh
# 打开新的终端测试
touch /var/www/html/abc.txt
# 查看服务端脚本备份情况
ll /opt/webbackup
5、配置rsync+ sersync实时同步
sersync是基于inotify开发的,类似于inotify-tools的工具,sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或者某一个目录的名字,然后使用rsync同步的时候,只同步发生变化的文件或者目录。
sersync特点
① sersync是使用c++编写,而且对linux系统文件系统产生的临时文件和重复的文件操作进行过滤,所以在结合rsync同步的时候,节省了运行时耗和网络资源。 因此更快。
② sersync配置起来很简单,其中bin目录下已经有基本上静态编译的2进制文件,配合bin目录下的xml配置文件直接使用即可。
③ sersync使用多线程进行同步,尤其在同步较大文件时,能够保证多个服务器实时保持同步状态。
④ sersync有出错处理机制,通过失败队列对出错的文件重新同步,如果仍旧失败,则每10个小时对同步失败的文件重新同步。
⑤ sersync自带crontab功能,只需在xml配置文件中开启,即可按您的要求,隔一段时间整体同步一次。无需再额外配置crontab功能。
sersync 同步过程
在源服务器上开启sersync服务,sersync负责监控配置路径中的文件系统事件变化,调用rsync命令把更新的文件同步到目标服务器。
a. 备份服务器配置 rsync
所有服务器配置按照上面的: 3、使用rsync服务器作为同步源
配置即可
b. 数据源服务器搭建 sersync
sersync下载地址:https://code.google.com/p/sersync/downloads/list
# 安装sersync
tar -zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz -C /usr/local/
# 创建GNU-Linux-x86软连接
ln -s /usr/local/GNU-Linux-x86/sersync2 /usr/local/bin
c. 修改配置文件
vim /usr/local/GNU-Linux-x86/confxml.xml
d. 开启sersync守护进程同步数据
sersync2 -d -r -o /usr/local/GNU-Linux-x86/confxml.xml
- -d run as a daemon
- -r rsync all the local files to the remote servers before the sersync work
- -o config xml name
# 查看备份服务器
ls /opt/webbackup
# 设置sersync开机自启
echo "sersync2 -d -r -o /usr/local/GNU-Linux-x86/confxml.xml" >> /etc/rc.d/rc.local
e. 添加脚本监控sersync是否正常运行
# 编辑脚本
vim /usr/local/GNU-Linux-x86/check_sersync.sh
#!/bin/sh
#check_sersync
confxml="/usr/local/GNU-Linux-x86/confxml.xml"
status=$(ps aux |grep 'sersync2'|grep -v 'grep'|wc -l)
if [ $status -eq 0 ];then
sersync2 -d -r -o $confxml &> /dev/null
else
exit 0
fi
# 给脚本添加执行权限
chmod +x /usr/local/GNU-Linux-x86/check_sersync.sh
# 设置计划任务
echo "10 * * * * /usr/bin/sh /usr/local/GNU-Linux-x86/check_sersync.sh &> /dev/null" >> /var/spool/cron/root
f. 多实例情况
配置多个confxml.xml文件(比如bbs、blog….等等)
根据不同的需求同步对应的实例文件
sersync2 -d -r -o /usr/local/GNU-Linux-x86/blog_confxml.xml
sersync2 -d -r -o /usr/local/GNU-Linux-x86/bbs_confxml.xml
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
1.DSL查询文档 elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.1.DSL查询分类 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括: 查询…