Linux 服务器数据同步利器

news2024/12/23 10:30:14

一、简介
1 认识
Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。Rsync使用所谓的“Rsync算法”来使本地和远 程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快;
Rsync支持大多数的类Unix系统,无论是Linux、Solaris还是BSD上都经过了良好的测试;
此外,它在windows平台下也有相应的版本,如cwRsync和Sync2NAS等工具
2 原理
Rsync本来是用于替代rcp的一个工具,目前由rsync.samba.org维护,所以rsync.conf文件的格式类似于samba的主配 置文件;

Rsync可以通过rsh或ssh使用,也能以daemon模式去运行
在以daemon方式运行时Rsync server会打开一个873 端口,等待客户端去连接。

连接时,Rsync server会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,以后则就只需进行增量备份。
在这里插入图片描述

3 特点
可以镜像保存整个目录树和文件系统;
可以很容易做到保持原来文件的权限、时间、软硬链接等;
无须特殊权限即可安装;
优化的流程,文件传输效率高;
可以使用rsh、ssh等方式来传输文件,当然也可以通过直接的socket连接;
支持匿名传输
二、ssh模式
1 本地间同步
环境:172.16.22.12

mkdir src

touch src/{1,2,3,4}

mkdir dest

rsync -av src/ dest/ --将 src 目录里的所有的文件同步至 dest 目录(不包含src本身)

rsync -av src dest/ --将 src 目录包括自己整个同步至 dest 目录

rsync -avR src/ dest/ --即使 src 后面接有 / ,效果同上

2、局域网间同步
环境:172.16.22.11

mkdir src

touch src/{a,b,c,d}

mkdir dest

rsync -av 172.16.22.12:/data/test/src/ dest/ --远程同步至本地,需输入root密码

rsync -av src/ 172.16.22.12:/data/test/dest/ --本地文件同步至远程

rsync -av src 172.16.22.12:/data/test/dest/ --整个目录同步过去

rm -rf src/d --删除一个文件 d

rsync -av --delete src/ 172.16.22.12:/data/test/dest/ --delete,从目标目录里面删除无关的文件

3、局域网指定用户同步
—172.16.22.12

useradd george

passwd george

mkdir /home/george/test

touch /home/george/test/g{1,2,3,4}

—172.16.22.11

rsync -av src ‘-e ssh -l george’ 172.16.22.12:/home/george --本地同步至远程

rsync -av 172.16.22.12:/home/george/test/g* ‘-e ssh -l george -p 22’ dest/

三、daemon模式
环境:192.168.22.11

1、服务启动方式
1.1、对于负荷较重的 rsync 服务器应该使用独立运行方式

yum install rsync xinetd --服务安装

/usr/bin/rsync --daemon

1.2、对于负荷较轻的 rsync 服务器可以使用 xinetd 运行方式

yum install rsync xinetd --服务安装

vim /etc/xinetd.d/rsync --配置托管服务,将下项改为 no

disable = no

/etc/init.d/xinetd start --启动托管服务 xinetd

chkconfig rsync on

netstat -ntpl | grep 873 --查看服务是否启动

2、配置详解
两种 rsync 服务运行方式都需要配置 rsyncd.conf,其格式类似于 samba 的主配置文件

全局参数

在全局参数部分也可以定义模块参数,这时该参数的值就是所有模块的默认值
address —在独立运行时,用于指定的服务器运行的 IP 地址;由 xinetd 运行时将忽略此参数,使用命令行上的 –address 选项替代。默认本地所有IP
port —指定 rsync 守护进程监听的端口号。由 xinetd 运行时将忽略此参数,使用命令行上的 –port 选项替代。默认 873
motd file —指定一个消息文件,当客户连接服务器时该文件的内容显示给客户
pid file —rsync 的守护进程将其 PID 写入指定的文件
log file —指定 rsync 守护进程的日志文件,而不将日志发送给 syslog
syslog facility —指定 rsync 发送日志消息给 syslog 时的消息级别
socket options —指定自定义 TCP 选项
lockfile —指定rsync的锁文件存放路径
timeout = 600 —超时时间

