当前位置: 首页 > Linux

Centos-lsync+rsync文件实时同步

时间:2023-04-06 20:46:03 Linux

web服务达到一定程度后,服务器就会出现瓶颈,不久前就出现过这样的问题。我们的商城项目一直是单机模式(单机运行)。有一个促销活动。结果服务器的CPU直接爆满,飙升到100%,负载达到100多,这很恐怖。如果长期如此,随时都会发生Downtime。针对这种情况,需要进行负载均衡。但是,负载均衡需要多服务器部署。首先要解决的问题是服务器之间的代码同步。研究了很多方案,比如Jenkins、Walle等部署方式。不是太复杂,生活不稳定。一般来说,我们只需要代码同步的功能,越简单越好。Jenkins这样的工具还不错,确实好用,老掉牙的工具,只是我们还没有达到那个量级,不需要太复杂的东西。言归正传,我来一步步给大家介绍一下lsync+rsync这两个轻量级工具。准备环境:系统环境:Centos7.2Master(主):192.168.0.113Backup(从):192.168.0.114备用运行1.安装rsyncyum-yinstallxinetdrsync2.启动rsync守护进程[root@slave~]#vim/etc/xinetd.d/rsyncservicersync{disable=noflags=IPv4socket_type=streamwait=nouser=rootserver=/usr/bin/rsyncserver_args=--daemonlog_on_failure+=USERID}3.修改后启动服务添加启动时启动[root@slave~]#servicexinetdstart[root@slave~]#systemctlenablexinetd.service4。配置同步存储路径[root@slave~]#vim/etc/rsyncd.conf[web]path=/data/wwwhostsallow=192.168.0.113hostsdeny=*list=trueuid=rootgid=rootreadonly=false5.启动rsync在守护进程模式下[root@slave~]#/usr/bin/rsync--daemonhostoperation:1.New添加lsync源,并安装(不是默认)[root@master~]#wget-O/etc/yum.repos.d/epel.repohttp://mirrors.aliyun.com/repo/epel-6.repo[root@master~]#yuminstalllsyncdrsync2。打开lsyncd配置文件[root@master~]#vim/etc/sysconfig/lsyncd#为systemd保留空间。不要嵌套变量#更改要使用的systemd服务文件:/usr/bin/sh-c'evalXXXX'#LSYNCD_OPTIONS="-pidfile/var/run/lsyncd.pid/etc/lsyncd.conf"(删除#)#LSYNCD_OPTIONS=""#LSYNCD_USER=""3.添加lsyncd主配置[root@master~]#vim/etc/lsyncd.conf注意:如果你有这一项,请添加注释,Centos7默认不注释掉(在注释前加上--)--sync{default.rsyncssh,source="/var/www/html",host="localhost",targetdir="/tmp/htmlcopy/"}settings{--pidfile="/var/run/lsyncd.pid",--nodaemon=false,inotifyMode="CloseWrite",maxProcesses=8,statusFile="/tmp/lsyncd.status",statusInterval=1,logfile="/var/log/lsyncd/lsyncd.log"}sync{默认。rsync,source="/data/www",target="192.168.0.114::www",delete="running",excludeFrom="/etc/rsync_exclude.lst",delay=5,init=false,rsync={binary="/usr/bin/rsync",perms=true,acls=true,xattrs=true,链接s=true,quiet=true,archive=true,compress=true,verbose=true,--password_file="/etc/rsync.pwd",_extra={"--bwlimit=200"}}}lsyncd.conf参数详细配置:设置为全局设置,--开头表示注释,下面是几个常用选项的说明:logfile定义日志文件statusFile定义状态文件nodaemon=true表示不开启守护模式,而默认的statusInterval将lsyncd的状态写入上面的statusFile的间隔,默认为10秒如果同时有20个文件需要同步,并且maxProcesses=8,那么可以看到最大值当有8个rysnc进程maxDelays时,已经累计了多少监听事件才激活一次同步,即使后面的delay延迟时间还没有到sync中定义的同步参数,可以继续用maxDelays改写settings的全局变量。一般第一个参数指定lsyncd运行在什么模式:rsync、rsyncssh、direct三种模式:default.rsync:本地目录之间的同步,使用rsync,也可以使用ssh达到远程rsync的效果,或者连接到远程rsyncd中守护进程模式;default.direct:本地目录间同步,使用cp、rm等命令完成差异文件备份;default.rsyncssh:同步到远程主机目录,rsyncssh方式,需要使用key认证源同步的源目录,使用绝对路径。target定义目标地址。有几种写法对应不同的模式:/tmp/dest:本地目录同步,可用于direct和rsync模式192.168.0.114:/tmp/dest:同步到远程服务器目录,可用于rsync和rsyncssh模式,拼接命令类似/usr/bin/rsync-ltsd--delete--include-from=---exclude=*SOURCETARGET,剩下就是rsync的内容,比如指定用户名,免密码同步192.168。0.114::module:同步到远程服务器目录,rsync模式使用的三种模式的例子后面会给出。init这是一个优化选项。当init=false时,只会同步进程启动后发生变化事件的文件。原目录即使有差异也不会同步。默认为truedelay累计事件,等待rsync同步延迟时间,默认15秒(最多1000个不可合并事件)。即监控目录在15s内发生的变化会累积到一次rsync同步,避免过于频繁的同步。(Mergeable是指同一个文件在15s内被修改两次,最后只同步最新的文件)excludeFrom排除选项,后面指定排除文件列表,如excludeFrom="/etc/lsyncd.exclude",如果要排除很简单,可以使用exclude=LIST。这里的排除规则和原生rsync的写法有点不同,也更简单:监控路径的任何部分匹配一个文本都会被排除。例如,/bin/foo/bar可以匹配规则foo。如果规则以斜杠/开头,那么要从头开始匹配所有如果规则以/结尾,要匹配监控路径的结尾?匹配任意字符,但不包括/*匹配0个或多个字符,但不包括/**匹配0个或多个字符,可以/delete为了保持目标和源完全同步,lsyncd默认会delete=true到允许同步删除。除了false,它还有启动值和运行值,请参考Lsyncd2.1.x‖Layer4Config‖DefaultBehavior。rsync(reminder,delete,exclude本来就是rsync的选项,上面配置的是sync,我之所以要这样做是为了减少rsync的开销)bwlimit限速,单位是kb/s,同rsync(soimportant选项在文档中没有标注)compress压缩传输默认为true。在带宽和cpu负载的平衡上,本地目录同步可以考虑设置为falseperms,默认保留文件权限。其他rsync选项还有rsyncssh模式特有的配置项,比如host、targetdir、rsync_path、password_file,见下面的例子。rsyncOps={"-avz","--delete"}在版本2.1.*中不受支持。lsyncd.conf可以有多个同步,具有自己的源、自己的目标和自己的模式,而不会相互影响。4.将要过滤的目录或文件加入过滤配置文件列表[root@master~]#vim/etc/rsync_exclude.lstlogs/runtime/5。修改默认监听文件数(默认8192)[root@master~]#vim/etc/sysctl.confs.inotify.max_user_watches=2001192[root@master~]#sysctl-p6.启动lsyncd前,检查rsync功能是否可以正常同步[root@master~]#chmod600/etc/rsync.pwdroot:root123[root@master~]#rsync-avz--delete--exclude-from=/etc/rsync_exclude.lst\--password-file=/etc/rsync.pwd/data/www/192.168.0.114::www7.启动lsyncd服务[root@master~]#lsyncd-pidfile/var/run/lsyncd.pid/etc/lsyncd.conf[root@master~]#psxf|greplsync[root@master~]#/etc/init.d/lsyncdstatus[root@master~]#systemctlstartlsyncd[root@master~]#systemctl启用lsyncd8。允许防火墙端口873(rsync默认端口)启动:systemctlenablefirewalldrestart启动:systemctlrestartfirewalld查看状态:systemctlstatusfirewalld启动:systemctlstartfirewalld停止:systemctlstopfirewalld禁用:systemctldisablefirewalldsystemctlunmaskfirewalldfirewall-cmd--永久--zone=public--add-port=873/tcpfirewall-cmd--reload查看所有端口firewall-cmd--permanent--zone=public--list-ports感谢阅读本文,如果您觉得本文对您有帮助,可以给我买一杯咖啡,谢谢