rsync备份服务(上)

第1章 Rsync备份服务开篇介绍

1.1 Rsync介绍

1.1.1 什么是rsync服务

Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。而且能够不进行改变原有数据的属性信息,实现数据的备份迁移特性。Rsync软件适用于Unix/Linux/window等多种操做系统平台。html

  rsync服务软件官方连接:http://www.samba.org/ftp/rsync/rsync.htmllinux

 

  man rsync 算法

  NAME   rsync a fast, versatile, remote (and local) file-copying toolshell

 

提示信息:vim

man  rsync  查看客户端安全

man  rsyncd.conf 查看服务端配置bash

1.2 什么是全量,什么是增量

   全量复制:本地全部数据都进行传输复制,无论对端服务器是否有相同的数据,若是有进行覆盖服务器

   增量复制:只备份同步变化的数据信息,对端服务器已经存在的数据,不进行传输复制ssh

1.3 Rsync命令使用介绍

1.3.1 rsync软件 == scp命令

  准备测试环境socket

[root@backup ~]# mkdir /wuhuang

[root@backup ~]# touch /wuhuang/wuhuang-file{1..5}

[root@backup ~]# ls /wuhuang/

wuhuang-file1  wuhuang-file2  wuhuang-file3  wuhuang-file4  wuhuang-file5

 scp命令使用

    -r   表示递归传输数据

   -p   表示数据属性信息不变

远程传输文件:

[root@backup ~]# scp -rp /wuhuang/wuhuang-file1 10.0.0.31:/tmp

root@10.0.0.31's password:

wuhuang-file1                                  100%    0     0.0KB/s   00:00    

验证

[root@nfs01 ~]# ll /tmp/

total 0

-rw-r--r--  1 root root 0 Jan 22 17:43 wuhuang-file1

远程传输目录:

[root@backup ~]# scp -rp /wuhuang/ 10.0.0.31:/tmp

root@10.0.0.31's password:

wuhuang-file5                                  100%    0     0.0KB/s   00:00    

wuhuang-file3                                  100%    0     0.0KB/s   00:00    

wuhuang-file4                                  100%    0     0.0KB/s   00:00    

wuhuang-file2                                  100%    0     0.0KB/s   00:00    

wuhuang-file1                                  100%    0     0.0KB/s   00:00    

验证

[root@nfs01 ~]# ll /tmp/

total 4

drwxr-xr-x  2 root root 4096 Jan 22 17:43 wuhuang

-rw-r--r--  1 root root    0 Jan 22 17:43 wuhuang-file1

rsync命令使用:

    -r   表示递归传输数据

   -p   表示数据属性信息不变

远程传输文件:

[root@backup ~]# rsync -rp /wuhuang/wuhuang-file2 10.0.0.31:/tmp

The authenticity of host '10.0.0.31 (10.0.0.31)' can't be established.

RSA key fingerprint is 57:3f:64:68:95:4d:99:54:01:33:ab:47:a0:72:da:bf.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '10.0.0.31' (RSA) to the list of known hosts.

root@10.0.0.31's password:

验证

[root@nfs01 ~]# ll /tmp/

total 0

-rw-r--r--  1 root root 0 Jan 22 18:01 wuhuang-file2

远程传输目录:

[root@backup ~]# rsync -rp /wuhuang/ 10.0.0.31:/tmp

root@10.0.0.31's password:

[root@nfs01 ~]# ll /tmp/

total 0

-rw-r--r--  1 root root 0 Jan 22 18:09 wuhuang-file1

-rw-r--r--  1 root root 0 Jan 22 18:09 wuhuang-file2

-rw-r--r--  1 root root 0 Jan 22 18:09 wuhuang-file3

-rw-r--r--  1 root root 0 Jan 22 18:09 wuhuang-file4

-rw-r--r--  1 root root 0 Jan 22 18:09 wuhuang-file5

说明:若是传输目录时,目录名称后面有/(/wuhuang/), 表示将目录下面的数据内容进行传输

[root@backup ~]# rsync -rp /wuhuang 10.0.0.31:/tmp

root@10.0.0.31's password:

[root@nfs01 ~]# ll /tmp/

total 4

drwxr-xr-x  2 root root 4096 Jan 22 18:10 wuhuang

-rw-r--r--  1 root root    0 Jan 22 18:09 wuhuang-file1

