rsync文件实时同步命令_sshcopyid命令详解

rsync文件实时同步命令_sshcopyid命令详解简介  最近有一个比较特殊的需求需要实现,某个服务提供文件上传服务。但是要解决单点问题,所以会程序会部署在多台服务器上。但是也会随之带来一个和共享cookie的问题,那就是文件存储也应该共享的.其实大部分同学想到的,第一个肯定是使用NFS来解决。大家通过NFSmount到同一个目录即可实现.但是为什么我们没有选择这个解决方案呢?那是因为之前不知道是我们使用不当还是NFS自身存在问题,出现了几次事故,NFSServer端卡死,导致整个NFS的client端由于使用硬挂载的方式一

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

简介

  最近有一个比较特殊的需求,某个服务提供文件上传功能。但是由于要解决单点问题,所以会程序会部署在多台服务器上实现高可用。但是也会随之带来一个和共享cookie类似的问题,那就是文件存储也应该是共享的.其实大部分同学想到的,第一个肯定是使用NFS来解决。大家通过NFS mount到同一个目录即可实现. 但是为什么我们没有选择这个解决方案呢? 那是因为之前不知道是我们使用不当还是NFS自身存在问题, 出现了几次事故,NFS Server端卡死,导致整个NFS的client端由于使用【硬挂载】的方式一直卡住,整个服务器的负载因此也一直飙升,直到NFS Server端恢复正常或者管理员主动卸载mount才能将机器负载降下来恢复正常。在没弄明白原因之前,NFS就不太敢用了,只能另想他法.

rsync+inotify实现原理

原理图:
原理图

  我们最后采用了rsync+inotify的方式来解决我们这个需求。最初一开始,我对这个解决方案是排斥的。因为后期如果文件过多,势必带来性能和延迟问题。但是最终均衡和考虑业务量的情况下,还是采用了这种方式能暂时满足我们的需求.

  rsync是一个服务器之间进行文件同步的工具. 具体详情大家可以自行查资料。这里我们可以理解为可以实现文件内容对比的scp工具。如果文件内容没变化则不会发生同步文件的操作, 否则会同步最新内容使得目标服务器的文件内容一致。但是rsync只能做到的只是文件同步,它自身没有能力发现哪些文件内容发生了变化.你执行rsync命令让它同步哪个文件就同步哪个文件,仅此而已。那么我们要做到2台主机之间某个目录或者文件能够达到实时同步效果,需要借助其他工具进行辅助,最好能帮我们监控某个目录下的文件,一旦目录文件发生内容变动(如内容增加、内容减少、删除、修改等等),我们获取通知之后,再执行rsync命令,达到我们实时同步的目的。

  inotify是Linux下的一个工具,inotifywait是其中的一个组件,就能帮我们监控某个目录,一旦文件内容发送变动,我们会获取到一个事件通知,拿到文件的路径。之后我们通过自定义shell脚本,执行rsync命令,实现实时同步的目的。

安装与实现

B服务器(同步数据的目标服务器)

   # A、B服务器都需要安装 
   yum install rsync inotify-tools -y

   # B服务器修改配置, 启动rsyncd后台服务
   # 修改 /etc/rsyncd.conf
    uid = root
	gid = root
	use chroot = no
	max connections = 20
	pid file = /var/run/rsyncd.pid
	log file = /var/log/rsyncd.log
	lock file = /var/run/rsyncd.lock
	#如果不开启此选项,速度慢,因为会进行域名解析
	reverse lookup = no
	
	#可以定义多个module
	[upload]  
		#存储同步过来的文件路径
		path = /       
		read only = no
		#设置连接此rsyncd的用户名,与linux账号无关,自定义
		auth users = rsync
		#格式: $user_name:$password 权限: 600
		secrets file = /etc/rsyncd.secrets
		list = no
   
   # 启动服务
   systemctl start rsyncd

A服务器(源数据服务器)

   # A服务器
   echo '密码' >> /etc/rsyncd.passwd #权限 600
   # 编写inotyfy+rsync同步脚本 inotify-rsync.sh

