本文共 13608 字,大约阅读时间需要 45 分钟。
整个拓扑如下:
Rsync作为空户端同步rsyncser上面的数据到rsync
一,安装配置rsync
yum install xinetd rsync
二,配置rsync
1,创建/etc/rsyncd.conf配置文件
Rsync配置文件如下:
#Rsync server
uid = nobody
gid = nobody
port=873
use chroot = no
max connections = 2000
timeout = 600
pid file =/var/run/rsyncd.pid
lock file =/var/run/rsync.lock
log file = /var/log/rsyncd.log
read only = false #服务器只读,不允许上传
list = no #不允许列出服务器文件
hosts allow = 192.168.12.0/24
hosts deny = *
auth users = rsync_backup #匿名用户
secrets file = /etc/rsyncd/rsyncd.secrets #rsync 认证口令文件
motd file = /etc/rsyncd/rsyncd.motd #欢迎信息
strict modes = yes #指定是否监测口令文件的权限,设置后/etc/rsyncd/rsyncd.secrets 权限600 只能被服务运行身份的用户访问
ignore errors #delete 操作时是否忽略 I/O 错误将将跳过 –delete 操作,以防止因为暂时的资源不足或其它 I/O 错误导致的严重问题
#################################################
[www]
comment = www #简介
path = /data/www/
uid=root #模块权限用户上传下载的系统用户,如果用户对此目录没有权限就不能上传下载
gid=root
#transfer logging = true #传输日志
#################################################
[bbs]
comment = bbs
path = /data/bbs/
#################################################
[blog]
comment = blog
path = /data/blog/
exclude=sources #排除路径
exclude=public_html/database.txt
exclude-from=/etc/rsyncd.d/excludefile.txt
2,设置rsync同步用户和密码,都是匿名用户非系统用户 注意文件必须设置权限600
mkdir /etc/rsyncd/
echo "rsync_backup:123456">/etc/rsyncd/rsyncd.secrets
chmod 600 /etc/rsyncd/rsyncd.secrets
注意
secrets file = /etc/rsyncd/rsyncd.secrets #rsync 认证口令文件
strict modes = yes #指定是否监测口令文件的权限,设置后/etc/rsyncd/rsyncd.secrets 权限600 只能被服务运行身份的用户访问
3,设置登陆欢迎信息
echo "+++++++++++++++++++++++++++ + David Camp + +++++++++++++++++++++++++++" >/etc/rsyncd/rsyncd.motd
效果
4,创建本机的目录
mkdir /data/{www,blog,bbs} -pv
5,设置rsync 模块下目录属主属组
[www]
comment = www #简介
path = /data/www/
uid=root #模块权限用户上传下载的系统用户,如果用户对此目录没有权限就不能上传下载
gid=root
注意:因为root用户对此目录有读写权限。如果不配置默认是
uid = nobody
gid = nobody
模块用户配置不正确如下
6,rsync作为上传服务器配置 【rsyncserver作为服务端的情况,必须配置read only=false】
read only = false #默认服务器只读,不允许上传
二,配置xinetd守护进程
[root@localhost xinetd.d]# cat rsync
# default: off
# description: The rsync server is a good addition to an ftp server, as it \
#allows crc checksumming etc.
service rsync
{
disable= no #注意更改
flags= IPv6
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon --config=/etc/rsyncd.conf #注意更改
log_on_failure += USERID
}
启动rsync服务
/etc/init.d/xinetd start
如图启动成功
三,rsync上传下载命令及参数
##########################################
-a 参数,相当于-rlptgoD,
-r 是递归 -l 是链接文件,意思是拷贝链接文件;
-p 表示保持文件原有权限;
-t 保持文件原有时间;
-g 保持文件原有用户组;
-o 保持文件原有属主;
-D 相当于块设备文件;
-z 传输时压缩;
-P 传输进度;
-v 传输时的进度等信息,和-P有点关系
下载rsync www模块下的资源到 /tmp下
rsync -avzP rsync_backup@192.168.12.68::www /tmp/
上传root/ 下文件到远程主机192.168.12.68 rsync www模块下
rsync -avzP /root/ rsync_backup@192.168.12.68::www
--delete效果 上传本地数据到rsync 【注意会删除rsync服务器上的资源】
命令:rsync -artuz -R --delete ./ rsync_backup@192.168.12.68::www
注意--delete rsync上面本机没有的数据。保证本机和rsync上面的数据一致性
Rsync服务器目录
本机上运行
现在查看rsync服务器目录
设置--password-file=/etc/rsync.pas 避免输入密码
echo "123456">/etc/rsync.pas
chmod 600 /etc/rsync.pas
四,iptables防火墙配置
-A INPUT -s 192.168.12.0/24 -p tcp -m tcp --dport 873 -j ACCEPT
允许源ip 192.168.12.0/24 访问目的端口873
-A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT
允许22,80,443端口访问
-A OUTPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
允许能进建立链接的请求返回报文
指定允许出去访问某个主机的某个端口 注意匹配顺序上至下
-A INPUT -s 202.108.250.210/32 -p tcp -m tcp --sport 80 -j ACCEPT
-A OUTPUT -d 202.108.250.210/32 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 192.168.12.0/24 -p tcp -m tcp --dport 873 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT
-A INPUT -s 202.108.250.210/32 -p tcp -m tcp --sport 80 -j ACCEPT
-A OUTPUT -d 202.108.250.210/32 -p tcp -m tcp --dport 80 -j ACCEPT
-A OUTPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
防火墙配置如下:
[root@localhost www]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.7 on Tue Sep 26 08:35:29 2017
*filter
:INPUT DROP [57:11906]
:FORWARD ACCEPT [0:0]
:OUTPUT DROP [2:144]
-A INPUT -s 192.168.12.0/24 -p tcp -m tcp --dport 873 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT
-A OUTPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
COMMIT
# Completed on Tue Sep 26 08:35:29 2017
五,rsyncser配置
配置说明
复制代码 代码如下:
<host hostip="localhost" port="8008"></host>
hostip与port是针对插件的保留字段,对于同步功能没有任何作用,保留默认即可。
filter文件过滤功能
对于sersync监控的文件,会默认过滤系统的临时文件(以“.”开头,以“~”结尾),除了这些文件外,可以自定义其他需要过滤的文件。
复制代码 代码如下:
<filter start="true"><exclude expression="(.*)\.gz"></exclude><exclude expression="^info/*"></exclude></filter>
将start设置为 true,在exclude标签中,填写正则表达式,默认给出两个例子分别是过滤以”.gz”结尾的文件与过滤监控目录下的info路径(监控路径/info /*),可以根据需要添加,但开启的时候,自己测试一下,正则表达式如果出现错误,控制台会有提示。相比较使用rsync 的exclude功能,被过滤的路径,不会加入监控,大大减少rsync的通讯量。
inotify监控参数设定(优化)
对于inotify监控参数可以进行设置,根据您项目的特点优化srsync。
复制代码 代码如下:
<inotify><delete start="true"/><createFolder start="true"/><createFile start="true"/></inotify>
对于大多数应用,可以尝试把createFile(监控文件事件选项)设置为false来提高性能,减少 rsync通讯。因为拷贝文件到监控目录会产生create事件与close_write事件,所以如果关闭create事件,只监控文件拷贝结束时的事 件close_write,同样可以实现文件完整同步。
注意:强将createFolder保持为true,如果将createFolder设为false,则不会对产生的目录进行监控,该目录下的子文件与子目录也不会被监控。所以除非特殊需要,请开启。默认情况下对创建文件(目录)事件与删除文件(目录)事件都进行监控,如果项目中不需要删除远程目标服务器的文件(目录),则可以将delete 参数设置为false,则不对删除事件进行监控。
Debug开启
复制代码 代码如下:
<debug start="false"/>
设置为true,开启debug模式,会在sersync正在运行的控制台,打印inotify事件与rsync同步命令。
XFS文件系统
<fileSystem xfs="false"/>
对于xfs文件系统的用户,需要将这个选项开启,才能使sersync正常工作.
文件监控与远程同步设置
复制代码 代码如下:
<localpath watch="/opt/tongbu"><remote ip="192.168.0.104" name="tongbu1"/><!--<remote ip="192.168.8.39" name="tongbu"/>--><!--<remote ip="192.168.8.40" name="tongbu"/>--></localpath>
详见sersync2 完全安装配置说明(一) —-基本功能使用
Rsync参数配置
复制代码 代码如下:
<rsync><commonParams params="-artuz"/><auth start="false" users="root" passwordfile="/etc/rsync.pas"/><userDefinedPort start="false" port="874"/><!-- port=874 --><timeout start="false" time="100"/><!-- timeout=100 --><ssh start="false"/></rsync>
commonParams可以用户自定义rsync参数,默认是-artuz
auth start=”false” 设置为true的时候,使用rsync的认证模式传送,需要配置user与passwrodfile(?password-file=/etc/rsync.pas),来使用。userDefinedPort 当远程同步目标服务器的rsync端口不是默认端口的时候使用(?port=874)。timeout设置rsync的timeout时间(?timeout=100)。ssh 使用rsync -e ssh的方式进行传输。
失败日志脚步配置
复制代码 代码如下:
<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/>
对于失败的传输,会进行重新传送,再次失败就会写入rsync_fail_log,然后每隔一段时间(timeToExecute进行设置)执行该脚本再次重新传送,然后清空该脚本。可以通过path来设置日志路径。
Crontab定期整体同步功能
复制代码 代码如下:
<crontab start="false" schedule="600"><!--600mins--><crontabfilter start="false"><exclude expression="*.gz"></exclude><exclude expression="info/*"></exclude></crontabfilter></crontab>
crontab可以对监控路径与远程目标主机每隔一段时间进行一次整体同步,可能由于一些原因两次失败重传都失败了,这个时候如果开启了crontab功 能,还可以进一步保证各个服务器文件一致,如果文件量比较大,crontab的时间间隔要设的大一些,否则可能增加通讯开销。schedule这个参数是设置crontab的时间间隔,默认是600分钟
如果开启了filter文件过滤功能,那么crontab整体同步也需要设置过滤,否则虽然实时同步的时候文件被过滤了,但crontab整体同步的时候 如果不单独设置crontabfilter,还会将需过滤的文件同步到远程,crontab的过滤正则与filter过滤的不同,也给出了两个实例分别对 应与过滤文件与目录。总之如果同时开启了filter与crontab,则要开启crontab的crontabfilter,并按示例设置使其与filter的过滤一一对应。
插件设置
复制代码 代码如下:
<plugin start="false" name="command"/>
当设置为true的时候,将文件同步到远程服务器后会调用name参数指定的插件。详见请看插件设置。
<inotify>
<delete start="true"/>
<createFolder start="true"/> #创建文件夹
<createFile start="false"/> #创建文件。建议关闭
<closeWrite start="true"/> #打开的文件被关闭,是为了写文件而打开文件,之后被关闭的事件
<moveFrom start="true"/> #将监控目录下文件或目录移动到其他地方,也可以是在监控目录内部的移动
<moveTo start="true"/> #向监控目录下移入了文件或目录,也可以是监控目录内部的移动
<attrib start="false"/> #元数据被修改。包括权限、时间戳、扩展属性等等
<modify start="false"/> #文件被修改
</inotify>
注意事件通知主要是针对的是rsyncser上面的目录。如果rsync上面的目录创建文件,此时rsyncserv并不能删除rsync上面的目录。如果配置了crontab可以对监控路径与远程目标主机每隔一段时间进行一次整体同步。
配置说明
1,设置
rsync账户和密码
echo "123456">/etc/rsync.pas
chmod 600 /etc/rsync.pas
users="rsync_backup" passwordfile="/etc/rsync.pas"/ 注意和rsync配置的auth uesr一致
2,设置 通知机制
<inotify>
<delete start="true"/> #服务端删除,rsync端也删除
<createFolder start="true"/> #创建文件夹
<createFile start="false"/> #创建文件。建议关闭
<closeWrite start="true"/> #打开的文件被关闭,是为了写文件而打开文件,之后被关闭的事件。可以理解为文件修改,创建。
<moveFrom start="true"/> #将监控目录下文件或目录移动到其他地方,也可以是在监控目录内部的移动
<moveTo start="true"/> #向监控目录下移入了文件或目录,也可以是监控目录内部的移动
<attrib start="false"/> #元数据被修改。包括权限、时间戳、扩展属性,改属组默认是不同步时间戳。
<modify start="false"/> #文件被修改 closeWrite也是修改。所以这个可以关闭
</inotify>
3,设置本地目录及上传主机
<sersync>
<localpath watch="/data/www"> #本地/data/www 上传到192.168.12.68 www模块
<remote ip="192.168.12.68" name="www"/>
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<commonParams params="-artuz"/>
<auth start="true" users="rsync_backup" passwordfile="/etc/rsync.pas"/> #
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
<failLog path="/tmp/rsync_fail_log.log.sh" timeToExecute="60"/><!--default every 60mins execute once--> #失败命令记录。失败重试60mins
<crontab start="true" schedule="600"><!--600mins--> #定时600分钟全量同步一次,全量同步注意如果rsync端创建了一个文件。全量同步后会删除。如果rsync端删除了一个文件,服务端存在,全量同步会同步过来
<crontabfilter start="false">
<exclude expression="*.php"></exclude>
<exclude expression="info/*"></exclude>
</crontabfilter>
</crontab>
<plugin start="false" name="command"/> #插件直接忽略
</sersync>
启动服务
/root/GNU-Linux-x86/sersync2 -d -r -o /root/GNU-Linux-x86/confxml.xml
注意:
1,rsyncser上传到rsync时。Rsync需要可以上传
2,rsyncser的通知机制严重影响到rsyncser上传触发机制。根据实际情况设置
3,crontab 设置需要注意。全量同步。如果服务器端删除,备份的那边全量同步后也会删除。
附件1:
<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
<host hostip="localhost" port="8008"></host>
<debug start="false"/>
<fileSystem xfs="false"/>
<filter start="false">
<exclude expression="(.*)\.svn"></exclude>
<exclude expression="(.*)\.gz"></exclude>
<exclude expression="^info/*"></exclude>
<exclude expression="^static/*"></exclude>
</filter>
<inotify>
<delete start="true"/>
<createFolder start="true"/>
<createFile start="false"/>
<closeWrite start="false"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="false"/>
<modify start="false"/>
</inotify>
<sersync>
<localpath watch="/data/www">
<remote ip="192.168.12.68" name="www"/>
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<commonParams params="-artuz"/>
<auth start="true" users="rsync_backup" passwordfile="/etc/rsync.pas"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
<failLog path="/tmp/rsync_fail_log.log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
<crontab start="true" schedule="1"><!--600mins-->
<crontabfilter start="false">
<exclude expression="*.php"></exclude>
<exclude expression="info/*"></exclude>
</crontabfilter>
</crontab>
<plugin start="false" name="command"/>
</sersync>
<plugin name="command">
<param prefix="/bin/sh" suffix="" ignoreError="true"/><!--prefix /opt/tongbu/mmm.sh suffix-->
<filter start="false">
<include expression="(.*)\.php"/>
<include expression="(.*)\.sh"/>
</filter>
</plugin>
<plugin name="socket">
<localpath watch="/opt/tongbu">
<deshost ip="192.168.138.20" port="8009"/>
</localpath>
</plugin>
<plugin name="refreshCDN">
<localpath watch="/data0/htdocs/cms.xoyo.com/site/">
<cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
<sendurl base="http://pic.xoyo.com/cms"/>
<regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
</localpath>
</plugin>
</head>
附件2:
#Rsync server
uid = nobody
gid = nobody
port=873
use chroot = no
max connections = 2000
timeout = 600
pid file =/var/run/rsyncd.pid
lock file =/var/run/rsync.lock
log file = /var/log/rsyncd.log
read only = false #false服务器只读,不允许上传
list = no #不允许列出服务器文件
hosts allow = 192.168.12.0/24
hosts deny = *
auth users = rsync_backup #匿名用户
secrets file = /etc/rsyncd/rsyncd.secrets #rsync 认证口令文件
motd file = /etc/rsyncd/rsyncd.motd #欢迎信息
strict modes = yes #指定是否监测口令文件的权限,设置后/etc/rsyncd/rsyncd.secrets 权限600 只能被服务运行身份的用户访问
ignore errors #delete 操作时是否忽略 I/O 错误将将跳过 –delete 操作,以防止因为暂时的资源不足或其它 I/O 错误导致的严重问题
#################################################
[www]
comment = www #简介
path = /data/www/
uid=root #模块权限用户上传下载的系统用户,如果用户对此目录没有权限就不能上传下载
gid=root
#transfer logging = true #传输日志
#################################################
[bbs]
comment = bbs
path = /data/bbs/
#################################################
[blog]
comment = blog
path = /data/blog/
exclude=sources #排除路径
exclude=public_html/database.txt
exclude-from=/etc/rsyncd.d/excludefile.txt
/etc/rsyncd.d/excludefile.txt #排除的路径都是相对路径
sources
public_html/database.*
downloads/test/*
##########################################
-a 参数,相当于-rlptgoD,
-r 是递归 -l 是链接文件,意思是拷贝链接文件;
-p 表示保持文件原有权限;
-t 保持文件原有时间;
-g 保持文件原有用户组;
-o 保持文件原有属主;
-D 相当于块设备文件;
-z 传输时压缩;
-P 传输进度;
-v 传输时的进度等信息,和-P有点关系
rsync -avzP rsync_backup@192.168.12.67::www /tmp/ 下载
这回我们引入一个 –delete 选项,表示服务器上的数据要与客户端完全一致,如果服务器上没有则删除
rsync -avzP --password-file=/tmp/rsync.password --delete rsync_backup@192.168.12.67::www /tmp/
--password-file=/tmp/rsync.password
rsync -avzP /root/ rsync_backup@192.168.12.67::www 上传
log format指定传输日志文件的字段。”%o %h [%a] %m (%u) %f %l”
设置了”log file”参数时,在日志每行的开始会添加”%t [%p]“。
可以使用的日志格式定义符如下所示:
%a - 远程IP地址
%h - 远程主机名
%l - 文件长度字符数
%p - 该次 rsync 会话的 PID
%o - 操作类型:”send” 或 “recv”
%f - 文件名
%P - 模块路径
%m - 模块名
%t - 当前时间
%u - 认证的用户名(匿名时是 null)
%b - 实际传输的字节数
%c - 当发送文件时,记录该文件的校验码
安装
yum install xinetd rsync
[root@localhost xinetd.d]# cat rsync
# default: off
# description: The rsync server is a good addition to an ftp server, as it \
#allows crc checksumming etc.
service rsync
{
disable= no
flags= IPv6
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon --config=/etc/rsyncd.conf
log_on_failure += USERID
}