文档章节

Rsync 实现文件定时同步

stone_
 stone_
发布于 2015/07/09 14:32
字数 1671
阅读 1287
收藏 16

rsync的规划:

Rsync配置前首先规划好,同步的方向性。方向性分为推和拉的方式,规划推、拉是为了可以在防火墙设置端口是谁主动连接。例如:一般为从APP服务器生成的静态页面使用推的方式将文件推送到Apache服务器上。下面就是使用推的方式进行配置。

 rsync 同步的大致思路:

服务器A和B上都安装rsync,其中B服务器上是以服务器模式运行rsync,而A上则以客户端方式运行rsync。这样在web服务器B上运行rsync守护进程,在A上定时运行客户程序来同步web服务器B上需要同步的内容。

rsync 同步有下面几个优点:

    可以镜像 保存整个目录树和文件系统。

    可以很容易做到保持原来文件的权限、时间、软硬链接等等。

    无须特殊权限即可安装。

    快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。rsync 在传输数据的过程中可以实行压缩及解压缩 操作,因此可以使用更少的带宽。

    安全:可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。

    支持匿名传输,以方便进行网站镜象。

1. rsync的安装(客户端和服务端都需要安装):

#下载 http://www.samba.org/rsync/
shell> tar zxvf rsync-x.x.x.tar.gz
shell> cd rsync-x.x.x
shell> ./configure && make && make install


#或者


sudo apt-get install rsync
yum install rsync

2. rsync的配置

rsync的主要有以下三个配置文件rsyncd.conf(主配置文件)、rsyncd.secrets(密码文件)、rsyncd.motd(rysnc服务器信息)

rsync服务端配置:

    2.1  rsyncd.conf

uid =backup #/etc/rsyncd.conf 所属用户ID,一般为root
gid =backup #/etc/rsyncd.conf 所属权限组


use chroot = no   #在传输文件的之前,是否转到用户根目录。
max connections = 4   #最大连接数


pid file = /var/run/rsyncd.pid   #服务进程pid保存文件
lock file = /var/run/rsyncd.lock  #锁文件路径

log file = /var/log/rsyncd.log  #日至文件路径

log format = %t %a %m %f %b

#模块儿里的公共属性也可以在全局定义,譬如:
hosts allow = 10.29.204.107  #允许访问的ip地址,如果有多个ip,请用空格分割。


[web] #要备份的模块名,该名称客户端进行同步时需要调用   
                         
path = /disk1/www/imageserver/Public_admin   #要备份的目录
ignore errors    #可以忽略一些无关的IO错误

read only = true  # // 只读
list = false  #//不允许列文件

hosts allow = 10.29.204.107
hosts deny = 0.0.0.0/32

auth users = zhangsan   #//认证的用户名,如果没有这行则表明是匿名,此用户与系统无关
secrets file = /etc/rsyncd/backup.secrets  #//密码和用户名对比表,密码文件自己生成

exclude = important/   #指定不需要同步的目录名,注意,该目录的路径是相对path的。不需要些绝对路径,如果有多个目录不需要同步,请用空格分割开.
comment = This is a test    #这个模块的注释信息

注意:auth users = zhangsan,这个和系统用户名没有关系,只是rsync自己的用户管理。

需要将rsyncd.conf更改权限。将rsyncd.conf这个密码文件的文件属性设为root拥有, 且权限要设为600, 否则无法备份成功!   

   2.2   rsyncd.secrets

配置rsync密码(在上边的配置文件中已经写好路径) rsync.pas(名字随便写,只要和上边配置文件里的一致即可),格式(一行一个用户)

zhangsan:passwd

需要将rsyncd.secrets更改权限。将rsyncd.secrets这个密码文件的文件属性设为root拥有, 且权限要设为600, 否则无法备份成功!

chmod 600 /etc/rsyncd/server/rsyncd.secrets

rsync客户端配置:

配置密码文件,这个密码是rsync请求服务端需要的认证密(/etc/rsyncd/server/rsyncd.secrets里的密码)

]# vim /etc/rsyncd/client.pass

passwd

3. 服务端配置 rsync 服务

3.1. 配置 rsync 服务器的步骤

  • 首先要选择服务器启动方式

    • 对于负荷较重的 rsync 服务器应该使用独立运行方式

    • 对于负荷较轻的 rsync 服务器可以使用 xinetd 运行方式

  • 创建配置文件 rsyncd.conf

  • 对于非匿名访问的 rsync 服务器还要创建认证口令文件

3.2. 以 xinetd 运行 rsync 服务

CentOS 默认以 xinetd 方式运行 rsync 服务。rsync 的 xinetd 配置文件
在 /etc/xinetd.d/rsync。要配置以 xinetd 运行的 rsync 服务需要执行如下的命令:

# chkconfig rsync on
# service xinetd restart

管理员可以修改 /etc/xinetd.d/rsync 配置文件以适合您的需要。例如,您可以修改配置行

server_args = --daemon

在后面添加 rsync 的服务选项。

3.3. 独立运行 rsync 服务

最简单的独立运行 rsync 服务的方法是执行如下的命令:

# rsync --daemon --config=/etc/rsyncd/rsyncd.conf

您可以将上面的命令写入 /etc/rc.local 文件以便在每次启动服务器时运行 rsync 服务。当然,您也可以写一个脚本在开机时自动启动 rysnc 服务。