-rw-r--r--  1 root root    0 Jan 22 18:09 wuhuang-file2

-rw-r--r--  1 root root    0 Jan 22 18:09 wuhuang-file3

-rw-r--r--  1 root root    0 Jan 22 18:09 wuhuang-file4

-rw-r--r--  1 root root    0 Jan 22 18:09 wuhuang-file5

说明:若是传输目录时,目录名称后面没有/(/wuhuang),表示将目录自己以及目录下面的内容进行传输

1.3.2 rsync软件 == cp命令

cp命令本地复制数据

[root@backup ~]# cp -a /wuhuang/wuhuang-file1 /tmp

[root@backup ~]# ll /tmp/

total 0

-rw-r--r--  1 root root 0 Jan 22 17:59 wuhuang-file1

rsync命令本地复制数据

[root@backup ~]# rsync -a /wuhuang/wuhuang-file2 /tmp/

[root@backup ~]# ll /tmp/

total 0

-rw-r--r--  1 root root 0 Jan 22 17:59 wuhuang-file1

-rw-r--r--  1 root root 0 Jan 22 17:59 wuhuang-file2

1.3.3 rsync软件 == rm命令

[root@backup ~]# ll /tmp/

total 0

-rw-r--r--  1 root root 0 Jan 22 17:59 wuhuang-file1

-rw-r--r--  1 root root 0 Jan 22 17:59 wuhuang-file2

[root@backup ~]# mkdir /null

[root@backup ~]# rsync -r --delete /null/ /tmp/

[root@backup ~]# ll /tmp/

total 0

rsync利用一个空目录将目录清空

[root@backup ~]# rsync -r --delete /null/ 10.0.0.31:/tmp/

root@10.0.0.31's password:

[root@nfs01 ~]# ll /tmp/

total 0

1.3.4 rsync软件 == ls命令

[root@backup ~]# ls /wuhuang/

wuhuang-file1  wuhuang-file2  wuhuang-file3  wuhuang-file4  wuhuang-file5

[root@backup ~]# rsync /wuhuang/

drwxr-xr-x        4096 2018/01/22 17:59:26 .

-rw-r--r--           0 2018/01/22 17:59:26 wuhuang-file1

-rw-r--r--           0 2018/01/22 17:59:26 wuhuang-file2

-rw-r--r--           0 2018/01/22 17:59:26 wuhuang-file3

-rw-r--r--           0 2018/01/22 17:59:26 wuhuang-file4

-rw-r--r--           0 2018/01/22 17:59:26 wuhuang-file5

1.4 Rsync复制原理介绍

 Rsync软件实现增量同步原理说明

 Rsync经过其独特的“quick check”算法,它仅同步大小或者最后修改时间发生变化的文件或目录,

 固然也可根据权限,属主等属性的变化同步,但须要指定相应的参数,甚至能够实现只同步一个文件里有变化的内容部分,因此,能够实现快速的同步备份数据。

image.png 


 传统的cp , scp 工具拷贝每次均为完整的拷贝,而Rsync除了能够完整拷贝外,还具备增量拷贝的功能,

所以,从同步数据的性能及效率上,Rsync工具更胜一筹。

  CentOS5rsync2.x比对方法,把全部的文件比对一遍,而后进行同步。

  CentOS6rysnc3.x比对方法,一边比对差别,一边对差别的部分进行同步。

1.5  Rsync软件特性(7个特性)

1. 支持拷贝普通文件与特殊文件如连接文件,设备等。

2. 能够有排除指定文件或目录同步的功能,至关于打包命令tar的排除功能。

  #tar zcvf backup_1.tar.gz  /opt/data  -exclude=oldboy    

  说明:在打包/opt/data时就排除了oldboy命名的目录和文件。

3. 能够作到保持原文件或目录的权限、时间、软硬连接、属主、组等全部属性均不改变-p

4. 可实现增量同步,只同步发生变化的数据,所以数据传输效率很高(tar -N)。

tar  -N <日期格式或 --newer=<日期时间>:只将比指定日期更新的文件保存到备份文件里

1.    # 将备份/home 目录自 2008-01-29 以来修改过的文件

        # tar -N 2008-01-29 -zcvf /backups/inc-backup_$(date +%F).tar.gz /home

