• rsync+inotify实现自动备份


    1、rsync命令

    文件在不同服务器之间备份,有两种方式,一种是推,另一种是拉

    推:即由主服务器推送数据到次服务器

    拉:即由次服务器向主服务器要数据

    一般采用拉的方式

    但是这样同时多服务器备份就会分享主服务器带宽,如果要达到理想的带宽的方法包括:分时备份,分段备份等,其实还有一种方法就是bt种子的方法

    现在我们来说一下rsync命令

    命令参数及格式:

    rsync有六种不同的工作模式:

      1. 拷贝本地文件;当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。
      2.使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。
      3.使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。
      4. 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。
      5. 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。
      6. 列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。
      -a 以archive模式操作、复制目录、符号连接 相当于-rlptgoD

      rsync中的参数

      -r 是递归 
      -l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件;
      -z 传输时压缩;
      -P 传输进度;
      -v 传输时的进度等信息,和-P有点关系,自己试试。可以看文档;
      -e ssh的参数建立起加密的连接。
      -u只进行更新,防止本地新文件被重写,注意两者机器的时钟的同时
      --progress是指显示出详细的进度情况
      --delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致
      --password-file=/password/path/file来指定密码文件,这样就可以在脚本中使用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有属主可读。

    rsncy -azP -delete /var/www/html/  root@192.168.1.1:/webk

    扩展:

    快速查找历史命令:

    ctrl+r-》输入历史命令关键字-》按下右键

    2、inotify命令

    inotifywait -r /

    3、公钥私钥生成命令

    服务器A: 192.168.1.1

    服务器B: 192.168.1.2

    服务器A:

    配置:

    ssh-keygen -b 2048 -t rsa                    

    #这里的-b 2048 是密钥加密的长度,最好设大点,有消息称美国有黑客解决 ssh的密钥进行破解。
    #http://bbs.yuloo.com/thread-860154-1-1.html

    直接回车3次

    key文件会保存在/root/.ssh目录下

    这时候.ssh目下会多出几个文件

    id_rsa   私钥文件

    id_rsa.pub  公钥文件,这个文件里的内容要放到其它主机里面去。

    查看 id_rsa.pub  文件

    cat /roor/.ssh/id_rsa.pub

    ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIcAvh6Lz9ghftghtfghSv+kSrxVLC9UDKq27mg5vhfghAaWcgFgllZhfg2DLnGotmeL/08bp6jMW/ekSq1BY1eiouiluiliuliul2Rr84x0bB5YShhpgJwuPbwr/pymgukyukyukyuthjkiytiliunzdfkuykyuIZgVvgPTzNdN/RDwJMsafsdvgsdsfsdfdsfsdaflozStYcWjrwzYxsroDPBy4zjd0gH5zMYhj+vS4OOAZZ8rtHEfx+sTE0= root@localhost.localdomain

    服务器B:

    配置:

    新建文件夹与文件

    mkdir /root/.ssh

    vim /root/.ssh/authorized_keys

    把A服务器上查看的KEY文件内容,复制到B服务器的authorized_keys中

    主要是将root@localhost.localdomain修改为root@192.168.1.1 这样方便查看是哪台服务器的KEY,可能会有多台服务器的key。

    修改sshd 的主配置文件,关闭密码认证登陆,使用key登陆。

    vim /etc/ssh/sshd_config

    找到 PasswordAuthentication yes 

    改成 PasswordAuthentication no

    service sshd restart

    测试:

    在A服务器上执行

    ssh root@192.168.1.2 

    首次登陆会需要你输入YES。看是不是不需要密码就可以登陆B服务了

    此项功能主要是将server端的目录/tmp里的内容,如果修改了(无论是添加、修改、删除文件)能够通过inotify监控到,并通过rsync实时的同步给client的/tmp里,下面是通过shell脚本实现的。
    1. #!/bin/bash  
    2. host=192.168.10.221  
    3. src=/tmp/         
    4. des=web 
    5. user=webuser 
    6. /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src   
    7. | while read files  
    8. do  
    9. /usr/bin/rsync -vzrtopg --delete --progress --password-file=/usr/local/rsync/rsync.passwd $src $user@$host::$des  
    10. echo "${files} was rsynced" >>/tmp/rsync.log 2>&1  
    11. done  
    12. 我们还可以把rsync.sh脚本加入到开机启动项里
      1. [root@nginx tmp]# echo "/tmp/rsync.sh" >> /etc/rc.local 
  • 相关阅读:
    pixi.js 简单交互事件(点击、缩放、平移)
    w3school
    并发(Concurrent)与并行(Parallel)的区别
    CTime获得当前电脑时间
    NX二次开发-UFUN获得体的表面积,体积,重心等UF_MODL_ask_mass_props_3d
    Jvm故障问题排查以及Jvm调优总结
    jmap命令详解----查看JVM内存使用详情
    jstack命令解析
    年轻带Young GC算法示意图
    【JVM】jstat命令详解---JVM的统计监测工具
  • 原文地址:https://www.cnblogs.com/qing208/p/6145142.html
Copyright © 2020-2023  润新知