Linux运维 第三阶段 (十四)rsync

简介:

一、相关概念:

rsyncremote synchronizersync.samba.org):远程数据同步工具,通过网络快速同步多台主机间的文件,也可使用rsync同步本地硬盘中不同目录中的数据,利用其自身算法(rsync算法)只传送两个文件的不同部分,通过ssh方式来传输文件,因此保密性好;与cptar备份方式相比,rsync具有安全性高、备份迅速、支持增量备份的优点,通过rsync可以解决对实时性要求不高的数据备份需求,如定期备份服务器数据到指定的服务器、对本地磁盘定期做数据镜像、集群中负载均衡后端real server的网页数据改动时同步到其它real server等场景

 

随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出更高的要求,rsync在高端业务系统中暴露出了很多不足:rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输,若文件数量达到了百万甚至千万量级,这将非常消耗系统性能而且低效,有时变化的数据往往只是很少的一部分;rsync不能实时的去监测、同步数据,虽然可以通过计划任务方式触发同步,但两次触发动作一定有时间差,这将导致服务端和客户端数据可能会不一致,通过inotify可解决此问题

 

inotify(是一种强大的、细粒度的、异步的FS事件监控机制,文件内容发生改变是内核管理的,内核将这种监控文件本身是否发生改变的功能输出给用户空间,用户空间才有可能知道,linux内核从2.6.13起支持inotify机制,通过inotify可以监控FS中添加、删除、修改、移动等各种细微事件,利用这个内核接口,通过第三方软件(inotify-tools)就可监控FS下文件的各种变化)

 

sersync(基于inotify开发,功能类似inotifyC++编写,多线程同步,sersync可以记录下被监听目录中发生变化的具体哪一个文件或哪个目录,然后使用rsync同步的时候,只同步发生变化的)

 

rsync+inotifyrsync-sersync两种架构的区别?

rsync+inotifyinotify监控FS的各种变化,一旦有变动时就触发rsync同步,解决了数据同步实时性的问题,inotify仅记录被监控的目录发生了变化,并没记录哪个目录或哪些文件发生了变化,所以rsync每次都要在被监控的所有目录和其下的文件与目标目录进行比对,再传输有差异的文件(要遍历目录下所有文件找出有差异的才进行同步),若数据量很大这将非常耗时,因此效率很低)

rsync+sersyncsersync可以记录被监控的目录中具体哪个目录哪些文件发生了变化,rsyc在同步时只同步发生变化的目录或文件,因此速度很快(节约时间)、节约带宽、效率很高)

 

注:若数据量不大建议使用rsync+inotify,若数据量很大建议使用rsync+sersync

 

二、操作:

1rsync+inotify的实现

举例:实现两个web服务器的网页文件保持同步(一台为server,另一台为client,仅在server-side更新网页文件,查看client-side是否有同步,数据流向是server-->client

准备软件:

rsync--3.0.9.tar.gzhttps://rsync.samba.org/ftp/rsync/src/rsync-3.0.0.tar.gz

inotify-tools-3.14.tar.gzhttps://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

 

注:server-side安装rsyncinotifyclient-side仅安装rsync

#ll /proc/sys/fs/inotify/(若此目录下有max_queued_eventsmax_user_instancesmax_user_watches这三项则此内核支持inotify机制,内核2.6.13之后才支持此功能)

 

server-side192.168.41.131:

 

#tar xf  rsync-3.0.9.tar.gz

#cd rsync-3.0.9

#./configure  --prefix=/usr/local/rsync

#make

#make install

#vim /etc/profile.d/rsync.sh

export  PATH=$PATH:/usr/local/rsync/bin

#. !$

#vim /etc/man.config

MANPATH  /usr/local/rsync/share/man

#man rsync

#rsync options  SRC  DETrsync命令格式)

options:-vzrtopg

-v--verbose

-z--compress

-r--recursive

-t--times

-o--owner

-p--perms

-g--group

-a--archive

-A--acls

-H--hard-links

-l--links

-D--devices  --specials

--deletedelete extraneousfiles from dest dirs,删除目标位置有而原始位置没有的文件)

--progressshow progress duringtransfer显示传输过程)

--passwd-file=FILEreaddaemon-access password from FILE,指定密钥文件)

 

#echo  "redhat"  >  /usr/local/rsync/rsync.passwd(建立认证文件,密码为redhat,此处不需要用户名

#chmod 600  !$(为安全,将密码文件权限改为600

 

#tar xf  inotify-tools-3.14.tar.gz

#cd inotify-tools-3.14

#./configure  --prefix=/usr/lcoal/inotify

#make

#make install

#vim /etc/profile.d/inotify.sh

export PATH=$PATH:/usr/local/inotify/bin

#. !$

#vim /etc/man.config

MANPATH /usr/local/inotify/share/man

#man inotifywatchgather filesystem access statistics using inotify,用于短期监控,任务完成后再出结果)