2.    # 将备份 /home 目录昨天以来修改过的文件

        # tar -N $(date -d yesterday "+%F") -zcvf /backups/inc-backup_$(date +%F).tar.gz /home

        # tar -N $(date -d  -1day "+%F") -zcvf /backups/inc-backup_$(date +%F).tar.gz /home

3.    # 添加文件到已经打包的文件

        # tar -rf all.tar *.gif

   说明:这条命令是将全部.gif的文件增长到all.tar的包里面去。-r是表示增长文件的意思。

5. 可使用rcp,rsh,ssh等方式来配合进行隧道加密传输文件(rsync自己不对数据加密)

6. 能够经过socket(守护进程方式)传输文件和数据(服务端和客户端)*****。重点掌握

7. 支持匿名的或认证(无需系统用户)的进程模式传输,可实现方便安全的进行数据备份及镜像。

1.6 Rsync的企业工做场景说明

1) 利用定时任务实现数据备份(crond+rsync)

2) 利用实时同步方式实现数据备份(inotify/sersync+rsync)

第2章  Rsync的工做方式介绍与实践

       SYNOPSIS

2.1  Local:  rsync [OPTION...] SRC... [DEST]

   本地数据备份方式,相似cp命令

   rsync          ---数据备份命令

   [OPTION...]    ---指定备份数据命令参数

   SRC           ---本地要备份的数据信息

   [DEST]        ---将要备份的数据保存到什么位置

拷贝本地文件。当SRCDEST路径信息都不包含有单个冒号":"分隔符时就启动这种工做模式。如:rsync -a /data /backup

[root@backup ~]# rsync -a /etc/hosts /wuhuang/

[root@backup ~]# ll /wuhuang/

total 4

-rw-r--r-- 1 root root 372 Jan 19 11:55 hosts

 2.2  Access via remote shell:

       Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]

       Push: rsync [OPTION...] SRC... [USER@]HOST:DEST

   实现远程备份方式,相似scp命令

   Pull

   rsync             ---数据备份命令

   [OPTION...]       ---指定备份数据命令参数

   [USER@]HOST:  ---定义以什么身份从相应主机上,拉取数据信息

                    (若是没有[USER@],表示以当前用户身份登陆到远程主机,拉取数据)

   SRC...            ---将要从远端服务拉取的数据信息(文件或目录)

   [DEST]           ---将拉取过来的数据,保存到本地路径信息

使用一个远程shell程序(rshssh)来实现将本地机器的内容拷贝到远程机器。当DEST路径地址包含单个冒号":"分隔符时启动该模式。如:rsync -avz *.c foo:src

 

backup服务器上的数据传输到NFS01上

[root@backup ~]# rsync -avz /wuhuang/wuhuang-file1 10.0.0.31:/opt

root@10.0.0.31's password:

sending incremental file list

wuhuang-file1

 

sent 74 bytes  received 31 bytes  23.33 bytes/sec

total size is 0  speedup is 0.00

[root@nfs01 ~]# ls /opt/

rh  wuhuang-file1

 Push

   rsync             ---数据备份命令

   [OPTION...]       ---指定备份数据命令参数

   SRC...            ---将本地服务器上数据信息(文件或目录),推送到远端

   [USER@]HOST:   ---定义以什么身份向相应主机上,推送数据信息

                    (若是没有[USER@],表示以当前用户身份登陆到远程主机,推送数据)

   DEST            ---将本地数据推送到远程服务器的路径信息

使用一个远程shell程序(rshssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。如:rsync -avz foo:src/bar /data

[root@nfs01 ~]# touch /tmp/wh.txt

[root@nfs01 ~]# ll /tmp/

total 0

-rw-r--r-- 1 root root 0 Jan 22 20:24 wh.txt

[root@backup ~]# rsync -avz 10.0.0.31:/tmp/ /wuhuang/

root@10.0.0.31's password:

receiving incremental file list

./

wh.txt

 

sent 33 bytes  received 85 bytes  21.45 bytes/sec

total size is 0  speedup is 0.00

[root@backup ~]# ll /wuhuang/

total 4

-rw-r--r-- 1 root root 372 Jan 19 11:55 hosts

-rw-r--r-- 1 root root   0 Jan 22 20:24 wh.txt

-rw-r--r-- 1 root root   0 Jan 22 20:18 wuhuang-file1

-rw-r--r-- 1 root root   0 Jan 22 20:18 wuhuang-file2

-rw-r--r-- 1 root root   0 Jan 22 20:18 wuhuang-file3

-rw-r--r-- 1 root root   0 Jan 22 20:18 wuhuang-file4

-rw-r--r-- 1 root root   0 Jan 22 20:18 wuhuang-file5

  

image.png 

2.3  Access via rsync daemon:  重点

         Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]

               rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]

         Push: rsync [OPTION...] SRC... [USER@]HOST::DEST

               rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

   实现守护进程方式,进行数据备份同步:

   Pull

   rsync                    ---数据备份命令

   [OPTION...]           ---指定备份数据命令参数

   [USER@]HOST::    ---指定认证用户身份信息,从相应主机,拉取数据信息

   SRC...                    ---指定一个模块信息

   [DEST]                  ---将拉取过来的数据,保存到本地路径信息

