• rsync详解


    1 rsync是什么

     它实现了 服务器间的 文件数据得复制传输。

    1.1 rsync认证方式

    rsync有两种常用的认证方式,一种是rsync-daemon方式,另外一种是ssh方式。

    在平时使用过程,我们使用最多的是rsync-daemon方式。

    注意:在使用rsync时,服务器和客户端都必须安装rsync程序

    rsync-daemon 认证

    1. rsync在rsync-daemon认证方式下,默认监听TCP的873端口。
    2. 注意:
    3. rsync-daemon认证方式,需要服务器和客户端都安装rsync服务
    4. 并且只需要rsync服务器端启动rsync,同时配置rsync配置文件。
    5. 客户端启动不启动rsync服务,都不影响同步的正常进行。

    ssh认证

    1. rsync在ssh认证方式下,可通过系统用户进行认证,即在rsync上通过ssh隧道进行传输,类似于scp工具。
    2. 此时同步操作不在局限于rsync中定义的同步文件夹。
    3. 注意:
    4. ssh认证方式,不需要服务器和客户端配置rsync配置文件
    5. 只需要双方都安装rsync服务,并且也不需要双方启动rsync。
    6. # 若rsync服务端SSH为标准端口,此时rsync使用方式如下:
    7. rsync -avz /root/test root@192.168.135.10:/root/
    8. # 若rsync服务端SSH为非标准端口,可通过rsync的-e参数进行端口指定。使用方式如下:
    9. rsync -avz /root/test -e 'ssh -p1234' root@192.168.135.10:/root/

    2场景

    电商的详情页,放到其中一台nginx 下,其他nginx 可以靠 rsync 同步html

    3安装

     介绍: 两台nginx : 192.168.135.128 (源服务器), 192.168.135.4 (目标服务器) 。源服务器数据,靠rsync 异步到目标服务器 ,目标服务器也可以上传文件到源服务器中

    具体角色调换看场景

    一定先看完,在搭建

       源服务器目标服务器都要安装 rsync

    yum install -y rsync

      源服务器  修改配置 /etc/rsyncd.conf

    vim rsyncd.conf

     源服务器  rsyncd.conf

    1. #默认端口873
    2. port = 873
    3. uid=root
    4. gid=root
    5. max connections=36000
    6. use chroot=no
    7. log file=/var/log/rsyncd.log
    8. # 定义虚拟用户,作为连接认证用户
    9. auth users = myuser
    10. # 定义rsync服务用户连接认证密码文件路径 写法 用户:密码
    11. secrets file = /etc/rsync.pwd
    12. # 允许哪些ip连接
    13. hosts allow = 192.168.135.4,192.168.135.5
    14. #这里是认证的模块名,在client端需要指定
    15. # 默认是只读
    16. read only = no
    17. [ftp]
    18. #源服务器需要配置 监控的目录
    19. path = /usr/local/nginx/html

    源服务器 创建密码文件  键值对 键是 auth users

     echo "myuser:123" >> /etc/rsync.pwd

    源服务器  必须 修改权限 否则目标服务器输入密码报错

    chmod 600 /etc/rsync.pwd

    源服务器 启动 rsync服务

    rsync --daemon

    限制带宽

     源服务器 #设置开机启动

    echo "/usr/local/bin/rsync --daemon -config=/etc/rsyncd.conf" >>/etc/profile

    开放端口  默认端口873

    1. firewall-cmd --permanent --add-port=873/tcp
    2. firewall-cmd --reload

     目标服务器安装rsync服务      

    yum install -y rsync

     三种 查看源服务器有啥文件目录

    1. #第一种是源服务器 无账号密码方式
    2. rsync --list-only 192.168.135.128::ftp/
    3. rsync --list-only myuser@192.168.135.128::ftp/
    4. rsync --list-only --password-file=/etc/rsync.pwd.clinet myuser@192.168.135.128::ftp/

      创建目标服务器的密码文件

     echo "123" >> /etc/rsync.pwd.clinet
    chmod 600 /etc/rsync.pwd.clinet

    拉取源服务器文件 到本服务器的 /usr/local/nginx/html/下

    1. 源服务器 只会新增同步,删除不会同步
    2. rsync -avz --password-file=/etc/rsync.pwd.clinet myuser@192.168.135.128::ftp/ /usr/local/nginx/html/
    3. 源服务器 新增,删除都会同步
    4. rsync -avz --delete --password-file=/etc/rsync.pwd.clinet myuser@192.168.135.128::ftp/ /usr/local/nginx/html/

     --exclude : 一些临时文件可以不同步

     将本地路径文(/usr/local/nginx/html/)件上传到源服务器文件

    rsync -avz --password-file=/etc/rsync.pwd.clinet /usr/local/nginx/html/ myuser@192.168.135.128::ftp/

    更多选项

     1)-a:归档模式,表示递归传输并保持文件属性。

    (2)-v:显示同步过程中详细信息(文件列表)。可以使用"-vvvv"获取更详细信息。

     3)-z:传输时进行压缩提高效率。

    (4)-n:模拟执行,不会真正执行。

    (5)--delete:删除只存在于目标目录、不存在于源目录的文件(服务端计算文件数据块校验码之前先执行此动作,--exclude 指定的文件会被标记为保护文件,不会被删除,但可通过 --delete-exclude 取消保护,强制删除)。

    (6)--exclude:排除某些文件或目录,不参与操作。

    (7)--include:指定必须参与操作的文件或目录,--include必须在--exclude之前。

    (8)--link-dest:基准目录,指定基准目录以后,rsync 会将源目录与基准目录之间变动的部分同步到目标目录。那些没变动的文件则会生成硬链接,硬链接指向上一次备份的对应文件,这与全量备份类似,但其数据量小很多(使用 rsync 实现全量备份的大致做法:使用备份时间命名区分多次备份的多个目标目录,每次备份之前,先将基准目录设置为上一次备份的目标目录,恢复时直接找到对应时间点的目录,里面的文件即是当时全部的文件数据)。

    (9)--bwlimit:限速传输,单位 MB/s。

    目标服务器实时同步数据到 源服务器上

    目标服务器配置实时同步,使用的软件为开源的sersync

    wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gz

     目标服务器解压软件包   

      tar zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz

    目标服务器 创建目录结构
           

              mkdir /usr/local/sersync

    目标服务器   移动文件

    1. mv GNU-Linux-x86/sersync2 /usr/local/sersync/
    2. mv GNU-Linux-x86/confxml.xml /usr/local/sersync/

    目标服务器  配置环境变量

    1. # echo "PATH=$PATH:/usr/local/sersync" > /etc/profile.d/sersync.sh
    2. echo 'PATH=/usr/local/sersync:$PATH' > /etc/profile.d/sersync.sh
    3. source /etc/profile.d/sersync.sh

    目标服务器 vim confxml.xml (目标服务器)

    1. <?xml version="1.0" encoding="ISO-8859-1"?>
    2. <head version="2.5">
    3. <host hostip="localhost" port="8008"></host> # 设置本地IP和端口
    4. <debug start="false"/> # 是否开启调试模式
    5. <fileSystem xfs="false"/> # 监控的是否是xfs文件系统
    6. <filter start="false"> # 是否启用监控的筛选功能,筛选的文件将不被监控,默认关闭
    7. <exclude expression="(.*)\.svn"></exclude>
    8. <exclude expression="(.*)\.gz"></exclude>
    9. <exclude expression="^info/*"></exclude>
    10. <exclude expression="^static/*"></exclude>
    11. </filter>
    12. <inotify> # 设置监控的事件,默认监控的是delete/close_write/moved_from/moved_to/create folder
    13. <delete start="true"/>
    14. <createFolder start="true"/>
    15. <createFile start="false"/>
    16. <closeWrite start="true"/>
    17. <moveFrom start="true"/>
    18. <moveTo start="true"/>
    19. <attrib start="true"/> #修改此行为true,文件属性变化后也会同步
    20. <modify start="false"/>
    21. </inotify>
    22. <sersync> # rsync命令的配置段
    23. <localpath watch="/usr/local/nginx/html/"> #修改此行,需要同步的源服务器 目录或文件,建议同步目录
    24. <remote ip="192.168.135.128" name="ftp"/> # 源服务器 目标地址和rsync daemon的模块名
    25. <!--<remote ip="192.168.8.39" name="tongbu"/>--> #支持多服务器
    26. <!--<remote ip="192.168.8.40" name="tongbu"/>-->
    27. </localpath>
    28. <rsync>
    29. <commonParams params="-artuz"/>
    30. #修改此行为true,指定备份服务器的rsync配置的用户和密码文件
    31. <auth start="true" users="myuser" passwordfile="/etc/rsync.pwd.clinet"/>
    32. <userDefinedPort start="false" port="874"/>#默认源服务器是873
    33. <timeout start="false" time="100"/><!-- timeout=100 --> # 设置超时时间
    34. <ssh start="false"/>
    35. </rsync>
    36. </sersync>
    37. </head>

    目标服务器  后台启动方式

    1. 参数-d:启用守护进程模式
    2. 参数-r:在监控前,将监控目录与远程主机用rsync命令推送一遍
    3. c参数-n: 指定开启守护线程的数量,默认为10
    4. 参数-o:指定配置文件,默认使用当前工作目录下的confxml.xml文件
    5. 参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块
    6. 参数-m:单独启用其他模块,使用 -m socket 开启socket模块
    7. 参数-m:单独启用其他模块,使用 -m http 开启http模块
    8. 不加-m参数,则默认执行同步程序

    目标服务器 设置参数

    1. vim /etc/rc.local
    2. 添加这俩参数
    3. echo 50000000 > /proc/sys/fs/inotify/max_user_watches
    4. echo 327679 > /proc/sys/fs/inotify/max_queued_events
    ./sersync2 -dro /usr/local/sersync/confxml.xml

    目标服务器 如果同步失败,可以手动执行下面命令,观察过程

    cd /usr/local/nginx/html && rsync -artuz -R --delete ./  --port=874 myuser@192.168.135.128::ftp --password-file=/etc/rsync.pwd.clinet

    注意:命令创建文件 可以实时同步,xftp软件直接创建文件不可以同步

    java程序上传也是可以实时同步,本人测试过了。

    4  inotify 监控 (没写完呢)

       1:在目标服务器可以 用定时器执行脚本,定时的拉取。

         缺点:1 会增加服务器性能的消耗。间隔时间短,性能消耗大,间隔时间长,数据不及时。

       2:源服务器实时推数据。有数据就会推送             

    源服务器 实时推送

    yum install -y automake

    下载

    https://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

    解压

    tar -zxvf inotify-tools-3.14.tar.gz
    cd inotify-tools-3.14
    ./configure --prefix=/usr/local/inotity
    

    make && make install

    它的方式是 监控源服务器上的文件是否改动,新增,推送到目标服务器上  去

    推的命令是

    rsync -avz --delete --password-file=/etc/rsync.pwd.clinet /usr/local/nginx/html/ myuser@192.168.135.128::ftp/ 

  • 相关阅读:
    Linux 进程切换与命令行参数
    C++ Reference: Standard C++ Library reference: C Library: cwchar: vfwscanf
    15. jwt认证中间件
    Vue页面模板和render函数和生命周期
    Java 对象是什么样子的?
    如何正确规划 JVM 性能调优
    什么是JVM常用调优策略?分别有哪些?
    Baklib|如何才能做好企业内部知识管理?
    APS智能排产在造纸行业的应用
    Java线程池和Spring异步处理高级篇
  • 原文地址:https://blog.csdn.net/weixin_44383484/article/details/127512081