1、什么是 Rsync?

Rsync 是一个开源的快速备份工具,是Linux和UNIX操作系统默认安装的组件之一,可在不同主机间镜像同步整个目录,并支持增量备份文件传输,保持链接和权限,采用优化的同步算法,传输前执行压缩,适用于异地备份,镜像服务器等应用。

Rsync 官网地址:https://rsync.samba.org/

2、配置 rsync 源服务器

在远程同步任务中,负责发起 rsync 同步操作的客户端称为发起端,负责响应来自客户端的 rsync 同步操作的服务器称为同步源

同步过程中,同步源负责提供文档的原始位置,发起端应对该位置具有读取权限。

关闭iptables 防火墙和selinux。

# service iptables stop
# setenforce 0

将rsync 源服务器和rsync 客户端的/etc/hosts配置文件解析成一样的,如下配置。

# tail -2 /etc/hosts
192.168.31.108  linuxserver.com
192.168.31.226  linuxclient.com

配置/etc/rsyncd.conf文件

# vi /etc/rsyncd.conf ### This is rsyncd.conf
### By 微信公众号:杰哥的IT之旅(ID:Jake_Internet)
uid = rsync                                      // 使用的用户
gid = rsync                                      // 使用的用户
use chroot = no                                  // 是否使用根目录锁   如果"use chroot"指定为true,那么 rsync 在传输文件以前首先 chroot 到 path 参数所指定的目录下。这样做的原因是实现额外的安全防护,但是缺点是需要以 roots 权限,并且不能备份指向外部的符号连接所指向的目录文件。默认情况下 chroot 值为 true。
max connections = 2000                           // 指定该模块的最大并发连接数量以保护服务器,超过限制的连接请求将被告知随后再试,默认值是 0,也就是没有限制。
timeout = 600                                    // 通过该选项可以覆盖客户指定的IP超时时间。通过该选项可以确保rsync服务器不会永远等待一个崩溃的客户端。超时单位为秒钟,0表示没有超时定义,这也是默认值。对于匿名rsync服务器来说,一个理想的数字是600。
pid file = /var/run/rsyncd.pid                   // 存放进程 ID 的文件位置
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log                   // 日志文件位置
ignore errors
read only = false                                // 是否为只读
list = false
hosts allow = 192.168.31.0/24                    // 允许访问的客户端 IP 地址范围
hosts deny = 0.0.0.0/32                          // 拒绝访问的客户端 IP 地址范围
auth users = rsync_backup                        // 授权账户
secrets file = /etc/rsync.password               // 存放账户信息的数据文件
#################################
[backup]
path = /backup

启动rsync服务

这时,在启动 rsync 服务时,会出现如上报错。

# rsync --daemon
failed to create pid file /var/run/rsyncd.pid: File exists

解决方案:需删除/var/run/rsyncd.pid文件后,并重启rsync服务

# rm -rf /var/run/rsyncd.pid                     // 删除 rsyncd.pid 文件
# rsync --daemon                                 // 再重新启动 Rsync 服务

创建/etc/rsync.password文件

# echo “rsync_backup:123456”  >/etc/rsync.password

查看/etc/rsync.password文件,是否成功,并调整文件权限。

# cat /etc/rsync.password
rsync_backup:123.com
# chmod 600 /etc/rsync.password

监听服务端口。

# pgrep rsync
5081
5125
# netstat -lntup|grep rsync
tcp        0      0 192.168.31.108:873          0.0.0.0:*                   LISTEN      5081/rsync
tcp        0      0 :::873                      :::*                        LISTEN      5125/rsync

创建rsync需要使用对的真实用户

# useradd -s /sbin/nologin -M rsync
# id rsync
uid=500(rsync) gid=500(rsync) 组=500(rsync)

创建rsync推送需要的目录

# mkdir /backup
# chown -R rsync.rsync /backup/

3、使用 Rsync 备份工具

rsync 命令的基本用法

大多数的备份程序要求指定原始位置、目标位置,rsync 命令其实跟 cp 命令相似。

比如:将文件/etc/fstab、目录/boot/grub同步备份到/opt目录下。