#man inotifywaitwait for changes to files using inotify,用于持续监控,实时输出结果)

#inotifywait  -mrq -e  EVENT  --timefmt FMT  --format  FMT FILEinotifywait命令用法)

-m--monitor

-r--recursive

-q--quiet

-e--eventListen forspecific event(s) only

--timefmt

--formatOutput  in a  user-specified  format

EVENT有:

modifyA watched file or afile within a watched directory was written to

deleteA file or directorywithin a watched directory was deleted

createA file or directorywas created within a watched directory

attribThe metadata of awatched file or a file within a watched directory was modified

moveA file or directorywas moved from or to a watched directory

 

#vim /root/rsync.sh

#!/bin/bash

#

host=192.168.41.132

src=/var/www/html/

des=test

user=testuser

/usr/local/inotify/bin/inotifywait  -mrq --timefmt  ‘%d/%m/%y %H:%M’  --format ‘%T %w%f%e’  -e  modify,delete,create,attrib  $src |  while  read files;do

/usr/bin/rsync  -vzrtopg --delete  --progress  --passwd-file=/usr/local/rsync/rsync.passwd  $src $user@$host::$des

echo “${files} was rsynced” >>  /var/log/rsync.log  2>&1

done

 

#chmod 764  /root/rsync.sh

#sh /root/rsync.sh  &(注意!待client-side启动rsync服务后再运行此脚本)

 

 

client-side192.168.41.132:

 

#tar xf  rsync-3.0.9.tar.gz

#cd rsync-3.0.9

#./configure  --prefix=/usr/local/rsync

#make

#make install

#vim /etc/profile.d/rsync.sh

export  PATH=$PATH:/usr/local/rsync/bin

#. !$

#vim /etc/man.config

MANPATH  /usr/local/rsync/share/man

 

#echo  "testuser:redhat"  >  /usr/local/rsync/rsync.passwd(建立认证文件

#chmod 600  !$(为安全,将密码文件权限改为600

 

#vim /usr/local/rsync/rsync.conf

uid = root

gid = root

use chroot = no(默认为true增加对目录文件软链接的备份)

max connections = 10

timeout = 600

strict modes = yes

pid file = /var/run/rsyncd.pid

lock file = /var/log/rsyncd.lock

log file = /var/log/rsyncd.log

motd file = /etc/rsyncd.motd(可在此文件中编辑启动时的欢迎信息)

[test](自定义名称)

path = /var/www/html/(数据同步到本地的目录路径)

comment = test(描述信息)

ignore errors = yes

read only = no(设置rsync服务端文件为读写权限)

hosts allow = 192.168.41.131(允许进行数据同步的主机地址,多个用逗号隔开)

hosts deny = *(禁止数据同步的主机地址)

list = false(不显示rsync服务端资源列表)

uid = root(设置rsync运行权限)

gid = root

port = 873(默认端口)

auth users = testuser(执行数据同步的用户名,可以设置多个用逗号隔开)

secrets file =/user/local/rsync/rsync.passwd(用户认证配置文件,里面包含用户名和密码)

 

#rsync --daemon --config=/usr/local/rsync/rsync.conf(启动rsync

 

测试:

server-side(/var/www/html)

wKiom1ZiMsnS4l-qAABrmV9sixw732.jpg

client-side(/var/www/html)

wKioL1ZiM0XgifzPAAAb2Kb_Lvo556.jpg

 

 

2rsync+sersync的实现:

server-side

参照上例,安装rsync、制作认证文件并改权限为600

#mkdir /usr/local/sersync/

# tar  -xf  sersync_64bit_binary_stable_final.tar.gz

#cd  GNU-Linux-x86

#mv  confxml.xml  sersync2 /usr/local/sersync/

#cd /usr/local/sersync

#cp  confxml.xml confxml.xml.bak

#vim confxml.xml

……

<sersync>

   <localpath watch="/var/www/html">

       <remote ip="192.168.41.132" name="test"/>

       <!--<remote ip="192.168.8.39" name="tongbu"/>-->

       <!--<remote ip="192.168.8.40" name="tongbu"/>-->

   </localpath>

   <rsync>

       <commonParams params="-vzrtopg"/>

       <auth start="true" users="testuser" passwordfile="/usr/local/rsync/rsync.passwd"/>

       <userDefinedPort start="false"port="874"/><!-- port=874 -->

       <timeout start="false" time="100"/><!--timeout=100 -->

       <ssh start="false"/>

   </rsync>

   <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->

   <crontab start="true"schedule="600"><!--600mins-->

       <crontabfilter start="false">

       <exclude expression="*.php"></exclude>

       <exclude expression="info/*"></exclude>

       </crontabfilter>

   </crontab>

   <plugin start="false" name="command"/>

</sersync>

……

#vim /root/check_sersync.sh

#!/bin/bash

#

SERSYNC="/usr/local/sersync/sersync2"

