• Rsync学习笔记1


    企业架构Web服务器的文件及时同步:

    1)能够理解为何要服务器的文件同步;

    2)能够简单描述实现文件同步的几种方式;

    3)能够实现服务器文件实时同步的案例;

    服务器同步文件的必要性:

    当业务代码发生改变,上传到web服务器的时候,因为架构已经不是单台服务器提供服务,而是由多台Web服务器提供服务,业务代码需要同时上传到多台Web服务器,在操作上带来了很多不便。

    故需要解决以上问题,就需要Web服务器中的业务代码能够及时同步,保证业务代码的一致性。

    线上

    对外提供服务的 10台 提供给用户对外服务 存储(分布式存储 解决服务器单例硬盘资源不够的情况)

    线下:能够让线上更稳定提供服务的。

    代码发布(CI CD git、jenkins、gitlab)版本管理;

    灰度发布

    监控(主机、服务 zabbix)zabbix-proxy;哪个机器出问题,能被监控,有告警;

    日志收集分析ELK elasticsearch(elasticsearch-head) logstash kibana kafka消息队列)日志信息能看到;

    存储:ceph 目的是是为了存储数据和文件;分布式存储,解决服务器单列硬盘资源不够的情况。

    几百T的硬盘。多个服务器同时去存储。有个存储软件来管理。

    NFS、Samba。

    同步文件的几种方式:

    1)SCP  secure copy的缩写,安全的复制,scp是Linux系统下基于SSH登录进行安全的远程文件拷贝命令,全量同步。

    ssh包含哪几个组件:ssh scp sftp

    问题:全部复制过去,比较慢、效率低一些,scp不能远程删除,目标服务器垃圾越来越多。

    2)rsync:

    rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法==只传送两个文件的不同部分==,而不是每次都整份传送,因此速度相当快 ==增量同步==

    问题:当文件变动,不能实时同步。就是说文件变动的时候,我们需要定时执行下rsync命令。

    每天同步一次,每天只能发布一个版本。

    3)rsync+sersync:

    inotify-tools和sersync属于同类:

    sersync是基于inotify+sync时大量文件的多服务器自动同步工具。

    使用==Linux 2.6 内核的 inotify 监控 Linux 文件系统事件==,被监听目录下如果有文件发生修改,sersync 将通过内核自动捕获到事件,并将该文件利用 rsync 同步到多台远程服务器。sersync 仅仅同步发生增、删、改事件的单个文件或目录,不像rsync镜像同步那样需要比对双方服务器整个目录下数千万的文件对比,并且支持多线程同步,因此效率非常高

    sersync主要用于服务器同步,web镜像等功能。基于boost1.43.0,inotify api,rsync command.开发

    特点:

    1、sersync是使用c++编写,而且对linux系统文件系统产生的临时文件和重复的文件操作进行过滤(详细见附录,这个过滤脚本程序没有实现),所以在结合rsync同步的时候,节省了运行时耗和网络资源。因此更快。

    相比较上面两个项目,sersync配置起来很简单,其中bin目录下已经有基本上静态编译的

    2、二进制文件,配合bin目录下的xml配置文件直接使用即可。

    另外本项目相比较其他脚本开源项目,使用多线程进行同步,尤其在同步较大文件时,能够保证多个服务器实时保持同步状态。

    3、本项目有出错处理机制,通过失败队列对出错的文件重新同步,如果仍旧失败,则按设定时长对同步失败的文件重新同步。

    4、本项目自带crontab功能,只需在xml配置文件中开启,即可按您的要求,隔一段时间整体同步一次。无需再额外配置crontab功能。

    5、本项目socket与http插件扩展,满足您二次开发的需要。

    同步文件案例:

    源服务器 server01    原文件所在服务器   192.168.17.107

    目标服务器  server03  需要复制到的服务器  192.168.17.109

    1、scp:

    语法:scp本地文件路径   用户名@远程IP:远程存储路径

    由于需要远程登录,故需要输入密码不是很方便,添加机器的公钥到允许列表中。

    在scp命令中要特别注意下-r的选项。遍历文件夹。

    每次的同步的时候还要输入密码。

    那我们要做一个免密登录。

    1)源服务器生成公钥。

    1. [root@server01 public]# ssh-keygen
    2. Generating public/private rsa key pair.
    3. Enter file in which to save the key (/root/.ssh/id_rsa):
    4. Enter passphrase (empty for no passphrase):
    5. Enter same passphrase again:
    6. Your identification has been saved in /root/.ssh/id_rsa.
    7. Your public key has been saved in /root/.ssh/id_rsa.pub.
    8. The key fingerprint is:
    9. SHA256:FlzDszlWUrjL1tkXuVxibIQCidQlt48nqOZiz1s/jNQ root@server01
    10. The key's randomart image is:
    11. +---[RSA 2048]----+
    12. | ..oo==o.. |
    13. | ..o+*oo . |
    14. | o .O o .|
    15. | o*o =o.|
    16. | S+o+o=..+|
    17. | o. Eoo .o.|
    18. | o..+ . |
    19. | o+ ...o |
    20. | . o=. .. |
    21. +----[SHA256]-----+
    22. [root@server01 public]#

    2)添加公钥到允许文件(源服务器) 

    1. [root@server01 public]# ssh-copy-id 192.168.17.109
    2. /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
    3. /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
    4. /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
    5. root@192.168.17.109's password:
    6. Number of key(s) added: 1
    7. Now try logging into the machine, with: "ssh '192.168.17.109'"
    8. and check to make sure that only the key(s) you wanted were added.

    3)测试远程登录:

    1. [root@server01 public]# ssh 192.168.17.109
    2. Last login: Thu Sep 21 14:17:19 2023 from 192.168.17.1

    4)测试修改业务代码:

    通过scp推送同步。

    scp的缺点:

    不能够进行增量同步,比较浪费时间

    不能够目标服务器的文件,垃圾文件越来越多。

    可以把以上的代码写入到脚本中,业务代码变化之后,直接执行脚本即可。

    1. [root@server03 tp5shop]# cat /root/filesync/scp.sh
    2. #!/bin/bash
    3. scp -r /usr/local/nginx/html/tp5shop root@192.168.17.109:/usr/local/nginx/html/

  • 相关阅读:
    [PAT练级笔记] 21 Basic Level 1021 个位数统计
    神经网络图怎么分析,画神经网络结构图
    商业化广告--体系学习-- 3 -- 行业蓝图篇 -- 广告主、媒体、第三方检测
    2023年湖北省电子商务示范企业认定,奖励补贴申报条件解析!
    【OpenGL开发】VS2017+nuget配置OpenGL开发环境(C++)
    LeetCode 0241.为运算表达式设计优先级 - DFS
    基于JAVA疫情社区志愿者组织的资源管理平台计算机毕业设计源码+系统+数据库+lw文档+部署
    事务管理需要了解的前置知识
    QT快捷键
    横向知识总结
  • 原文地址:https://blog.csdn.net/chang_chunhua/article/details/133130357