-r:选项表示递归整个目录、-l:选项表示备份链接文件。

# rsync /etc/fstab /opt
# rsync -rl /etc/fstab /boot/grub /opt

rsync 命令格式

  • 基本格式:rsync [选项] 原始位置 目标位置

rsync 命令常用备份选项

-r:递归模式,包含目录及子目录中的所有文件。
-l:对于符号链接文件仍复制为符号链接文件。
-v:显示同步过程的详细信息。
-a:归档模式,保留文件的权限、属性等信息,组合选项等于-rlptgoD。
-z:在传输文件时进行压缩。
-p:保留文件的权限标记。
-t:保留文件的时间标记。
-g:保留文件的属组标记。(仅超级用户使用)
-o:保留文件的属主标记。(仅超级用户使用)
-H:保留硬连接文件。
-A:保留 ACL 属性信息。
-D:保留设备文件及其他特殊文件。
-- delete:删除目标位置有而原始位置没有的文件。
--checksum:根据校验和(而不是文件大小、修改时间)来决定是否跳过文件。

配置源的表示方法

执行远程同步任务时,rsync 命令需指定同步源服务器中的资源位置。

两种表示方法

用户名@主机地址::共享模块名(两个冒号分隔形式)
rsync://用户名@主机地址/共享模块名(URL 地址形式)

使用真实用户测试rsync服务

如果ssh端口修改了,需加上端口。

命令格式:rsync -参数 文件 -e ‘ssh -p 端口号’ 用户名@ip:目录路径

# rsync -avz abc '-e ssh -p 22' root@linuxserver.com:/tmp     // 实操命令格式
root@linuxserver.com's password:                              //输入 linuxserver 设备的 root 密码
sending incremental file list
abcsent 64 bytes  received 31 bytes  27.14 bytes/sec
total size is 0  speedup is 0.00
# ll /tmp                                                    // 查看同步结果
总用量 52
-rw-r--r--. 1 root root    0 12月 30 07:25 abc

在实际生产环境中的备份工作,通常都是重复性的,那么我们可以设置个定时任务来完成备份操作。比如:每天凌晨04:00对服务器的tmp共享模块同步,并下载到本地/mnt/jacktian目录下,通过crond服务来完成。

这种同步过程中,我们不想输入密码,那么需创建一个密码文件,保存rsync_backup用户的密码。

# cat /etc/rsync.password
rsync_backup:123.com
# chmod 600 /etc/rsync.password
# ll /etc/rsync.password
-rw-------. 1 root root 21 12月 30 08:04 /etc/rsync.password
在执行 rsync 同步时使用选项--password-file=/etc/rsync.password指定。# crontab -e
00 04 * * * /usr/bin/rsync -az --delete --password-file=/etc/rsync.password@rsync_backup@192.168.31.108::tmp /mnt/jacktian
# service crond restart
# chkconfig crond on

4、配置 rsync+inotify 实时同步


Linux 从 2.6.13 版内核开始提供了 inotify 通知接口,用来监控文件系统的各种变化情况,如文件的存取,删除,移动,修改等。利用这个机制,可实现文件异动警告,增量备份,针对目录或文件的变化及时做出响应。

rsync+inotify 可以实现触发式备份,只要原始位置的文档发生变化,则立即启动增量备份,否则处于静默等待状态,避免了按固定周期备份时存在的延迟性,周期过密等问题。

inotify 主要做本机监控,在触发式备份应用中更适合上行同步。

inotify 机制提供了三个调控参数

  • max_queued_events:表示监控事件队列
  • max_user_instances:最多监控实例数
  • max_user_watches:每个实例最多监控文件数
# cat /proc/sys/fs/inotify/max_queued_events
16384
# cat /proc/sys/fs/inotify/max_user_instances
128
# cat /proc/sys/fs/inotify/max_user_watches
8192

调整 inotify 内核参数

当要监控的目录,文件数量较多或者变化频繁时,建议加大这三个参数的值。

# vi /etc/sysctl.conf
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
# sysctl -p

安装 inotify-tools

安装 inotify-tools 主要提供inotifywait,inotifywatch 等工具,用来监控,汇总改动情况。

