001.Rsync简介及使用

一 基础知识

1.1 简介

Rsync是Linux系统中的数据镜像备份工具,通过rsync可以将本地系统数据通过网络备份到任何远程主机上。rysnc不仅仅能对不同位置的文件和目录进行同步,还可以差异计算,压缩传输文件来最小化数据传输,和cp命令相比,rysnc的优势在于高效的差异算法。并且,rysnc还支持网络数据传输,在复制文件的同时,会把源端与目的端的文件进行比较,只有当文件不一样的时候在进行复制。具有以下特性:

  • 可以镜像保存整个目录树和文件系统;
  • 可以同步增量数据,文件传输效率高,同步时间短;
  • 可以保留原有文件的权限、时间等属性;
  • 加密传输数据,保证了数据的安全性。

1.2 相关目录

/etc/rsyncd(文件夹)

| - rsyncd.conf(rsync 服务器的配置文件)

| - rsyncd.secrets(用户密码文件,客户端使用其中的账号密码访问,需要 600 权限)

| - rsyncd.motd(自定义用户登录后显示的服务器信息,即 messageoftoday)

1.3 其他

  • rsync服务器以deamon方式运行rsync服务,需要打开rsync deamon和启动xinetd服务,默认端口873。
  • rsync客户端是发起rsync连接的服务器,安装rsync即可。
  • rsync客户端发起连接后,rsync服务器会检查rsync客户端提交rsync服务器内建的户名和密码是否正确,如果通过认证检测,则开始文件传输,传输的过程是按要求先比对文件的大小、属性、权限、MD5值等信息,如果两端文件信息不一致,则按要求同步文件的区别块。

二 部署实例

2.1 拓扑

2.2 安装rsync

  1 [root@apache ~]# cd /tmp/
  2 [root@apache tmp]# tar -zxvf rsync-3.1.2.tar.gz
  3 [root@apache tmp]# cd rsync-3.1.2/
  4 [root@apache rsync-3.1.2]# ./configure
  5 [root@apache rsync-3.1.2]# make && make install

注意:Host A和Host B都需要安装。

2.3 配置host a rsync

  1 [root@apache ~]# vi /etc/rsyncd.conf
  2 # /etc/rsyncd: configuration file for rsync daemon mode
  3 # See rsyncd.conf man page for more options.
  4 
  5 # configuration example:
  6 uid = nobody
  7 gid = nobody
  8 use chroot = no
  9 list = no
 10 max connections = 10
 11 pid file = /var/run/rsyncd.pid
 12 log file = /var/log/rsync.log
 13 log format = %t %a %m %f %b
 14 motd file = /etc/rsyncd/rsyncd.motd
 15 # address = 192.161.1.1
 16 # exclude = lost+found/
 17 # transfer logging = yes
 18 # timeout = 900
 19 # ignore nonreadable = yes
 20 # dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
 21 
 22 [data]
 23 path= /tmp
 24 comment = This is my back file
 25 transfer logging = yes
 26 ignore errors
 27 read only = no
 28 list = no
 29 hosts allow = 172.24.8.0/24
 30 uid =root
 31 gid =root
 32 auth users = backuser
 33 secrets file = /etc/rsync.password
 34 
 35 #[ftp]
 36 #path = /home/ftp
 37 #comment = ftp export area
 38 
 39 [root@apache ~]# echo "backuser:x120952576" >/etc/rsync.password
 40 [root@apache ~]# chmod 600 /etc/rsync.password
 41 [root@apache ~]# service iptables stop				#建议放通或关闭防火墙

配置解释:

uid:指定当该模块传输文件时守护进程应该具有的用户ID,默认为nobody;

gid:指定当该模块传输文件时守护进程应该具有的用户组ID,默认为nobody;

use chroot:为true时,则rsync在传输文件前会先chroot到path参数所指定的目录下,可实现额外的安全防护,但是需要以roots权限,并且不能备份指向外部的符号连接所指向的目录文件。默认情况下chroot值为true;

list:该选项设定当客户请求可以使用的模块列表时,该模块是否应该被列出。如果设置该选项为false,可以创建隐藏的模块。默认值是true;

port:端口,默认为873;