模块参数
模块参数主要用于定义 rsync 服务器哪个目录要被同步。模块声明的格式必须为 [module] 形式,这个名字就是在 rsync 客户端看到的名字,类似于 Samba 服务器提供的共享名。而服务器真正同步的数据是通过 path 来指定的

基本模块参数

path —指定当前模块在 rsync 服务器上的同步路径,该参数是必须指定的

comment —给模块指定一个描述,该描述连同模块名在客户连接得到模块列表时显示给客户

模块控制参数

use chroot = —默认为 true,在传输文件之前首先 chroot 到 path 参数所指定的目录下;优点,安全;缺点,需要 root 权限,不能备份指向 path 外部的符号连接所指向的目录文件

uid = —指定该模块以指定的 UID 传输文件;默认nobody

gid = —指定该模块以指定的 GID 传输文件;默认nobody

max connections —最大并发连接数,0为不限制

lock file —指定支持 max connections 参数的锁文件。默认 /var/run/rsyncd.lock

list —指定当客户请求列出可以使用的模块列表时,该模块是否应该被列出。默认为 true,显示

read only = —只读选择,也就是说,不让客户端上传文件到服务器上。默认true

write only = —只写选择,也就是说,不让客户端从服务器上下载文件。默认false

ignore errors —忽略IO错误。默认true

ignore nonreadable —指定 rysnc服务器完全忽略那些用户没有访问权限的文件。这对于在需要备份的目录中有些不应该被备份者获得的文件时是有意义的。false

timeout = —该选项可以覆盖客户指定的 IP 超时时间。从而确保 rsync 服务器不会永远等待一个崩溃的客户端。对于匿名 rsync 服务器来说,理想的数字是 600(单位为秒)。0 (未限制)

dont compress —用来指定那些在传输之前不进行压缩处理的文件。该选项可以定义一些不允许客户对该模块使用的命令选项列表。必须使用选项全名,而不能是简称。当发生拒绝某个选项的情况时,服务器将报告错误信息然后退出。例如,要防止使用压缩,应该是:”dont compress = ”。 .gz .tgz .zip .z .rpm .deb .iso .bz2 .tbz

模块文件筛选参数

exclude —指定多个由空格隔开的多个文件或目录(相对路径),并将其添加到 exclude 列表中。这等同于在客户端命令中使用 –exclude 来指定模式

exclude from —指定一个包含 exclude 规则定义的文件名,服务器从该文件中读取 exclude 列表定义

include —指定多个由空格隔开的多个文件或目录(相对路径),并将其添加到 include 列表中。这等同于在客户端命令中使用 –include 来指定模式

include from —指定一个包含 include 规则定义的文件名,服务器从该文件中读取 include 列表定义

模块用户认证参数

auth users —指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块(和系统用户没有任何关系)。用户名和口令以明文方式存放在 secrets file 参数指定的文件中。默认为匿名方式
secrets file —指定一个 rsync 认证口令文件。只有在 auth users 被定义时,该文件才起作用。文件权限必须是 600
strict modes —指定是否监测口令文件的权限。为 true 则口令文件只能被 rsync 服务器运行身份的用户访问,其他任何用户不可以访问该文件。默认为true

模块访问控制参数

hosts allow —用一个主机列表指定哪些主机客户允许连接该模块。不匹配主机列表的主机将被拒绝。默认值为 *
hosts deny —用一个主机列表指定哪些主机客户不允许连接该模块

模块日志参数

transfer logging —使 rsync 服务器将传输操作记录到传输日志文件。默认值为false

log format —指定传输日志文件的字段。默认为:”%o %h [%a] %m (%u) %f %l”
设置了”log file”参数时,在日志每行的开始会添加”%t [%p]“;
可以使用的日志格式定义符如下所示:
%o —操作类型:”send” 或 “recv”
%h —远程主机名
%a —远程IP地址
%m —模块名
%u —证的用户名(匿名时是 null)
%f —文件名
%l —文件长度字符数
%p —该次 rsync 会话的 PID
%P —模块路径
%t —当前时间
%b —实际传输的字节数
%c —当发送文件时,记录该文件的校验码

3、服务端配置

