作者:JackTian
微信公众号:杰哥的IT之旅(ID:Jake_Internet)

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/hosts192.168.31.108  linuxserver.com192.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.locklog file = /var/log/rsyncd.log                   // 日志文件位置ignore errorsread only = false                                // 是否为只读list = falsehosts 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 --daemonfailed 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 rsync50815125# netstat -lntup|grep rsynctcp        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 rsyncuid=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 listabcsent 64 bytes  received 31 bytes  27.14 bytes/sectotal 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 -e00 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_events16384# 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 = 16384fs.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/bashINOTIFY_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 FILEdo        if [ $(pgrep rsync | wc -l) -le 0 ]        then                $RSYNC_CMD        fidone# 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 路径不存在,需新建目录。

©著作权归作者所有:来自51CTO博客作者mb5fe55acf14b1a的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 获取apk签名信息
  2. 在Android应用中实现Google搜索的例子
  3. Android(安卓)手绘 - 支持保存为图片
  4. Cocos2D-HTML5 Android项目编译
  5. Android(安卓)重读官方文档 4 SharedPreferences
  6. Android(安卓)在线预览ppt、doc、xls、txt等文件
  7. android media 播放器
  8. Android中JNI的使用之HelloWorld
  9. Android(安卓)resource linking failed AAPT: error: not well-f

随机推荐

  1. Android 基本控件
  2. Android 动态布局
  3. android 调用系统应用
  4. ch02 Android TextView与EditView
  5. android studio更新到1.5后遇到的问题
  6. android实现调用系统音乐播放器
  7. android 两点缩放字体
  8. 九宫格
  9. Android 2D绘图总结
  10. android WebView java与js相互调用