从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。如:rsync -av root@192.168.78.192::www /databack

www 为一个模块

   Push

   rsync                      ---数据备份命令

   [OPTION...]            ---指定备份数据命令参数

   SRC...                     ---将本地服务器上数据信息(文件或目录),推送到远端

   [USER@]HOST::     ---指定认证用户身份信息,将本地主机数据,推送到远端

   DEST                      ---指定一个模块信息

 从本地机器拷贝文件到远程rsync服务器中。当DEST路径信息包含"::"分隔符时启动该模式。如:rsync -av /databack root@192.168.78.192::www

www 为一个模块

第3章 rsync守护进程模式部署步骤

3.1 服务端部署

3.1.1 第一个里程:检查软件是否存在

[root@backup ~]# rpm -qa|grep rsync

rsync-3.0.6-12.el6.x86_64

若是rsync软件不存在 yum install -y rsync

3.1.2  第二个里程:编写rsync软件的配置文件

vim /etc/rsyncd.conf       ---rsyncd.confrsync服务的默认配置文件,默认并不存在

image.png 

#rsync_config

#created by HQ at 2017

##rsyncd.conf start##

    

uid = rsync

gid = rsync

use chroot = no

max connections = 200

timeout = 300

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log

ignore errors

read only = false

list = false

hosts allow = 172.16.1.0/24

hosts deny = 0.0.0.0/32

auth users = rsync_backup

secrets file = /etc/rsync.password

[backup]

comment = "backup dir by oldboy"

path = /backup

参考资料:http://man.linuxde.net/rsync

3.1.3 第三个里程碑:建立备份目录管理用户

[root@backup ~]# vim /etc/rsyncd.conf

[root@backup ~]# useradd -s /sbin/nologin -M rsync

[root@backup ~]# id rsync

uid=501(rsync) gid=501(rsync) groups=501(rsync)

3.1.4 第四个里程碑:建立认证用户密码文件

建立密码文件,采用这种方式不能使用系统用户对客户端进行认证,因此须要建立一个密码文件,其格式为username:password”,用户名能够和密码能够随便定义,最好不要和系统账户一致,同时要把建立的密码文件权限设置为600保证安全,密码不泄露。

[root@backup ~]# echo "rsync_backup:wuhuang123" >/etc/rsync.password

[root@backup ~]# chmod 600 /etc/rsync.password

[root@backup ~]# ll /etc/rsync.password

-rw------- 1 root root 23 Jan 22 20:51 /etc/rsync.password

3.1.5 第五个里程碑:建立备份目录,并进行受权

在备份或恢复时,服务端要容许客户端有写入权限,不然也不能在客户端直接对服务端进行恢复

[root@backup ~]# mkdir /backup

[root@backup ~]# chown -R rsync.rsync /backup/

[root@backup ~]# ll /backup/ -d

drwxr-xr-x 2 rsync rsync 4096 Jan 22 20:56 /backup/

3.1.6 第六个里程碑:启动rsync守护进程服务

[root@backup ~]# rsync --daemon

[root@backup ~]# ps -ef|grep rsync

root       1870      1  0 20:59 ?        00:00:00 rsync --daemon

root       1879   1228  0 21:00 pts/0    00:00:00 grep rsync

[root@backup ~]#  netstat -lntup|grep rsync

tcp        0      0 0.0.0.0:873            0.0.0.0:*               LISTEN      1870/rsync          

tcp        0      0 :::873                 :::*                     LISTEN      1870/rsync

3.2 客户端部署

3.2.1 进行测试传输备份数据