vim /etc/rsyncd.conf --为 rsyncd 服务编辑配置文件,默认没有,需自己编辑

uid = root —rsync运行权限为root

gid = root —rsync运行权限为root

use chroot = no —是否让进程离开工作目录

max connections = 5 —最大并发连接数,0为不限制

timeout = 600 —超时时间

pid file = /var/run/rsyncd.pid —指定rsync的pid存放路径

lockfile = /var/run/rsyncd.lock —指定rsync的锁文件存放路径

log file = /var/log/rsyncd.log —指定rsync的日志存放路径

[web1] —模块名称
path = /data/test/src —该模块存放文件的基础路径
ignore errors = yes —忽略一些无关的I/O错误
read only = no —客户端可以上传
write only = no —客户端可以下载
hosts allow = 192.168.22.12 —允许连接的客户端主机ip
hosts deny = —黑名单,表示任何主机
list = yes
auth users = web —认证此模块的用户名
secrets file = /etc/web.passwd —指定存放“用户名:密码”格式的文件

mkdir /data/test/src --创建基础目录

mkdir /data/test/src/george --再创建一个目录

touch /data/test/src/{1,2,3}

echo “web:123” > /etc/web.passwd --创建密码文件

chmod 600 /etc/web.passwd

service xinetd restart

四、测试
1、客户端
环境:192.168.22.12

yum -y install rsync

mkdir /data/test

2、小试参数

rsync -avzP web@192.168.22.11::web1 /data/test/ --输入密码 123;将服务器 web1 模块里的文件同步至 /data/test,参数说明:

-a —参数,相当于-rlptgoD,
-r —是递归
-l —是链接文件,意思是拷贝链接文件
-i —列出 rsync 服务器中的文件
-p —表示保持文件原有权限
-t —保持文件原有时间
-g —保持文件原有用户组
-o —保持文件原有属主
-D —相当于块设备文件
-z —传输时压缩
-P —传输进度
-v —传输时的进度等信息,和-P有点关系

rsync -avzP --delete web@192.168.22.11::web1 /data/test/ --让客户端与服务器保持完全一致, --delete

rsync -avzP --delete /data/test/ web@192.168.22.11::web1 --上传客户端文件至服务端

rsync -avzP --delete /data/test/ web@192.168.22.11::web1/george --上传客户端文件至服务端的 george 目录

rsync -ir --password-file=/tmp/rsync.password web@192.168.22.11::web1 --递归列出服务端 web1 模块的文件

rsync -avzP --exclude=“3” --password-file=/tmp/rsync.password web@192.168.22.11::web1 /data/test/ --同步除了路径以及文件名中包含 “3” *的所有文件

3、通过密码文件同步

echo “123”> /tmp/rsync.password

chmod 600 /tmp/rsync.password

rsync -avzP --delete --password-file=/tmp/rsync.password web@192.168.22.11::web1 /data/test/ --调用密码文件

4、客户端自动同步

crontab -e

10 0 * rsync -avzP —delete —password-file=/tmp/rsync.password web@192.168.22.11::web1 /data/test/

crontab -l

五、数据实时同步
环境:Rsync + Inotify-tools

1、inotify-tools
是为linux下 inotify文件监控工具提供的一套c的开发接口库函数,同时还提供了一系列的命令行工具,这些工具可以用来监控文件系统的事件

inotify-tools是用c编写的,除了要求内核支持 inotify 外,不依赖于其他

inotify-tools提供两种工具:一是inotifywait,它是用来监控文件或目录的变化,二是inotifywatch,它是用来统计文件系统访问的次数

2、安装inotify-tools
下载地址:http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

yum install –y gcc --安装依赖

mkdir /usr/local/inotify

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

cd inotify-tools-3.14

./configure --prefix=/usr/local/inotify/

make && make install

3、设置环境变量

vim /root/.bash_profile

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

source /root/.bash_profile

echo ‘/usr/local/inotify/lib’ >> /etc/ld.so.conf --加载库文件

ldconfig

ln -s /usr/local/inotify/include /usr/include/inotify

4、常用参数
-m —始终保持监听状态,默认触发事件即退出