max connections:指定该模块的最大并发连接数量以保护服务器,超过限制的连接请求将被告知随后再试。默认值是0,也就是没有限制;

pid file:此选项指定rsync守护进程对应的pid文件路径;

log file:此选项指定rsync的日志输出文件路径;

log format:日志格式;

[data]:表示一个模块的开始,data为模块的名称;

exclude:指定排除在外的多个由空格隔开的文件或目录(相对路径);

transfer logging:是否记录传输文件的日志;

timeout:指定的IP超时时间,以确保rsync服务器不会等待一个崩溃的客户端,单位为秒钟,默认为0,表示没有超时定义;

address:服务器监听的IP地址,可省略;

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

dont compress:指定不进行压缩处理再传输的文件,默认值是*.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz;

path:指定该模块的供备份的目录树路径,该参数是必须指定的;

comment:给模块指定一个描述,该描述连同模块名在客户连接得到模块列表时显示给客户,默认没有描述定义;

ignore errors:指定rsyncd在判断是否运行传输时的删除操作时忽略server上的IO错误,一般来说rsync在出现IO错误时将将跳过--delete操作,以防止因为暂时的资源不足或其它IO错误导致的严重问题;

read only:是否只读,该选项设定是否允许客户上载文件,如果为true那么任何上载请求都会失败,如果为false并且服务器目录读写权限允许那么上载是允许的,默认值为true。

hosts allow:该选项指定哪些IP的客户允许连接该模块;

auth users:该选项指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块;

secrets file:该选项指定一个包含定义用户名:密码对的文件,只有在"auth users"被定义时,该文件才有作用。

注意:该文件的权限一定要是600,否则客户端将不能连接服务器。

2.4 host a启动

  1 [root@apache ~]# /usr/local/bin/rsync --daemon
  2 [root@apache ~]# echo "/usr/local/rsync/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf">>/etc/rc.d/rc.local		#开机启动
  3 [root@apache ~]# ps -ef | grep rsync				#验证是否启动

2.5 配置host b rsync

  1 [root@backup ~]# mkdir /backfile		#创建备份目录
  2 [root@backup ~]# echo "x120952576" >/etc/rsync.password
  3 #创建和Host a匹配的密码,路径可自定义,若以命令形式运行,则客户端不需要带用户名。
  4 [root@backup ~]# chmod 666 /etc/rsync.password
  5 [root@backup ~]# service iptables stop		#建议放通或关闭防火墙

2.6 执行备份

  1 [root@backup ~]# /usr/local/bin/rsync -vzrtopg --delete --progress backuser@172.24.8.10::data /backfile --password-file=/etc/rsync.password --port=873

参数解释:

-vzrtopg:-v表示“--verbose”,即详细模式输出;-z表示“--compress”,即对备份的文件在传输时进行压缩处理;-r表示“--recursive”,即对子目录以递归模式处理;-t表示“--times”,即保持文件时间信息;-o表示“--owner”,即保持文件属主信息;-p表示“--perms”,即保持文件权限;-g表示“--group”,即保持文件属组信息;

--delete:指定以服务端为基准进行数据镜像同步,即保持rsync服务端目录与客户端目录的完全一致性;

--progress:显示数据镜像同步的过程;

backuser@172.24.8.10::data:使用backuser用户对172.24.8.10服务端的data模块进行同步;

/backfile:指定备份文件在客户端机器上存放的路径;

--password-file:指定客户端存放的密码文件位置;

--port:指定端口,若为默认的873则可省略。

三 扩展知识

3.1 相关命令

  1 [root@backup ~]# /usr/local/bin/rsync -vzrtopg --delete --progress /var/log/access.log backuser@172.24.8.10::data --password-file=/etc/rsync.password --port=873    #从客户端上传文件至服务端