该脚本建议使用如supervisor等工具运行,进程保活,挂掉自动拉起:

    #!/bin/bash
    set -ex
    monitor_path='/tmp/' # *需要监控的目录*
    sync_host='127.0.0.1' # *修改ip地址*
    sync_user='rsync'  # *修改username*
    sync_module='upload'  #*修改module名称*

    # 阻塞监听文件变化,一旦变化则执行rsync同步命令
    inotifywait -mrq --format '%w%f' -e create -e delete -e moved_to -e close_write $monitor_path | while read line
    do
       dir_name=`dirname $line`
       if [ -f $line ];then
         # 文件存在,则同步
         rsync -azrR   $line     --delete --password-file=/etc/rsyncd.passwd $sync_user@$sync_host::$sync_module
       else
         # 文件不存在(例如被删除), 则全量同步该文件所在目录文件内容
         rsync -azrR   $dir_name --delete --password-file=/etc/rsyncd.passwd $sync_user@$sync_host::$sync_module
       fi
    done

supervisor配置文件:

[program:inotify-rsync]
command=/bin/bash -c "/sh/shell/inotify-rsync.sh"
process_name=inotify-rsync
autorestart=true
startsecs=5
stopsignal=INT
stopasgroup=true
killasgroup=true
redirect_stderr=true
stdout_logfile_maxbytes=0
stdout_logfile=/sh/shell/inotify-rsync-running.log
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/182257.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 深入理解getopt[通俗易懂]

    深入理解getopt[通俗易懂]getopt–解析命令的可选项【说明】getopt只是一个简单的解析命令可选项的函数,只能进行简单的格式命令解析,格式如下:1、形如:cmd[-a][-b]//对短选项的解析;2、形如:cmd[-aa_argument][-bb_argument]//对短选项及短选项的参数解析;3、形如:cmd[-a[a_argument]]//选项a的参数也是可选的情况解析4…

  • eclipse设置中没有server选项[通俗易懂]

    用eclipse准备配置tomcat,发现配置中没有server选项,参考各种解决方法之后成功解决。准备工作:1.查看eclipse版本号;在eclipse中点Help,现在AboutEclipseIDE;2.添加server插件;eclipse中点Help,选择InstallNewSoftware…;点Add,Name输入上面查询的eclipse版本号,Location…

  • ubuntu安装pip3_ubuntu查看python包

    ubuntu安装pip3_ubuntu查看python包ubuntu安装pip一、pip是什么二、pip命令行安装三、源文件安装四、出现的报错我的环境:ubuntu18.04一、pip是什么简单来时:pip是Python中的标准库管理器。它允许你安装和管理不属于Python标准库的其它软件包。二、pip命令行安装安装:sudoaptinstallpython3-pip更新:pip3install–upgradepip验证:pip-V三、源文件安装如果上面的方法失效后,可以使用这种编译源码的方法:1、安装set

    2022年10月22日
  • dede添加会员功能听语音

    dede添加会员功能听语音

  • 常用的web漏洞扫描工具_系统漏洞扫描工具有哪些

    常用的web漏洞扫描工具_系统漏洞扫描工具有哪些转载自:http://fairysoftware.com/web_lou_dong_sao_miao.html1、AWVS,国外商业收费软件,据了解一个License一年费用是2万多RMB。可见总体漏洞扫描概况,也可导出报告,报告提供漏洞明细说明、漏洞利用方式、修复建议。缺点是限制了并行扫描的网站数。2、OWASPZed(ZAP),来自OWASP项目组织的开源免费工具,提供漏洞扫描、爬虫、Fuzz功能,该工具已集成于KaliLinux系统。3、Nikto,一款开源软件,不仅可用于扫描发现网.

  • 2018年Unity结合Android SDK下载安装及配置教程

    2018年Unity结合Android SDK下载安装及配置教程首先声明:Unity版本2017.1f3最近试着在Unity中利用网易做AR开发时,发布项目文件需要发布到Android平台,遇到一些问题,看了网上的一些资料,踩了一些坑,现在总结出来,希望有相同的开发者遇到时可以规避。第一步、安装JDK;第二步、安装Eclipse;第三步、下载并安装AndroidSDK;第四步、在Unity中发布到Android平台。安装JDK官网:http:/…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号