-r —递归查询目录

-q —打印出监控事件

-e —定义监控的事件,可用参数:

access —访问文件

modify —修改文件

attrib —属性变更

open —打开文件

delete —删除文件

create —新建文件

move —文件移动

—fromfile —从文件读取需要监视的文件或者排除的文件,一个文件一行,排除的文件以@开头

—timefmt —时间格式

—format —输出格式

—exclude —正则匹配需要排除的文件,大小写敏感

—excludei —正则匹配需要排除的文件,忽略大小写

%y%m%d %H%M —年月日时钟

%T%w%f%e —时间路径文件名状态

5、测试一
检测源目录中是否有如下动作:modify,create,move,delete,attrib;

一旦发生则发布至目标机器;

方式为 ssh
src: 192.168.22.11(Rsync + Inotify-tools) dest: 192.168.22.12

两台机器需要做好 ssh 免密登录

# mdkir /data/test/dest/ --dest机器
# mdkir /data/test/src/ --src机器
# rsync -av --delete /data/test/src/ 192.168.22.12:/data/test/dest --测试下命令
# vim /data/test/test.sh
#!/bin/bash

/usr/local/inotify/bin/inotifywait -mrq -e modify,create,move,delete,attrib /data/test/src | while read events
do
rsync -a --delete /data/test/src/ 192.168.22.12:/data/test/dest
echo “date +'%F %T' 出现事件:$events” >> /tmp/rsync.log 2>&1
done
# chmod 755 /data/test/test.sh
# /data/test/test.sh &
# echo ‘/data/test/test.sh &’ >> /etc/rc.local --设置开机自启
我们可以在目标机上也写一个这样的脚本:

rsync -a —delete /data/test/dest/ 192.168.22.11:/data/test/src ;

这样可以实现双向同步

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/99931.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【毕业设计_课程设计】基于机器视觉的害虫种类及数量检测(源码+论文)

文章目录0 项目说明1 研究目的2 研究内容及结论3 文件介绍4 论文目录5 项目源码0 项目说明 基于机器视觉的害虫种类及数量检测 提示:适合用于课程设计或毕业设计,工作量达标,源码开放 1 研究目的 研究的目的在于建立一套远程病虫害自动识别…

UNION 和 UNION ALL

合并查询结果 利用UNION关键字,可以给出多条SELECT语句,并将它们的结果组合成单个结果集。合并时,两个表对应的列数和数据类型必须相同,并且相互对应。 各个SELECT语句之间使用UNION或UNION ALL关键字分隔。 语法格式 SELECT c…

(附源码)node.js外卖平台 毕业设计 151448

摘 要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于外卖平台当然也不能排除在外,随着网络技术的不断成熟,带动了外卖平台,它彻底改变了过去传统的管理方式…

神州数码交换机CS6200命令(二)

神州数码交换机CS6200命令(二) 1.基于流的重定向 QOS(Quality of Servcie)-服务品质保障,不产生新的带宽而是根据需求控制带宽 简易配置顺序: 1.配置分类表(class map) 对数据建立一个分类规则 2.配置策略表(policy map) 对…

左(9)--题目讲解

前言 仅记录学习笔记,如有错误欢迎指正。 题目: leetcode的洗衣机问题 思路: 首先看能不能数量相等 总和%机器数量 0 然后分情况讨论:对于任何一个位置都有至少需要搬动n次,最大值就是答案! 题目2&am…

APT最佳学习案例:写个简易版 ButterKnife

前言 目的:写个简易版 ButterKnife,借手写 ButterKnife 去了解如何实现注解、annotationProcessor 的等使用。 先看下butterknife的结构: 源码地址 https://github.com/LucasXu01/MyButterKnife ButterKnife的使用 在build.gradle添加依…

Java : 详解八种基本数据类型的包装类

Java : 详解八种基本数据类型的包装类 每博一文案 人生路漫漫越长大,越明白每个人的路都是漫长而艰辛的。无论我们有多累,我们都无路可退。 就像马丁说的那样:每一个强大的人都曾咬着牙度过一段,没人帮忙,…

Rabbitmq与交换机