[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup

Password:

sending incremental file list

hosts

 

sent 201 bytes  received 27 bytes  24.00 bytes/sec

total size is 372  speedup is 1.63

[root@backup ~]# ll /backup/

total 4

-rw-r--r-- 1 rsync rsync 372 Jan 19 11:55 hosts

3.3  rsync守护进程模式数据传输原理

image.png 

第4章 杀进程的三种方式

4.1 kill

kill命令用来删除执行中的程序或工做。kill可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。若仍没法终止该程序,可以使用SIGKILL(9)信息尝试强制删除程序。程序或工做的编号可利用ps指令或job指令查看。

   kill杀手:针对进程号,杀死进程,而且会提示进程已杀死

   kill 进程号

4.1.1 语法

kill(选项)(参数)

4.1.2 选项

-a:当处理当前进程时,不限制命令名和进程号的对应关系;

-l <信息编号>:若不加<信息编号>选项,则-l参数会列出所有的信息名称;

-p:指定kill 命令只打印相关进程的进程号,而不发送任何信号;

-s <信息名称或编号>:指定要送出的信息;

-u:指定用户。

4.1.3 参数

进程或做业识别号:指定要删除的进程或做业。

4.1.4 实例

列出全部信号名称:

[root@backup ~]# kill -l

 1) SIGHUP  2) SIGINT  3) SIGQUIT  4) SIGILL  5) SIGTRAP

 6) SIGABRT  7) SIGBUS  8) SIGFPE  9) SIGKILL 10) SIGUSR1

11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM

16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP

21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ

26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR

31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3

38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8

43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13

48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12

53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7

58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2

63) SIGRTMAX-1 64) SIGRTMAX

只有第9种信号(SIGKILL)才能够无条件终止进程,其余信号进程都有权利忽略,下面是经常使用的信号:

  HUP     1    终端断线

   INT     2    中断(同 Ctrl + C

   QUIT    3    退出(同 Ctrl + \

   TERM   15    终止

   KILL    9    强制终止

   CONT   18    继续(与STOP相反, fg/bg命令)

   STOP   19    暂停(同 Ctrl + Z

 

先用ps查找进程,而后用kill杀掉:

[root@backup ~]# ps -ef | grep vim

root      3268  2884  0 16:21 pts/1    00:00:00 vim install.log

root      3370  2822  0 16:21 pts/0    00:00:00 grep vim

[root@backup ~]# kill 3268

[root@backup ~]# kill 3268

-bash: kill: (3268) - 没有那个进程

4.2 killall

killall命令使用进程的名称来杀死进程,使用此指令能够杀死一组同名进程。咱们可使用kill命令杀死指定进程PID的进程,若是要找到咱们须要杀死的进程,咱们还须要在以前使用ps等命令再配合grep来查找进程,而killall把这两个过程合二为一,是一个很好用的命令。

  killall杀手:针对进程名,杀死进程,而且会提示进程已杀死

  killall sshd

 4.2.1 语法

killall(选项)(参数)

4.2.2 选项

-e:对长名称进行精确匹配;

-l:忽略大小写的不一样;

-p:杀死进程所属的进程组;

-i:交互式杀死进程,杀死进程前须要进行确认;

-l:打印全部已知信号列表;

-q:若是没有进程被杀死。则不输出任何信息;

-r:使用正规表达式匹配要杀死的进程名称;

-s:用指定的进程号代替默认信号“SIGTERM”;

-u:杀死指定用户的进程。

4.2.3 参数

进程名称:指定要杀死的进程名称。

4.2.4 实例

杀死全部同名进程

[root@backup ~]# killall vi

4.3 pkill

 pkill杀手:针对进程名,杀死进程,可是一个模糊的杀手,残暴的杀手(不会有提示信息)

 pkill sshd

[root@backup ~]# ps -ef |grep sh

root        536      2  0 17:57 ?        00:00:00 [flush-8:0]

root       1188      1  0 17:57 ?        00:00:00 /usr/sbin/sshd

root       1229   1188  0 17:58 ?        00:00:00 sshd: root@pts/0

root       1231   1229  0 17:58 pts/0    00:00:00 -bash

root       1734   1188  0 19:54 ?        00:00:00 sshd: root@pts/1

root       1736   1734  0 19:54 pts/1    00:00:00 -bash

root       1908   1231  1 21:28 pts/0    00:00:00 grep sh

[root@backup ~]# pkill sh

此命令同时杀死了以上进程