# tar zxf inotify-tools-3.14.tar.gz
# cd inotify-tools-3.14
# ./configure && make && make install

以监控网站目录/var/www/html为例,执行inotifywait命令后,在另外一个终端中改动/var/www/html目录下的内容。

-e:指定要监控的事件
-m:表示持续监控
-r:表示递归整个目录
-q:简化输出信息
# mkdir /var/www/html -p
# inotifywait -mrq -e modify,create,move,delete /var/www/html/

另一个终端:在/var/www/html/目录下添加文件、移动文件、跟踪屏幕输出结果。

# mkdir /var/www/html/a
# mkdir /var/www/html/b
# mv /var/www/html/b /var/www/html/bb
# rm -rf /var/www/html/a

inotifywait 可监控 modify(修改),create(创建),move(移动),delete(删除),attrib(属性更改)等各种事件,一有变动立即输出结果。可用于收集系统变动情况,并在运行结束后输出汇总的变化情况。

# inotifywait -mrq -e modify,create,move,delete /var/www/html/
fy,create,move,delete /var/www/html/
/var/www/html/ CREATE,ISDIR a
/var/www/html/ CREATE,ISDIR b
/var/www/html/ MOVED_FROM,ISDIR b
/var/www/html/ MOVED_TO,ISDIR bb
/var/www/html/ DELETE,ISDIR a

编写触发式同步脚本

inotifywait输出的监控结果中,每行记录中包括目录,事件,文件,可识别变动情况,只要检测到有变动时执行rsync上行同步操作。

注意:当更新频繁时,避免并发执行rsync备份,若rsync进程已经存在,则忽略本次同步,或者根据rsync进程数量来决定是否同步
脚本用来测试本机/var/www/html目录的变动,一旦有更新,将触发rsync同步操作,并上传至服务器192.168.31.108的/var/www/html目录下。

触发式上行同步验证过程

1、使用rsync工具执行一次上行同步;
2、在本机运行bak_transfer.sh脚本;
3、在本机的/var/www/html目录下,执行创建,删除,修改等操作;
4、查看服务器中的/var/www/html目录中的变化;

# vi bak_transfer.sh
# This is bak_transfer.sh
# 微信公众号:杰哥的IT之旅(ID:Jake_Internet)
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,move,attrib,delete /var/www/html/"
RSYNC_CMD="rsync -azH --delete /var/www/html/ rsync_backup@192.168.31.108:/var/www/html"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
doif [ $(pgrep rsync | wc -l) -le 0 ]then$RSYNC_CMDfi
done# chmod +x bak_transfer.sh
# ./bak_transfer.sh
# echo "/bin/bash /root/bak_transfer.sh" >> /etc/rc.local

Rsync 启动异常解决方案归纳