3.2 开机启动chkconfig添加

  1 [root@apache ~]# vi /etc/init.d/rsync
  2 #!/bin/bash
  3 
  4 # chkconfig:   - 85 15
  5 # description: rsync
  6 
  7 status1=$(ps -ef | egrep "rsync --daemon.*rsyncd.conf" | grep -v 'grep')
  8 pidfile="/var/run/rsyncd.pid"
  9 start_rsync="rsync --daemon --config=/etc/rsyncd/rsyncd.conf"
 10 
 11 function rsyncstart() {
 12     if [ "${status1}X" == "X" ]; then
 13         rm -f $pidfile
 14         ${start_rsync}
 15         status2=$(ps -ef | egrep "rsync --daemon.*rsyncd.conf" | grep -v 'grep')
 16         if [  "${status2}X" != "X"  ]; then
 17             echo "rsync service start.......OK"
 18         fi
 19     else
 20         echo "rsync service is running !"
 21     fi
 22 }
 23 
 24 function rsyncstop() {
 25     if [ "${status1}X" != "X" ]; then
 26         kill -9 $(cat $pidfile)
 27         status2=$(ps -ef | egrep "rsync --daemon.*rsyncd.conf" | grep -v 'grep')
 28         if [ "${statusw2}X" == "X" ]; then
 29             echo "rsync service stop.......OK"
 30         fi
 31     else
 32         echo "rsync service is not running !"
 33     fi
 34 }
 35 
 36 function rsyncstatus() {
 37     if [ "${status1}X" != "X" ]; then
 38         echo "rsync service is running !"
 39 
 40     else
 41          echo "rsync service is not running !"
 42     fi
 43 }
 44 
 45 function rsyncrestart() {
 46     if [ "${status1}X" == "X" ]; then
 47                echo "rsync service is not running..."
 48                rsyncstart
 49         else
 50                rsyncstop
 51                rsyncstart
 52         fi
 53 }
 54 
 55 case $1 in
 56         "start")
 57                rsyncstart
 58                 ;;
 59         "stop")
 60                rsyncstop
 61                 ;;
 62         "status")
 63                rsyncstatus
 64                ;;
 65         "restart")
 66                rsyncrestart
 67                ;;
 68         *)
 69           echo
 70                 echo  "Usage: $0 start|stop|restart|status"
 71           echo
 72 esac

更多知识链接:https://www.cnblogs.com/f-ck-need-u/p/7220009.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏呆呆熊的技术路

又拍云tokers-谈谈 nginx 信号集

昨天下午的时候,一台引流测试机器的一个 ngx_lua 服务突然出现了一些 HTTP/500 响应,从错误日志打印的堆栈来看,是不久前新发布的版本里添加的一个 ...

8410
来自专栏呆呆熊的技术路

wokerman启动分析

根据上面存储的static::<pre>不能识别此Latex公式: _workers和static::</pre>_pidMap 循环fork进程

13420
来自专栏呆呆熊的技术路

TCP/IP网络编程-进程篇学习笔记

6510
来自专栏大数据实战演练

Kafka消费者 之 如何进行消息消费

放弃不难,但坚持很酷~由于消费者模块的知识涉及太多,所以决定先按模块来整理知识,最后再进行知识模块汇总。

85930
来自专栏跟Qt君学编程

Qt加载库

10720
来自专栏呆呆熊的技术路

mysql 关于时间类型的刨坑之路

前两天有做一个基于binglog的数据库实时同步,一张老数据表里有DATETIME、TIMESTAMP不同的时间字段类型,看起来值都是一样的,并且默认值都设置的...

19330
来自专栏呆呆熊的技术路

关于php strotime("-1 month")的思考

额。。。这都是些什么鬼,如果当前月比上一个月多,在多余的日子里去取上个月同期,会有问题。

12620
来自专栏Java架构沉思录

Nginx 架构初探

高度模块化的设计是 Nginx 的架构基础。Nginx 服务器被分解为多个模块,每个模块就是一个功能模块,只负责自身的功能,模块之间严格遵循“高内聚,低耦合”的...

11420
来自专栏物流IT圈

物联网知识科普(2)——物联网十大开源操作系统

物联网作为新时代的宠儿,有其独到之处,操作系统是物联网的灵魂,开源操作系统更是集结了各物联网大亨的理论精髓,物联网、开源、操作系统这三个词汇构成了物联网开源操作...

22920
来自专栏一个会写诗的程序员的博客

并行执行任务的ForkJoin框架简介

从JDK1.7开始,Java提供Fork/Join框架用于并行执行任务,它的思想就是讲一个大任务分割成若干小任务,最终汇总每个小任务的结果得到这个大任务的结果。

10720

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励