CONF_FILE="/usr/local/sersync/confxml.xml"

STATUS=`ps aux | grep 'sersync2' | grep -v'grep' | wc -l`

if [ $STATUS -eq 0 ];then

 $SERSYNC -d -r -o $CONF_FILE &

else

exit 0;

fi

 

#crontab -e(为防止sersync2意外中断,每5分钟使用此脚本检测,若sersync2未运行,则会自动开启,进行实时同步)

*/5 * * * *  bash  /root/check_sersync.sh&> /dev/null

#/usr/local/sersync/sersync2  -d -r  -o  /usr/local/sersync/confxml.xml(开启sersync服务)

-drun as a daemon

-rrsync all the localfiles to the remote servers before the sersync work

-oconfig xml name  ./confxml.xml

 

client-side

参照上例,安装rsync,配置rsync.conf文件,配置认证文件,并开启rsync服务

 

测试:

server-side

wKiom1ZiMvyAkYQbAABeKZMPEE4022.jpg

wKioL1ZiM3iA804-AAA3yYJJMzY516.jpg

client-side

wKiom1ZiMyGSuvUTAAAqecFM-T8276.jpg

 

 

 

 

 

以上内容是自找资料整理。



本文转自 chaijowin 51CTO博客,原文链接:http://blog.51cto.com/jowin/1719774,如需转载请自行联系原作者

相关文章
|
5月前
|
运维 安全 Linux
试试Linux设备命令行运维工具——Wowkey
WowKey 是一款专为 Linux 设备设计的命令行运维工具,提供自动化、批量化、标准化、简单化的运维解决方案。它简单易用、高效集成且无依赖,仅需 WIS 指令剧本文件、APT 账号密码文件和 wowkey 命令即可操作。通过分离鉴权内容与执行内容,WowKey 让运维人员专注于决策,摆脱繁琐的交互与执行细节工作,大幅提升运维效率与质量。无论是健康检查、数据采集还是配置更新,WowKey 都能助您轻松应对大规模设备运维挑战。立即从官方资源了解更多信息:https://atsight.top/training。
|
5月前
|
数据采集 运维 安全
Linux设备命令行运维工具WowKey问答
WowKey 是一款用于 Linux 设备运维的工具,可通过命令行手动或自动执行指令剧本,实现批量、标准化操作,如健康检查、数据采集、配置更新等。它简单易用,只需编写 WIS 指令剧本和 APT 帐号密码表文件,学习成本极低。支持不同流派的 Linux 系统,如 RHEL、Debian、SUSE 等,只要使用通用 Shell 命令即可通吃Linux设备。
|
8月前
|
存储 运维 安全
深入解析操作系统控制台:阿里云Alibaba Cloud Linux(Alinux)的运维利器
本文将详细介绍阿里云的Alibaba Cloud Linux操作系统控制台的功能和优势。
271 6
|
9月前
|
Prometheus 运维 监控
Prometheus+Grafana+NodeExporter:构建出色的Linux监控解决方案,让你的运维更轻松
本文介绍如何使用 Prometheus + Grafana + Node Exporter 搭建 Linux 主机监控系统。Prometheus 负责收集和存储指标数据,Grafana 用于可视化展示,Node Exporter 则采集主机的性能数据。通过 Docker 容器化部署,简化安装配置过程。完成安装后,配置 Prometheus 抓取节点数据,并在 Grafana 中添加数据源及导入仪表盘模板,实现对 Linux 主机的全面监控。整个过程简单易行,帮助运维人员轻松掌握系统状态。
1270 3
|
11月前
|
运维 监控 网络协议
|
11月前
|
Unix Linux
Linux | Rsync 命令:16 个实际示例(下)
Linux | Rsync 命令:16 个实际示例(下)
Linux | Rsync 命令:16 个实际示例(下)
|
10月前
|
运维 监控 网络协议
运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面
本文介绍了运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面,旨在帮助读者提高工作效率。从基本的文件查看与编辑,到高级的网络配置与安全管理,这些命令是运维工作中的必备工具。
774 3
|
10月前
|
运维 监控 安全
盘点Linux服务器运维管理面板
随着云计算和大数据技术的迅猛发展,Linux服务器在运维管理中扮演着越来越重要的角色。传统的Linux服务器管理方式已经无法满足现代企业的需求,因此,高效、安全、易用的运维管理面板应运而生。
|
11月前
|
存储 运维 搜索推荐
|
10月前
|
缓存 运维 监控
【运维必备知识】Linux系统平均负载与top、uptime命令详解
系统平均负载是衡量Linux服务器性能的关键指标之一。通过使用 `top`和 `uptime`命令,可以实时监控系统的负载情况,帮助运维人员及时发现并解决潜在问题。理解这些工具的输出和意义是确保系统稳定运行的基础。希望本文对Linux系统平均负载及相关命令的详细解析能帮助您更好地进行系统运维和性能优化。
672 3