报错:failed to create pid file /var/run/rsyncd.pid: File exists
解决:rm /var/run/rsyncd.pid
启动服务:rsync --daemon --config=/etc/rsyncd.conf报错:rsync: failed to connect to IP 地址: Connection refused (111)
rsync error: error in socket IO (code 10) at clientserver.c(124) [receiver=3.0.5]
解决:启动服务:rsync --daemon --config=/etc/rsyncd.conf报错:rsync: failed to connect to IP 地址: Connection timed out (110)
rsync error: error in socket IO (code 10) at clientserver.c(124) [receiver=3.0.5]
解决:可能是 iptables 防火墙开启导致无法通信,可以设置规则放行873端口或者直接关闭防火墙。报错:@ERROR: chroot failed
rsync: connection unexpectedly closed (75 bytes read so far)
rsync error: error in rsync protocol data stream (code 12) at io.c(150)
解决:rsync.conf 中设置的 path 路径不存在,需新建目录。

Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步相关推荐

  1. linux打包java jar_在linux环境下修改可运行jar包配置并重新打包

    在linux环境下修改可运行jar包配置并重新打包步骤: 1)mkdir xxx 2)mv XXX.jar XXX 3)jar xvf XXX.jar 4)mv XXX.jar ../ 5)vi XX ...

  2. Linux 环境下的抓包工具 - tcpdump

    Linux 环境下,通常通过 tcpdump 来进行抓包和分析.它是几乎所有 Linux 发行版本预装的数据包抓取和分析工具. 一.tcpdump 的用法 tcpdump [-aAbdDefhHIJK ...

  3. 10 款 Linux 环境下的开源替代工具

    在 Linux 操作系统下,我们经常使用 cat 命令去连接多个文件并打印到标准输出,合成几个文件为一个目标文件,追加几个文件到目标文件中. 最近我在 GitHub 上发现了一个具有相似作用的命令叫做 ...

  4. PLY:嵌入式Linux环境下的内核探测工具

    简单Linux系统环境下的内核探测 在笔者之前的文章中提到,基于内核eBPF探针的常用工具主要bpftrace.bcc,二者复杂的依赖库使得其在嵌入式Linux系统环境下常常是不可用的.截止目前,一些 ...

  5. linux下udp数据包接收工具,linux环境下数据包回放工具--pplayer分享

    pplayer(packet player)是我写的一款小工具,支持主流协议,专门用来测试IPS和防火墙设备,经长时间验证,简单可靠,故发布. 程序的原理很简单,首先加载pcap包中的数据包,保存在内 ...

  6. linux环境下,oracle备份和还原库

    1.切换用户 su - oracle 2.导出库(用户名:HAINAN_BI,密码:1) expdp HAINAN_BI/1@192.168.3.165:/orcl directory=DATA_PU ...

  7. LINUX环境下VNC服务端与客户端配置

    公司开发原来都是用的Xmanager软件,但近期爆出该软件存在后门漏洞问题,安防部门要求停止使用老版本的Xmanager进行升级或改用开源VNC软件,因此在网上查看了一些配置说明,特整理如下: VNC ...

  8. adk linux 64 下载,Linux环境下的Android的ADK安装配置

    下载android sdk 将android sdk下载至/opt/download目录下.cd /opt mkdir download cd download wget http://dl.goog ...

  9. 翻译python代码的软件_Linux环境下的Python翻译工具源码

    玩蛇网Python教程源码示例,本文源码是用于Linux环境下的Python翻译工具源码详解. 学习计算机编程语言一定会涉及到英文和学习应用,但通常英语词典在Linux环境下都不如Win环境下的好用. ...

最新文章

  1. Java除法不精确引入BigDecimal
  2. Simulink仿真---SPWM算法
  3. 一分钟了解阿里云产品:容器服务概述
  4. 成功跳槽百度工资从15K涨到28K,跳槽薪资翻倍
  5. 犹太教、基督教和伊斯兰教的简单关系
  6. Android app 启动优化
  7. R 语言计算卡方检验的P值
  8. 想做出高级又好看的PPT,这8个窍门你别错过
  9. 科研用matlab还是python_科的解释|科的意思|汉典“科”字的基本解释
  10. 不重视,小程序将会带来大风险!——三大风险、隐私合规,小程序主该如何面对?
  11. kibana.bat文件闪退问题
  12. 【2023校招刷题】第二期:数字IC笔试模拟题(2)详细解析版
  13. git 本地仓添加多个远端仓库
  14. json bosn
  15. 大家一起学习用VBA查询数据
  16. javaweb简化的医院管理系统
  17. 西南石油大学天空教室_【Hi西柚】善意指数统计,在西南石大可以遇见多少温暖...
  18. 2021前端年终总结|纵使前方不易,独善其身,继续前行。。。
  19. activiti审批历史查询
  20. 基于C++的网卡带宽千兆百兆判断测试程序

热门文章

  1. activity调用fragment的方法_Fragment 的现在以及未来
  2. 多目标进化优化_科研一角|论文分享 | 等离子喷焊工艺参数多目标优化
  3. pytorch按照索引取batch中的数
  4. 《MFC游戏开发》笔记三 游戏贴图与透明特效的实现
  5. Fixjs——显示交互基类InteractiveObject
  6. 一个不完全恢复的疑惑?
  7. 通过canal实现把MySQL数据实时增量到kafka
  8. 2018双十一苏宁20+篇技术干货全整理
  9. 使用 Windows 7 VHD启动计算机
  10. mongodb 远程连接