4. 客户端使用rsync服务。

从server端拉取文件:

rsync -vzrtopg --progress --delete zhangsan@192.168.0.217::web /home/backup --password-file=/etc/rsyncd/client.pass

往server端推送文件:

rsync -vzrtopg --progress  --password-file=/etc/rsyncd/client.pas /home/backup zhangsan@192.168.0.217::web

镜像本地目录:

rsync -av --exclude="front/front_Runtime" --exclude="front/Html" /disk1/www/frontweb/* /disk1/www/frontweb_news

参数说明

参数名

说明

Rsync

同步服务

-vzrtopg

v详细提示
  a以archive模式操作,复制目录、符号连接
  z压缩
  u只进行更新,防止本地新文件被重写,注意两者机器的时钟的同时

--progress

显示进程

--delete

删除文件保持同步

zhangsan

服务器允许访问的用户名

192.168.0.217

服务器IP

::web

服务器中定义的备份模块名(注意:在模块名前面有两个冒号“::” 表示远程文件同步,只有一个冒号,表示本地文件同步)

/home/backup/

本地备份文件目录

 写成定时任务:

]# vim /root/crontab/tongbu.sh


#!/bin/bash
/usr/bin/rsync -vzrtopg --progress --delete zhangsan@192.168.0.217::web /home/backup --password-file=/etc/client.pass



]#  crontab -e

/5 * * * * /root/crontab/tongbu.sh   #五分钟运行一次

 

其他:

]#  rsync --daemon  #默认用/etc/rsyncd.conf配置文件启动

]#  rsync --daemon --config=/etc/rsyncd/rsyncd.conf   //指定配置文件启动

]#  killall -9 rsync  #结束

]# ps -ef | grep rsync #查看

]# netstat -a | grep rsync  #检查端口

]# telnet 192.168.1.190  873  #测试端口

rsync中出现的几种错误:

同步命令:

rsync -vzrtopg --progress  --delete --exclude=".svn" --password-file=/etc/rsyncd/apache.pass /var/data/codes/ backup@172.28.6.69::tbfrom79
[tbfrom79]
path = /var/www/html/online
ignore errors
read only = no
list = false
hosts allow = 172.28.6.79
hosts deny = 0.0.0.0/32
auth users =backup
uid=apache
gid=apache
secrets file = /etc/rsyncd/backup.pass

修改 /var/www/html/online所属用户和用户组为apache

 

© 著作权归作者所有

stone_
粉丝 21
博文 221
码字总数 163611
作品 0
洛阳
程序员
私信 提问
Rsync实现主服务器热备份

Rsync全称是remote synchronize,也就是远程同步工具。官网介绍,“rsync is an open source utility that provides fast incremental file transfer. (rsync是一款提供快速增量文件传输的开...

shiw019
2016/05/22
407
0
50台集群架构配置介绍-sersync

sersync实时复制工具实践 环境 NFS ip = 10.0.0.31 backup ip = 10.0.0.41(作为实时共享) 在backup的rsync服务配置里面加一个模块,创建/nfsbackup并改变权限。 在nfs客户端推送资料到backu...

gyrgey18912
2018/07/03
0
0
Rsync实现服务器间文件数据同步配置实例

> os: ubuntu 12.04 server > server: 192.168.33.201 > client: 192.168.33.202 ## 什么是rsync? > rsync是Unix下的一款应用软件,它能同步更新两处计算机的文件与目录,并适当利用差分编码......

Stefan阿钢
2015/01/07
0
0
rsync定时任务引起cpu负载高

rsync文件同步定时任务引起cpu高 通过rsync同步静态文件到其他服务器,有时候会发现服务器负载高 原因:定时任务脚本的同步未在规定时间内完成,crontab接下来的还会执行此脚本,很多个rsync...

huj
2018/09/07
0
0
rsync同步配制

1、下载安装rsync 2、配制rsync.conf # vim /etc/rsyncd/rsyncd.conf 3、生成密码文件 #vim /etc/rsyncd/rsyncd.passwd 4、文件权限修改 5、启动rsync 也可以将上面的命令写到/etc/rc.local...

小木头的冬天
2016/09/07
28
0

没有更多内容

加载失败,请刷新页面

加载更多

3_数组

3_数组

行者终成事
今天
7
0
经典系统设计面试题解析:如何设计TinyURL(二)

原文链接:https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
今天
7
0
使用logstash同步MySQL数据到ES

概述   在生成业务常有将MySQL数据同步到ES的需求,如果需要很高的定制化,往往需要开发同步程序用于处理数据。但没有特殊业务需求,官方提供的logstash就很有优势了。   在使用logstas...

zxiaofan666
今天
10
0
X-MSG-IM-分布式信令跟踪能力

经过一周多的鏖战, X-MSG-IM的分布式信令跟踪能力已基本具备, 特点是: 实时. 只有要RX/TX就会实时产生信令跟踪事件, 先入kafka, 再入influxdb待查. 同时提供实时sub/pub接口. 完备. 可以完整...

dev5
今天
7
0
OpenJDK之CyclicBarrier

OpenJDK8,本人看的是openJDK。以前就看过,只是经常忘记,所以记录下 图1 CyclicBarrier是Doug Lea在JDK1.5中引入的,作用就不详细描述了,主要有如下俩个方法使用: await()方法,如果当前线...

克虏伯
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部