目录 一、交换机简介 1、Exchange(交换机)的作用 2、Exchange(交换机)的类型 3、交换机的属性 二、交换机的使用 1、创建项目 2、给子模块添加依赖( rabbitmq-provider、 rabbitmq-consumer) 3、直连交换机(Direct Exchange)使用 4、主题交换机(Topic Exchange)的使用 5、…

【图像分割】和声搜索算法图像多级阈值分割【含Matlab源码 2044期】

⛄一、和声搜索算法的图像阈值寻优算法简介 苹果图像识别是指将苹果果实从枝叶、土壤、天空等背景中分离出来, 即图像分割。最大类间方差法 (OTSU算法)是由日本学者大津展之 (OTSU) 提出的全局阈值选取方法。该方法存在缺乏自适应性、易造成噪声干扰和过分割现象、运算需要大量…

[附源码]计算机毕业设计Python的项目管理系统(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

Kafka 安装 快速入门

Kafka 安装 快速入门 Apache Kafka是流行的用于大规模收集、处理、存储和分析数据的开源流处理系统。它以其卓越的性能、低延迟、容错和高吞吐量而闻名,能够每秒处理数千条消息。常用来构建数据管道、利用实时数据流、实现系统监控、数据集成。 如上图,…

【MindStudio训练营第一季】基于MindX的U-Net网络的工业质检实践作业

1.1 作业介绍 1.1.1 作业背景 随着新一轮科技革命和产业变革的加速演进,全球各国都在借助新技术推动制造业升级,从工业2.0自动化开始兴起,到工业3.0信息化普及,如今正迈向工业4.0智能化。借助IoT、工业大数据、人工智能等先进技…

“==” 操作符 与 equals 方法的区别,toString

“” 操作符 与 equals 方法的区别,toString 每博一文案 读过这样一段话:很多人都羡慕我的坚强独立,夸赞我的善解人意。无论什么事情, 我都会把别人放在首位,宁愿自己吃亏,也会尽力满足别人的需求&#xf…

Allegro关闭线段显示不连续效果操作指导

Allegro关闭线段显示不连续效果操作指导 用Allegro进行PCB设计的时候偶尔会出现线段不连续的情况,尤其是在线段拐弯处,实际上并不是线段没有连接上,只是一个显示效果而已,如下图 如何去关闭这个显示效果,具体操作如下 选择Setup-Design Parameter 选择Display 取消勾…

java中实现分页的常见几种方式

文章目录1. 前言2. 先说结论3. 例子1. 数据库SQL的限制条件(limit、fetch)2. 使用List集合的截取功能实现3. 插件PageHelper1. 前言 无论是自我学习中,还是在工作中,固然会遇到与前端搭配实现分页的功能,发现有几种方式&#xff…

IIC总线(二)-----IIC控制器与MPU6050

1.Exynos_4412下的IIC控制器 Exynos 4412 SCP简化指令集计算机(RISC)微处理器支持四个多主控间集成电路(I2C)总线串行接口。为了在连接到I2C总线的总线主机和外围设备之间传输信息,我们使用了一条专用的串行数据线&am…

IO流(一)

IO流的思维导图如下所示: 我们下来对文件、IO流原理及流的分类,节点流(访问文件的、访问数组的、访问管道的)和处理流(缓冲流、对象流、管道流),输入流(InputStream和Reader)和输出流…

[附源码]Nodejs计算机毕业设计基于协同过滤技术的旅游景点购票系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

Python+Selenium自动化测试详细教程

前言 PythonSelenium 来实现的web端自动化, 以下演示会用到禅道、百度和自己编写的html. 一、准备工作 1、安装 安装Python 3安装selenium库,命令:pip install selenium搭建禅道环境 2、导入浏览器驱动 selenium操作不同的浏览器,需要下…

Windows10 系统下载网址推荐(二)

Windows10 系统下载网址推荐(二)1. 计算机操作系统概述2.HelloWindows3. 山己几子木4. xitongku5. TechBench结束语1. 计算机操作系统概述 操作系统(Operating System,OS)是一组主管并控制计算机操作、运用和运行硬件…