rsync端口(CentOS6中rsync服务器的安装与配置)

本文目录
- CentOS6中rsync服务器的安装与配置
- 如何在Linux服务器中实现数据实时同步及备份
- 为什么rsync服务对应的端口显示所属进程是xinetd而非rsync
- 详解rsync,一款卓越的增量同步工具(一)
- linux系统安装rsync和sersync实现数据实时同步详细步骤
- Ubuntu Server Rsync服务端与Windows cwRsync客户端实现数据同步配置教程
- Windows下利用cwRsync批量同步文件
CentOS6中rsync服务器的安装与配置
一、rsync 简介
Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件,也可以使用 Rsync 同步本地硬盘中的不同目录。
Rsync 是用于取代rcp的一个工具,Rsync使用所谓的 “Rsync 算法” 来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。您可以参考 How Rsync Works A Practical Overview 进一步了解 rsync 的运作机制。
Rsync支持大多数的类Unix系统,无论是Linux、Solaris还是BSD上都经过了良好的测试。此外,它在windows平台下也有相应的版本,比较知名的有cwRsync和Sync2NAS。
***隐藏网址***
Rsync的基本特点如下:
1. 可以镜像保存整个目录树和文件系统;
2. 可以很容易做到保持原来文件的权限、时间、软硬链接等;
3. 无须特殊权限即可安装;
4. 优化的流程,文件传输效率高;
5. 可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接;
6. 支持匿名传输,以方便进行网站镜像。
在使用 rsync 进行远程同步时,可以使用两种方式:远程 Shell 方式(建议使用 ssh,用户验证由 ssh 负责)和 C/S 方式(即客户连接远程 rsync 服务器,用户验证由 rsync 服务器负责)。
无论本地同步目录还是远程同步数据,首次运行时将会把全部文件拷贝一次,以后再运行时将只拷贝有变化的文件(对于新文件)或文件的变化部分(对于原有文件)。
rsync 在首次复制时没有速度优势,速度不如 tar,因此当数据量很大时您可以考虑先使用 tar 进行首次复制,然后再使用 rsync 进行数据同步。
二、系统环境
系统平台:CentOS release 6.3 (Final)
rsync 版本:rsync-3.0.9-2.el6.rfx.x86_64.rpm
rsync 服务器:TS-DEV (172.16.1.135)
rsync 客户端:TS-CLIENT (172.16.1.136)
三、服务器端安装rsync服务
3.1. 检查rsync 是否已经安装
# rpm -qa|grep rsync
若已经安装,则使用rpm -e 命令卸载。
3.2. 下载RPM包
***隐藏网址***
3.3. 安装rsync
# rpm -ivh rsync-3.0.9-2.el6.rfx.x86_64.rpm
四、配置 rsync 服务
4.1. 配置 rsync 服务器的步骤
首先要选择服务器启动方式 对于负荷较重的 rsync 服务器应该使用独立运行方式 对于负荷较轻的 rsync 服务器可以使用 xinetd 运行方式 创建配置文件 rsyncd.conf 对于非匿名访问的 rsync 服务器还要创建认证口令文件4.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 的服务选项。
4.3. 独立运行 rsync 服务
最简单的独立运行 rsync 服务的方法是执行如下的命令:
# /usr/bin/rsync --daemon
您可以将上面的命令写入 /etc/rc.local 文件以便在每次启动服务器时运行 rsync 服务。当然,您也可以写一个脚本在开机时自动启动 rysnc 服务。
4.4. 配置文件 rsyncd.conf
两种 rsync 服务运行方式都需要配置 rsyncd.conf,其格式类似于 samba 的主配置文件。
配置文件 rsyncd.conf 默认在 /etc 目录下。为了将所有与 rsync 服务相关的文件放在单独的目录下,可以执行如下命令:
# mkdir /etc/rsyncd# touch /etc/rsyncd/rsyncd.conf# ln -s /etc/rsyncd/rsyncd.conf /etc/rsyncd.conf
配置文件 rsyncd.conf 由全局配置和若干模块配置组成。配置文件的语法为:
模块以 开始
参数配置行的格式是 name = value ,其中 value 可以有两种数据类型:
字符串(可以不用引号定界字符串)
布尔值(1/0 或 yes/no 或 true/false)
以 # 或 ; 开始的行为注释
/ 为续行符
全局参数
在文件中 之外的所有配置行都是全局参数。当然也可以在全局参数部分定义模块参数,这时该参数的值就是所有模块的默认值。
参数 说明 默认值 address 在独立运行时,用于指定的服务器运行的 IP 地址。由 xinetd 运行时将忽略此参数,使用命令行上的 –address 选项替代。 本地所有IP port 指定 rsync 守护进程监听的端口号。 由 xinetd 运行时将忽略此参数,使用命令行上的–port 选项替代。 873 motd file 指定一个消息文件,当客户连接服务器时该文件的内容显示给客户。 无 pid file rsync 的守护进程将其 PID 写入指定的文件。 无 log file 指定 rsync 守护进程的日志文件,而不将日志发送给 syslog。 无 syslog facility 指定 rsync 发送日志消息给 syslog 时的消息级别。 daemon socket options 指定自定义 TCP 选项。 无模块参数
模块参数主要用于定义 rsync 服务器哪个目录要被同步。模块声明的格式必须为 形式,这个名字就是在 rsync 客户端看到的名字,类似于 Samba 服务器提供的共享名。而服务器真正同步的数据是通过 path 来指定的。可以根据自己的需要,来指定多个模块,模块中可以定义以下参数:
a. 基本模块参数
参数 说明 默认值 path 指定当前模块在 rsync 服务器上的同步路径,该参数是必须指定的。 无 comment 给模块指定一个描述,该描述连同模块名在客户连接得到模块列表时显示给客户。 无b. 模块控制参数
参数 说明 默认值 use chroot 若为 true,则 rsync 在传输文件之前首先 chroot 到 path 参数所指定的目录下。这样做的原因是实现额外的安全防护,但是缺点是需要 root 权限,并且不能备份指向 path 外部的符号连接所指向的目录文件。 true uid 指定该模块以指定的 UID 传输文件。 nobody gid 指定该模块以指定的 GID 传输文件。 nobody max connections 指定该模块的最大并发连接数量以保护服务器,超过限制的连接请求将被告知随后再试。 0(没有限制) lock file 指定支持 max connections 参数的锁文件。 /var/run/rsyncd.lock list 指定当客户请求列出可以使用的模块列表时,该模块是否应该被列出。如果设置该选项为 false,可以创建隐藏的模块。 true read only 指定是否允许客户上传文件。若为 true 则不允许上传;若为 false 并且服务器目录也具有读写权限则允许上传。 true write only 指定是否允许客户下载文件。若为 true 则不允许下载;若为 false 并且服务器目录也具有读权限则允许下载。 false ignore errors 指定在 rsync 服务器上运行 delete 操作时是否忽略 I/O 错误。一般来说 rsync 在出现 I/O 错误时将将跳过 –delete 操作,以防止因为暂时的资源不足或其它 I/O 错误导致的严重问题。 true ignore nonreadable 指定 rysnc 服务器完全忽略那些用户没有访问权限的文件。这对于在需要备份的目录中有些不应该被备份者获得的文件时是有意义的。 false timeout 该选项可以覆盖客户指定的 IP 超时时间。从而确保 rsync 服务器不会永远等待一个崩溃的客户端。对于匿名 rsync 服务器来说,理想的数字是 600(单位为秒)。 0 (未限制) dont compress 用来指定那些在传输之前不进行压缩处理的文件。该选项可以定义一些不允许客户对该模块使用的命令选项列表。必须使用选项全名,而不能是简称。当发生拒绝某个选项的情况时,服务器将报告错误信息然后退出。例如,要防止使用压缩,应该是:”dont compress = *”。 *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbzc. 模块文件筛选参数
参数 说明 默认值 exclude 指定多个由空格隔开的多个文件或目录(相对路径),并将其添加到 exclude 列表中。这等同于在客户端命令中使用 –exclude 来指定模式。 空 exclude from 指定一个包含 exclude 规则定义的文件名,服务器从该文件中读取 exclude 列表定义。 空 include 指定多个由空格隔开的多个文件或目录(相对路径),并将其添加到 include 列表中。这等同于在客户端命令中使用 –include 来指定模式 。 空 include from 指定一个包含 include 规则定义的文件名,服务器从该文件中读取 include 列表定义。 空***隐藏网址***
d. 模块用户认证参数
参数 说明 默认值 auth users 指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户和系统用户没有任何关系。用户名和口令以明文方式存放在 secrets file 参数指定的文件中。 (匿名方式) secrets file 指定一个 rsync 认证口令文件。只有在 auth users 被定义时,该文件才起作用。 空 strict modes 指定是否监测口令文件的权限。若为 true 则口令文件只能被 rsync 服务器运行身份的用户访问,其他任何用户不可以访问该文件。 truersync 认证口令文件的权限一定是 600,否则客户端将不能连接服务器。rsync 认证口令文件中每一行指定一个 用户名:口令 对,格式为:
username:passwd
一般来说口令最好不要超过8个字符。若您只配置匿名访问的 rsync 服务器,则无需设置上述参数。
e. 模块访问控制参数
参数 说明 默认值 hosts allow 用一个主机列表指定哪些主机客户允许连接该模块。不匹配主机列表的主机将被拒绝。 * hosts deny 用一个主机列表指定哪些主机客户不允许连接该模块。 空客户主机列表定义可以是以下形式:
单个IP地址。例如:192.168.0.1整个网段。例如:192.168.0.0/24,192.168.0.0/255.255.255.0可解析的单个主机名。例如:centos,centos.bsmart.cn域内的所有主机。例如:*.bsmart.cn“*”则表示所有。多个列表项要用空格间隔。
f. 模块日志参数
参数 说明 默认值 transfer logging 使 rsync 服务器将传输操作记录到传输日志文件。 false log format 指定传输日志文件的字段。 ”%o %h %m (%u) %f %l”设置了”log file”参数时,在日志每行的开始会添加”%t “。
可以使用的日志格式定义符如下所示:
%a - 远程IP地址 %h - 远程主机名 %l - 文件长度字符数 %p - 该次 rsync 会话的 PID %o - 操作类型:”send” 或 “recv” %f - 文件名 %P - 模块路径 %m - 模块名 %t - 当前时间 %u - 认证的用户名(匿名时是 null) %b - 实际传输的字节数 %c - 当发送文件时,记录该文件的校验码五、rsync 服务器应用案例
5.1. 在服务器端TS-DEV上配置rsync 服务
a. 配置文件
# vi /etc/rsyncd/rsyncd.conf
# Minimal configuration file for rsync daemon# See rsync(1) and rsyncd.conf(5) man pages for help# This line is required by the /etc/init.d/rsyncd script
# GLOBAL OPTIONSuid = root gid = root
use chroot = no
read only = yes #limit access to private LANshosts allow=172.16.0.0/255.255.0.0 192.168.1.0/255.255.255.0 10.0.1.0/255.255.255.0hosts deny=* max connections = 5
pid file = /var/run/rsyncd.pid
secrets file = /etc/rsyncd/rsyncd.secrets #lock file = /var/run/rsync.lock
motd file = /etc/rsyncd/rsyncd.motd #This will give you a separate log filelog file = /var/log/rsync.log #This will log every file transferred - up to 85,000+ per user, per synctransfer logging = yes log format = %t %a %m %f %bsyslog facility = local3timeout = 300
# MODULE OPTIONSpath = /tmp/china/list=noignore errorsauth users = chinacomment = tmp_china
b. 建立/etc/rsyncd/rsyncd.secrets文件
# vim /etc/rsyncd/rsyncd.secrets
david:asdf #格式 用户名:口令
china:jk #该用户不要求是系统用户
c. 为了密码的安全性,我们把权限设为600
# chown root:root /etc/rsyncd/rsyncd.secrets
# chmod 600 /etc/rsyncd/rsyncd.secrets
d. 建立连接到服务器的客户端看到的欢迎信息文件/etc/rsyncd/rsyncd.motd
# vim /etc/rsyncd/rsyncd.motd
+++++++++++++++++++++++++++
+ David Camp +
+++++++++++++++++++++++++++
e. 启动rsync
# /etc/init.d/xinetd restart
f. 查看873端口是否起来
# netstat -an | grep 873
如果rsync启动成功的话可以看到873端口已经在监听了。
g. 服务器端文件详细
5.2. 客户端配置
a. 客户端安装rsync
# yum -y install rsync
b. 通过rsync客户端来同步数据
场景一:
# rsync -avzP david@172.16.1.135::davidhome /tmp/david/
Password: 这里要输入david的密码,是服务器端提供的,在前面的例子中,我们用的是 asdf,输入的密码并不显示出来;输好后就回车;
注: 这个命令的意思就是说,用david 用户登录到服务器上,把davidhome数据,同步到本地目录/tmp/david/上。当然本地的目录是可以你自己定义的,比如 dave也是可以的;当你在客户端上,当前操作的目录下没有davidhome这个目录时,系统会自动为你创建一个;当存在davidhome这个目录中,你要注意它的写权限。
说明:
-a 参数,相当于-rlptgoD,-r 是递归 -l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件;
-z 传输时压缩;
-P 传输进度;
-v 传输时的进度等信息,和-P有点关系,自己试试。可以看文档;
场景二:
# rsync -avzP --delete david@172.16.1.135::davidhome /tmp/david/
这回我们引入一个 –delete 选项,表示客户端上的数据要与服务器端完全一致,如果 /tmp/david/目录中有服务器上不存在的文件,则删除。最终目的是让/tmp/david/目录上的数据完全与服务器上保持一致;用的时候要小心点,最好不要把已经有重要数所据的目录,当做本地更新目录,否则会把你的数据全部删除;
场景三:
# rsync -avzP --delete --password-file=/tmp/rsync.password david@172.16.1.135::davidhome /tmp/david/
这次我们加了一个选项 –password-file=rsync.password ,这时当我们以david用户登录rsync服务器同步数据时,密码将读取 /tmp/rsync.password 这个文件。这个文件内容只是david用户的密码。我们要如下做;
# touch /tmp/rsync.password
# chmod 600 /tmp/rsync.password
# echo "asdf" /tmp/rsync.password
# rsync -avzP --delete --password-file=/tmp/rsync.password david@172.16.1.135::davidhome /tmp/david/
注: 这样就不需要密码了;其实这是比较重要的,因为服务器通过crond 计划任务还是有必要的;
5.3. rsync 客户端自动与服务器同步数据
crontab
# crontab -e
加入如下代码:
10 0 * * * rsync -avzP --delete --password-file=/tmp/rsync.password david@172.16.1.135::davidhome /tmp/david/
表示每天0点10分执行后面的命令。
六、错误分析
@ERROR: chdir failed
rsync error: error starting client-server protocol (code 5) at main.c(1530)
rsync: opendir "." (in xxxxxxx) failed: Permission denied (13)
解决办法:
1、将 selinux 对 rsync 的限制全部去掉:
# /usr/sbin/setsebool -P rsync_disable_trans 1
# service xinetd restart
2、狠一点,禁止整个 selinux :
# vim /etc/selinux/config
将其中的 SELINUX=enforcing 修改为 SELINUX=disabled
保存退出后,重启机器。
至此,rsync服务器配置完毕。
七、参考
***隐藏网址***
***隐藏网址***
如何在Linux服务器中实现数据实时同步及备份
科技时代,任何行业都离不开数据的分析以及统筹,如果掌握了最关键的数据及技术,那成功就指日可待,所以数据对于一个企业来说,就是最无形的财富,而一个企业的数据基本都有服务器保存及管理着,如何保证数据安全,实现数据同步及备份?诚恺科技小编就同大家一起来看看在Linux服务器中利用rsync配合inotify实现数据实时同步及备份的方法。
rsync:可以镜像保存整个目录树和文件系统。可以很容易做到保持原来文件的权限、时间、软硬链接等等。第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。
方案:起初用rsync进行数据备份是利用计划任务,定时执行一下命令实现rsync的同步,但最近开发这边修改比较频繁,看来需要实时同步备份来完善备份机制!所以需要利用inotify触发器来改善!达到一旦指定的位置有了新的变动就将其同步!
环境:
CentOS 6.4 64位
rsync-3.0.9
inotify-tools-3.14
说明:
10.10.1.6 (rsync+inotify)----------网站程序(/data0/htdocs/)
10.10.1.9 (rsync)------------------网站程序备份(/data0/htdocs/)
目的:
实现10.10.1.6的/data0/htdocs/目录下发生任何变动都将实时同步到10.10.1.9的/data0/htdocs/上(另,这两台都跑有keepalived+nginx,来实现出现故障自动切换的容灾,详细配置会在后面补上)
一、web服务器10.10.1.6 (rsync+inotify)
1、准备软件包
2、安装Rsync
1)、1234 tar-zxvf rsync-3.0.9.tar.gz
2)、cdrsync-3.0.9
3)、./configure--prefix=/usr/local/rsync
4)、make;makeinstall
建立密码认证文件
# echo "111111"》/etc/rsyncd/rsyncd.secrets建立密码认证文件
*其中111111可以自己设置密码,rsyncd.secrets名字也可以自己设置;
权限:要将/etc/rsyncd/rsyncd.secrets设置为root拥有, 且权限为600。
# chmod 600 /etc/rsyncd/rsyncd.secrets
3、安装inotify
1)、1234 tar-zxvf inotify-tools-3.14.tar.gz
2)、cdinotify-tools-3.14
3)、./configure--prefix=/usr/local/inotify
4)、make;makeinstall
4、创建rsync复制脚本
此项功能主要是将ftp端的目录/data0/htdocs/里的内容,如果修改了(无论是添加、修改、删除文件)能够通过inotify监控到,并通过rsync实时的同步给10.10.1.9的/data0/htdocs里,下面是通过shell脚本实现的。
# vim /root/shell/rsync.sh
# chmod u+x /root/shell/rsync.sh
# setsid /root/shell/rsync.sh &
#后台运行脚本,关闭shell终端继续后台运行
rsync.sh脚本加入开机启动项
# echo "/root/shell/rsync.sh" 》》 /etc/rc.local
防火墙开启rsync端口:873
添加:
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 873 -jACCEPT
重启:
# /etc/init.d/iptables restart
二、备份服务器10.10.1.9(rsync)
1、准备工作
创建备份目录:
# mkdir /data0/htdocs
2、安装rsync(备份主机只安装rsync)
1)、1234 tar-zxvf rsync-3.0.9.tar.gz
2)、cdrsync-3.0.9
3)、./configure--prefix=/usr/local/rsync
4)、make;makeinstall
3、建立用户与密码认证文件
# echo "root:111111" 》 /etc/ rsyncd/rsyncd.secrets
# less /etc/rsyncd/rsyncd.secrets
root:111111
注意:
请记住,在10.10.1.6端建立的密码文件,只有密码,没有用户名;而在10.10.1.9里建立的密码文件,用户名与密码都有。
权限:要将/etc/rsyncd/rsyncd.secrets设置为root拥有, 且权限为600。
#chmod 600 /etc/rsyncd/rsyncd.secrets
4、建立rsync配置文件
# vim /etc/rsyncd/rsyncd.conf
启动rsync服务
# /usr/local/rsync/bin/rsync --daemon --config=/etc/rsyncd.conf
# ps -ef |grep rsync
Rsync服务加入开机启动项
# echo "/usr/local/rsync/bin/rsync --daemon --config=/etc/rsyncd.conf" 》》 /etc/rc.local
防火墙开启rsync端口:873
添加:
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 873 -jACCEPT
重启:
# /etc/init.d/iptables restart
完成,其实这个时候数据已经同步了!
测试一下:
由于/data0/htdocs/下涉及到一些公司信息,所以就以/data0/htdocs/tmp/为例
主机名可以区别是两台机器,里面的内容完全一直,连文件的属性都一样
再对里面修改一下试试,创建一个文件,然后删除user目录试试
为什么rsync服务对应的端口显示所属进程是xinetd而非rsync
linux配置ssh+rsyncssh 远程登录sftp 文件共享 类似ftp ssh secure file transfer clientscp 文件共享 类似cp ssh配置文件/etc/ssh/sshd_config#PermitRootLogin yes 改成no 禁止root直接登录#Port 22 改变ssh的默认端口号 要打开注释重启ssh服务service sshd restartssh登录 ssh gwyy@192.168.111.130 然后输入密码就好了-2 ssh3协议 建议用ssh3 安全性会更好 ssh -2-p 指定非标准端口 ssh -2 -p2222 gwyy@192.168.11.130 sftp也可以直接在命令行用sftp连接这台主机 sftp gwyy@192.168.11.130scp 拷贝远程文件 加密传输scp 本地文件 用户名@远程主机地址:远程主机目录 scp /etc/inittab root@192.168.111.130:/gwyyscp -r 本地目录 用户名@远程主机地址:远程主机目录 -r拷贝文件从远程主机拷贝文件到本地scp 用户名@远程主机地址:远程主机文件 本地目录scp -r 用户名@远程主机地址:远程目录 本地目录常用选项-p 保持文件属性 比如时间属性-r 复制目录-P 指定端口号例子 可以用crontab + scp做远程备份crontab -e0 2 * * 0 /usr/bin/scp -r web@192.168.1.1:/web /backup/web 周一到周六做增量备份生成 ssh密钥 让2台主机不需要密码第一台主机 root 生成公钥 拷贝到 第二台主机 gwyy 家目录里面 这样 第一台主机root连接第二台主机gwyy不需要密码ssh-keygen -t rsa 生成公钥scp /root/.ssh/id_rsa.pub gwyy@192.168.111.130 /home/gwyy 把公钥拷贝到另一台主机第二台主机 账号登陆 手动创建 .ssh目录 mkdir .ssh 是隐藏的 要用 ls -a 查看cat id_rsa.pub 》》 .ssh/authorized_keys 然后把复制来的文件 改名拷贝到.ssh目录chmod 700 .ssh 改变权限 这个目录 只有普通用户有权限chmod 600 .ssh/authorized_keys 权限必须是600 读写权限rsync 应用 方便的增量备份 可以使用ssh加密通道 可以镜像保存整个目录和文件系统 保持文件的权限时间软连接 等等 传输效率高启用服务 /etc/xinetd.d/rsync设置 disable = on 启用 默认不启用重启xinetd进程 service xinetd restart例子 周1到周6做一次备份crontab -e0 2 * * 1-6 /usr/bin/rsync -arHz --delete gwyy@192.168.111.130:/web /backup 把另一台主机的web目录拷贝到本机的back下面-a 保持文件属性-r 子目录递归处理-H 保持文件硬链接-z 备份文件传输时候压缩处理--progress 在传输时候显示传输过程--delete 删除目标备份没有的文件-e ssh 使用ssh加密隧道传输
详解rsync,一款卓越的增量同步工具(一)
Rsync (remote rsync) 是可以实现 增量备份 的远程(和本地)文件复制工具,目的是实现本地主机和远程主机上的文件同步(包括本地推到远程,远程拉到本地两种同步方式),也可以实现本地不同路径下(不同目录、分区之间)文件的同步,但不能实现远程路径1到远程路径2之间的同步(scp可以实现)。配合计划任务,rsync能实现 定时或周期同步 ;配合inotify或sersync,可以实现触发式的 实时同步 。
本篇文章主要介绍rsync的使用方法和它常用的功能。
***隐藏网址***
不考虑rsync的实现细节,就文件同步而言,涉及了源文件和目标文件的概念,还涉及了以哪边文件为同步基准。例如,想让目标主机上的文件和本地文件保持同步,则是以本地文件为同步基准,将本地文件作为源文件推送到目标主机上。反之,如果想让本地主机上的文件和目标主机上的文件保持同步,则目标主机上的文件为同步基准,实现方式是将目标主机上的文件作为源文件拉取到本地。当然,要保持本地的两个文件相互同步,rsync也一样能实现,这就像Linux中cp命令一样,以本地某文件作为源,另一文件作为目标文件,但请注意,虽然rsync和cp能达到相同的目的,但它们的实现方式是不一样的。
既然是文件同步,在同步过程中必然会涉及到源和目标两文件之间版本控制的问题,例如是否要删除源主机上没有但目标上多出来的文件,目标文件比源文件更新(newer than source)时是否仍要保持同步,遇到软链接时是拷贝软链接本身还是拷贝软链接所指向的文件,目标文件已存在时是否要先对其做个备份等等。
rsync同步过程中由两部分模式组成:决定哪些文件需要同步的检查模式以及文件同步时的同步模式。
(1).检查模式是指按照指定规则来检查哪些文件需要被同步,例如哪些文件是明确被排除不传输的。默认情况下,rsync使用"quick check"算法快速检查源文件和目标文件的大小、mtime(修改时间)是否一致,如果不一致则需要传输。当然,也可以通过在rsync命令行中指定某些选项来改变quick check的检查模式,比如"--size-only"选项表示"quick check"将仅检查文件大小不同的文件作为待传输文件。rsync支持非常多的选项,其中检查模式的自定义性是非常有弹性的。
(2).同步模式是指在文件确定要被同步后,在同步过程发生之前要做哪些额外工作。例如上文所说的是否要先删除源主机上没有但目标主机上有的文件,是否要先备份已存在的目标文件,是否要追踪链接文件等额外操作。rsync也提供非常多的选项使得同步模式变得更具弹性。
相对来说,为rsync手动指定同步模式的选项更常见一些,只有在有特殊需求时才指定检查模式,因为大多数检查模式选项都可能会影响rsync的性能。
以下是rsync的语法:
由此语法可知,rsync有三种工作方式:
(1).本地文件系统上实现同步。命令行语法格式为上述"Local"段的格式。
(2).本地主机使用远程shell和远程主机通信。命令行语法格式为上述"Access via remote shell"段的格式。
(3).本地主机通过网络套接字连接远程主机上的rsync daemon。命令行语法格式为上述"Access via rsync daemon"段的格式。
前两者的本质是通过管道通信,即使是远程shell。而方式(3)则是让远程主机上运行rsync服务,使其监听在一个端口上,等待客户端的连接。
但是,还有第四种工作方式:
(4).通过远程shell也能临时启动一个rsync daemon,这不同于方式(3),它不要求远程主机上事先启动rsync服务,而是临时派生出rsync daemon,它是单用途的一次性daemon,仅用于临时读取daemon的配置文件,当此次rsync同步完成,远程shell启动的rsync daemon进程也会自动消逝。此通信方式的命令行语法格式同"Access via rsync daemon",但要求options部分必须明确指定"--rsh"选项或其短选项"-e"。
如需源码安装,请关注即将发布的《详解Rsync,一款卓越的增量同步工具(二)》
系统环境:
服务器配置:阿里云ECS 11G
操作系统:CentOS7.2
rsync 版本:3.1.2
rsync 服务器:rsync-server (10.168.152.72)
rsync 客户端:rsync-client (10.117.217.172)
检查rsync 是否已经安装
若已安装,无需重新安装;若未安装,用以下命令安装:
写入以下配置到该文件:
输入,格式是“用户名:口令”,用户不要求是系统用户
root:pwd123456
输入:
======welcome to synchronize appdata======
如果rsync启动成功,可以看到873端口已经在监听了。
检查rsync 是否已经安装
若已安装,无需重新安装;若未安装,用以下命令安装:
更多同步数据的场景演示,请关注即将发布的《详解Rsync,一款卓越的增量同步工具(二)》
配置文件 rsyncd.conf 由全局配置和若干模块配置组成。配置文件的语法为:
全局参数
在文件中 之外的所有配置行都是全局参数。当然也可以在全局参数部分定义模块参数,这时该参数的值就是所有模块的默认值。
模块参数
模块参数主要用于定义 rsync 服务器哪个目录要被同步。模块声明的格式必须为 形式,这个名字就是在 rsync 客户端看到的名字,类似于 Samba 服务器提供的共享名。而服务器真正同步的数据是通过 path 来指定的。可以根据自己的需要,来指定多个模块,模块中可以定义以下参数:
a. 基本模块参数
b. 模块控制参数
c. 模块文件筛选参数
d. 模块用户认证参数
e. 模块访问控制参数
客户主机列表定义可以是以下形式:
f. 模块日志参数
设置了”log file”参数时,在日志每行的开始会添加”%t “。
可以使用的日志格式定义符如下所示:
linux系统安装rsync和sersync实现数据实时同步详细步骤
一、为什么要用Rsync+sersync架构?
1、sersync是基于Inotify开发的,类似于Inotify-tools的工具
2、sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或某一个目录的名字,然后使用rsync同步的时候,只同步发生变化的这个文件或者这个目录。
二、Rsync+Inotify-tools与Rsync+sersync这两种架构有什么区别?
1、Rsync+Inotify-tools
(1):Inotify-tools只能记录下被监听的目录发生了变化(包括增加、删除、修改),并没有把具体是哪个文件或者哪个目录发生了变化记录下来;
(2):rsync在同步的时候,并不知道具体是哪个文件或者哪个目录发生了变化,每次都是对整个目录进行同步,当数据量很大时,整个目录同步非常耗时(rsync要对整个目录遍历查找对比文件),因此,效率很低。
2、Rsync+sersync
(1):sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或某一个目录的名字;
(2):rsync在同步的时候,只同步发生变化的这个文件或者这个目录(每次发生变化的数据相对整个同步目录数据来说是很小的,rsync在遍历查找比对文件时,速度很快),因此,效率很高。
小结:当同步的目录数据量不大时,建议使用Rsync+Inotify-tools;当数据量很大(几百G甚至1T以上)、文件很多时,建议使用Rsync+sersync。
说明:
操作系统:CentOS 5.X
源服务器:192.168.21.129
目标服务器:192.168.21.127,192.168.21.128
目的:把源服务器上/home/www.目录实时同步到目标服务器的/home/www.下
具体操作:
第一部分:分别在两台目标服务器192.168.21.127,192.168.21.128上操作
一、分别在两台在目标服务器安装Rsync服务端
1、关闭SELINUX
vi /etc/selinux/config #防火墙配置文件
复制代码
代码如下:
#SELINUX=enforcing #注释掉
#SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加
:wq! #保存,退出
setenforce 0 #立即生效
2、开启防火墙tcp 873端口(Rsync默认端口)
vi /etc/sysconfig/iptables #防火墙配置文件
复制代码
代码如下:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT
:wq! #保存退出
/etc/init.d/iptables restart #最后重启防火墙使配置生效
3、安装Rsync服务端软件
yum install rsync xinetd #安装
vi /etc/xinetd.d/rsync #配置文件,设置开机启动rsync
复制代码
代码如下:
disable = no #修改为no
:wq! #保存退出
/etc/init.d/xinetd start #启动(CentOS中是以xinetd来管理Rsync服务的)
4、创建rsyncd.conf配置文件
vi /etc/rsyncd.conf #创建配置文件,添加以下代码
复制代码
代码如下:
log file = /var/log/rsyncd.log #日志文件位置,启动rsync后自动产生这个文件,无需提前创建
pidfile = /var/run/rsyncd.pid #pid文件的存放位置
lock file = /var/run/rsync.lock #支持max connections参数的锁文件
secrets file = /etc/rsync.pass #用户认证配置文件,里面保存用户名称和密码,后面会创建这个文件
motd file = /etc/rsyncd.Motd #rsync启动时欢迎信息页面文件位置(文件内容自定义)
#自定义名称
path = /home/www./ #rsync服务端数据目录路径
comment = home_www. #模块名称与自定义名称相同
uid = root #设置rsync运行权限为root
gid = root #设置rsync运行权限为root
port=873 #默认端口
use chroot = no #默认为true,修改为no,增加对目录文件软连接的备份
read only = no #设置rsync服务端文件为读写权限
list = no #不显示rsync服务端资源列表
max connections = 200 #最大连接数
timeout = 600 #设置超时时间
auth users = home_www._user #执行数据同步的用户名,可以设置多个,用英文状态下逗号隔开
hosts allow = 192.168.21.129 #允许进行数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开
hosts deny = 192.168.21.254 #禁止数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开
:wq! #保存,退出
5、创建用户认证文件
vi /etc/rsync.pass #配置文件,添加以下内容
复制代码
代码如下:
home_www._user:123456 #格式,用户名:密码,可以设置多个,每行一个用户名:密码
:wq! #保存退出
6、设置文件权限
复制代码
代码如下:
chmod 600 /etc/rsyncd.conf #设置文件所有者读取、写入权限/ppchmod 600 /etc/rsync.pass #设置文件所有者读取、写入权限
7、启动rsync
复制代码
代码如下:
/etc/init.d/xinetd start #启动
service xinetd stop #停止
service xinetd restart #重新启动
第二部分:在源服务器192.168.21.129上操作
一、安装Rsync客户端
1、关闭SELINUX
vi /etc/selinux/config #防火墙配置文件
复制代码
代码如下:
#SELINUX=enforcing #注释掉
#SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加
:wq! 保存退出
setenforce 0 立即生效
2、开启防火墙tcp 873端口(Rsync默认端口,做为客户端的Rsync可以不用开启873端口)
vi /etc/sysconfig/iptables #防火墙配置文件
复制代码
代码如下:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT
:wq! 保存退出
/etc/init.d/iptables restart #最后重启防火墙使配置生效
3、安装Rsync客户端端软件
复制代码
代码如下:
whereis rsync #查看系统是否已安装rsync,出现下面的提示,说明已经安装
rsync: /usr/bin/rsync /usr/share/man/man1/rsync.1.gz
yum install xinetd #只安装xinetd即可,CentOS中是以xinetd来管理rsync服务的
yum install rsync xinetd #如果默认没有rsync,运行此命令进行安装rsync和xinetd
vi /etc/xinetd.d/rsync #配置文件,设置开机启动rsync
disable = no #修改为no
/etc/init.d/xinetd start #启动(CentOS中是以xinetd来管理rsync服务的)
4、创建认证密码文件
vi /etc/passwd.txt #文件,添加以下内容
复制代码
代码如下:
123456 #密码
:wq! 保存退出
chmod 600 /etc/passwd.txt #设置文件权限,只设置文件所有者具有读取、写入权限即可
5、测试源服务器192.168.21.129到两台目标服务器192.168.21.127,192.168.21.128之间的数据同步
复制代码
代码如下:
mkdir /home/www./ceshi #在源服务器上创建测试文件夹,然后在源服务器运行下面2行命令
rsync -avH --port=873 --progress --delete /home/www./ a href="mailto:home_www._user@192.168.21.127::home_www."home_www._user@192.168.21.127::home_www./a --password-file=/etc/passwd.txt
rsync -avH --port=873 --progress --delete /home/www./ a href="mailto:home_www._user@192.168.21.128::home_www."home_www._user@192.168.21.128::home_www./a --password-file=/etc/passwd.txt
运行完成后,分别在两台目标服务器192.168.21.127,192.168.21.128上查看,在/home/www.目录下有ceshi文件夹,说明数据同步成功。
系统运维 www. 温馨提醒:qihang01原创内容 版权所有,转载请注明出处及原文链接
二、安装sersync工具,实时触发rsync进行同步
1、查看服务器内核是否支持inotify
ll /proc/sys/fs/inotify #列出文件目录,出现下面的内容,说明服务器内核支持inotify
复制代码
代码如下:
-rw-r--r-- 1 root root 0 Mar 7 02:17 max_queued_events
-rw-r--r-- 1 root root 0 Mar 7 02:17 max_user_instances
-rw-r--r-- 1 root root 0 Mar 7 02:17 max_user_watches
备注:Linux下支持inotify的内核最小为2.6.13,可以输入命令:uname -a查看内核
CentOS 5.X 内核为2.6.18,默认已经支持inotify
2、修改inotify默认参数(inotify默认内核参数值太小)
查看系统默认参数值:
sysctl -a | grep max_queued_events
结果是:fs.inotify.max_queued_events = 16384
sysctl -a | grep max_user_watches
结果是:fs.inotify.max_user_watches = 8192
sysctl -a | grep max_user_instances
结果是:fs.inotify.max_user_instances = 128
修改参数:
复制代码
代码如下:
sysctl -w fs.inotify.max_queued_events="99999999"
sysctl -w fs.inotify.max_user_watches="99999999"
sysctl -w fs.inotify.max_user_instances="65535"
参数说明:
max_queued_events:
inotify队列最大长度,如果值太小,会出现"** Event Queue Overflow **"错误,导致监控文件不准确
max_user_watches:
要同步的文件包含多少目录,可以用:find /home/www. -type d | wc -l 统计,必须保证max_user_watches值大于统计结果(这里/home/www.为同步文件目录)
max_user_instances:
每个用户创建inotify实例最大值
3、安装sersync
***隐藏网址***
上传sersync2.5.4_64bit_binary_stable_final.tar.gz到/usr/local/src目录下
复制代码
代码如下:
cd /usr/local/src
tar zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz #解压
mv GNU-Linux-x86 /usr/local/sersync #移动目录到/usr/local/sersync
4、配置sersync
复制代码
代码如下:
cd /usr/local/sersync #进入sersync安装目录
cp confxml.xml confxml.xml-bak #备份原文件
vi confxml.xml ,修改下面的代码
复制代码
代码如下:
?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="true"/
moveFrom start="true"/
moveTo start="true"/
attrib start="false"/
modify start="false"/
/inotify
sersync
localpath watch="/home/www.jb51.com"
remote ip="192.168.21.127" name="home_www."/
remote ip="192.168.21.128" name="home_www."/
!--remote ip="192.168.8.40" name="tongbu"/--
/localpath
rsync
commonParams params="-artuz"/
auth start="true" users="home_www._user" 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.sh" timeToExecute="60"/!--default every 60mins execute once--
crontab start="true" schedule="600"!--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"/
***隐藏网址***
regexurl regex="false" match="cms.xoyo.com/site(*).xoyo.com/images"/
/localpath
/plugin
/head
:wq! #保存退出
参数说明:
复制代码
代码如下:
localpath watch="/home/www.":#源服务器同步目录
192.168.21.127,192.168.21.128:#目标服务器IP地址
name="home_www.": #目标服务器rsync同步目录模块名称
users="home_www._user": #目标服务器rsync同步用户名
passwordfile="/etc/passwd.txt": #目标服务器rsync同步用户的密码在源服务器的存放路径
remote ip="192.168.21.127": #目标服务器ip,每行一个
remote ip="192.168.21.128": #目标服务器ip,每行一个
failLog path="/tmp/rsync_fail_log.sh" #脚本运行失败日志记录
start="true" #设置为true,每隔600分钟执行一次全盘同步
5、设置sersync监控开机自动执行
vi /etc/rc.d/rc.local #,在最后添加一行
复制代码
代码如下:
/usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/confxml.xml #设置开机自动运行脚本
:wq! #保存退出
6、添加脚本监控sersync是否正常运行
vi /home/crontab/check_sersync.sh ,添加以下代码
复制代码
代码如下:
#!/bin/sh
sersync="/usr/local/sersync/sersync2"
confxml="/usr/local/sersync/confxml.xml"
status=$(ps aux |grep ’sersync2’|grep -v ’grep’|wc -l)
if ;
then
$sersync -d -r -o $confxml
else
exit 0;
fi
复制代码
代码如下:
:wq! #保存退出
chmod +x /home/crontab/check_sersync.sh #添加脚本执行权限
vi /etc/crontab #,在最后添加下面一行
*/5 * * * * root /home/crontab/check_sersync.sh /dev/null 21 #每隔5分钟执行一次脚本
service crond reload #重新加载服务
6、测试sersync实时触发rsync同步脚本是否正常运行
在源服务器192.168.21.129上创建文件inotify_rsync_ceshi
复制代码
代码如下:
mkdir /home/www./inotify_rsync_ceshi
重新启动源服务器:192.168.21.129
等系统启动之后,查看两台目标服务器192.168.21.127,192.168.21.128的/home/www.下是否有inotify_rsync_ceshi文件夹
然后再在源服务器192.168.21.129创建文件夹inotify_rsync_ceshi_new
复制代码
代码如下:
mkdir /home/www./inotify_rsync_ceshi_new
继续查看两台目标服务器192.168.21.127,192.168.21.128的/home/www.下是否有inotify_rsync_ceshi_new文件夹
如果以上测试都通过,说明inotify实时触发rsync同步脚本运行正常。
至此,Linux下Rsync+sersync实现数据实时同步完成。
扩展阅读:
rsync参数
-v, --verbose 详细模式输出
-q, --quiet 精简输出模式
-c, --checksum 打开校验开关,强制对文件传输进行校验
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, --recursive 对子目录以递归模式处理
-R, --relative 使用相对路径信息
-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。
--backup-dir 将备份文件(如~filename)存放在在目录下。
-suffix=SUFFIX 定义备份文件前缀
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
-l, --links 保留软链结
-L, --copy-links 想对待常规文件一样处理软链结
--copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结
--safe-links 忽略指向SRC路径目录树以外的链结
-H, --hard-links 保留硬链结
-p, --perms 保持文件权限
-o, --owner 保持文件属主信息
-g, --group 保持文件属组信息
-D, --devices 保持设备文件信息
-t, --times 保持文件时间信息
-S, --sparse 对稀疏文件进行特殊处理以节省DST的空间
-n, --dry-run现实哪些文件将被传输
-W, --whole-file 拷贝文件,不进行增量检测
-x, --one-file-system 不要跨越文件系统边界
-B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节
-e, --rsh=COMMAND 指定使用rsh、ssh方式进行数据同步
--rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息
-C, --cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件
--existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件
--delete 删除那些DST中SRC没有的文件
--delete-excluded 同样删除接收端那些被该选项指定排除的文件
--delete-after 传输结束以后再删除
--ignore-errors 及时出现IO错误也进行删除
--max-delete=NUM 最多删除NUM个文件
--partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
--force 强制删除目录,即使不为空
--numeric-ids 不将数字的用户和组ID匹配为用户名和组名
--timeout=TIME IP超时时间,单位为秒
-I, --ignore-times 不跳过那些有同样的时间和长度的文件
--size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
--modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0
-T --temp-dir=DIR 在DIR中创建临时文件
--compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份
-P 等同于 --partial
--progress 显示备份过程
-z, --compress 对备份的文件在传输时进行压缩处理
--exclude=PATTERN 指定排除不需要传输的文件模式
--include=PATTERN 指定不排除而需要传输的文件模式
--exclude-from=FILE 排除FILE中指定模式的文件
--include-from=FILE 不排除FILE指定模式匹配的文件
--version 打印版本信息
--address 绑定到特定的地址
--config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件
--port=PORT 指定其他的rsync服务端口
--blocking-io 对远程shell使用阻塞IO
-stats 给出某些文件的传输状态
--progress 在传输时现实传输过程
--log-format=formAT 指定日志文件格式
--password-file=FILE 从FILE中得到密码
--bwlimit=KBPS 限制I/O带宽,KBytes per second
-h, --help 显示帮助信息
Ubuntu Server Rsync服务端与Windows cwRsync客户端实现数据同步配置教程
说明:
1、Rsync服务端
系统:Ubuntu Server 11.10
IP地址:192.168.21.168
数据存放目录:/home/mysql_data
2、cwRsync客户端
系统:Windows Server 2003
IP地址:192.168.21.130
同步的目录:D:/mysql_data
实现目的:
cwRsync客户端每天凌晨3:00钟自动同步Rsync服务端/home/mysql_data目录中的数据到D:/mysql_data目录
一、Rsync服务端配置
1、开启防火墙tcp 873端口(Rsync默认端口)
说明:Ubuntu默认安装是没有开启任何防火墙的,为了服务器的安全,建议大家安装启用防火墙设置,这里推荐使用iptables防火墙。
whereis iptables #查看系统是否安装防火墙
iptables: /sbin/iptables /usr/share/iptables /usr/share/man/man8/iptables.8.gz #表示已经安装iptables防火墙
apt-get install iptables #如果默认没有安装,请运行此命令安装防火墙
iptables -L #查看防火墙配置信息,显示如下:
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
nano /etc/iptables.default.rules #设置防火墙规则,添加以下内容
##################################################################################################
*filter
# Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn’t use lo0
-A INPUT -i lo -j ACCEPT
# Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allows all outbound traffic
# You could modify this to only allow certain traffic
-A OUTPUT -j ACCEPT
# Allows HTTP and MySQLconnections from anywhere (the normal ports for websites)
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 3306 -j ACCEPT
-A INPUT -p tcp --dport 873 -j ACCEPT
# Allows SSH connections for script kiddies
# THE -dport NUMBER IS THE SAME ONE YOU SET UP IN THE SSHD_CONFIG FILE
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
# Now you should read up on iptables rules and consider whether ssh access
# for everyone is really desired. Most likely you will only allow access from certain IPs.
# Allow ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
# log iptables denied calls (access via ’dmesg’ command)
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
# Reject all other inbound - default deny unless explicitly allowed policy:
-A INPUT -j REJECT
-A FORWARD -j REJECT
COMMIT
##################################################################################################
ctrl+o #保存
ctrl+x #退出
备注:873是Rsync端口
iptables-restore /etc/iptables.default.rules #使防火墙规则生效
nano /etc/network/if-pre-up.d/iptables #创建文件,添加以下内容,使防火墙开机启动
##########################################################
#!/bin/bash
/sbin/iptables-restore /etc/iptables.default.rules
##########################################################
chmod +x /etc/network/if-pre-up.d/iptables #添加执行权限
2、安装Rsync服务端软件
whereis rsync #查看系统是否已安装rsync,出现下面的提示,说明已经安装
rsync: /usr/bin/rsync /usr/share/man/man1/rsync.1.gz
apt-get install rsync #如果没有安装,请执行这行命令来安装rsync
nano /etc/default/rsync #配置文件
RSYNC_ENABLE=true #把false改为true,设置开机启动rsync
ctrl+o #保存
ctrl+x #退出
3、创建rsyncd.conf配置文件
nano /etc/rsyncd.conf #创建配置文件,添加以下代码
log file = /var/log/rsyncd.log #日志文件位置,启动rsync后自动产生这个文件,无需提前创建。
#自定义名称
path = /home/mysql_data #Rsync服务端数据目录路径
comment = MySQL_Backup #模块名称与自定义名称相同
uid = root #设置rsync运行权限为root
gid = root #设置rsync运行权限为root
port=873 #默认端口
read only = no #设置为no,cwRsync客户端可上传文件,yes只读
write only = no #设置为no,cwRsync客户端可下载文件,yes不能下载
auth users = mysqlbakuser #执行数据同步的用户名,可以设置多个,用英文状态下逗号隔开
secrets file = /etc/rsync.pass #用户认证配置文件,里面保存用户名称和密码,后面会创建这个文件
hosts allow = 192.168.21.130 #允许进行数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开
hosts deny = 192.168.21.254 #禁止数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开
list = yes #显示Rsync服务端资源列表
ctrl+o #保存
ctrl+x #退出
4、创建用户认证文件
nano /etc/rsync.pass #配置文件,添加以下内容
mysqlbakuser:123456 #格式,用户名:密码,可以设置多个,每行一个用户名:密码
ctrl+o #保存
ctrl+x #退出
5、设置文件权限
chmod 600 /etc/rsyncd.conf #设置文件所有者读取、写入权限
chmod 600 /etc/rsync.pass #设置文件所有者读取、写入权限
6、启动rsync
/etc/init.d/rsync start #启动
service rsync stop #停止
service rsync restart #重新启动
二、cwRsync客户端设置
1、下载cwRsync客户端软件
***隐藏网址***
2、安装cwRsync客户端
解压cwRsync_4.0.3_Installer.zip 双击打开cwRsync_4.0.3_Installer.exe
Next 下一步
IAgree 同意安装
Next
默认安装路径 C:/Program Files/cwRsync
Install 安装
Close 安装完成,关闭
3、测试是否与Rsync服务端通信成功
开始-运行-cmd
输入cd C:/Program Files/cwRsync/bin 回车
再输入telnet 192.168.21.168 873 回车
出现下面的界面,说明与Rsync服务端通信成功
备注 C:/Program Files/cwRsync/bin 是指cwRsync程序安装路径
4、cwRsync客户端同步Rsync服务端的数据
开始-运行-cmd,输入cd C:/Program Files/cwRsync/bin 回车
再输入rsync -vzrtopg --progress --delete mysqlbakuser@192.168.21.168::MySQL_Backup /cygdrive/d/mysql_data
输入密码:123456 回车
出现下面的界面,说明数据同步成功
可以打开D:/mysql_data 与Rsync服务端/home/mysql_data目录中的数据对比一下,查看是否相同
相关说明:
d/mysql_data 代表D:/mysql_data
MySQL_Backup 代表/etc/rsyncd.conf文件中自定义的模块名称comment = MySQL_Backup
192.168.21.168 #Rsync服务端IP地址
mysqlbakuser #执行数据同步的用户
-vzrtopg --progress #显示同步过程详细信息
--delete #从cwRsync客户端D:/mysql_data目录中删除与Rsync服务端/home/mysql_data目录中不相同的数据,即保证两边的数据完全一致
三、在cwRsync客户端的任务计划中添加批处理脚本文件,每天凌晨3:00钟自动同步Rsync服务端/home/mysql_data目录中的数据到D:/mysql_data目录
1、打开C:/Program Files/cwRsync/bin目录,新建passwd.txt
输入123456
保存
继续在C:/Program Files/cwRsync/bin目录,新建MySQL_Backup.bat
输入
@echo off
echo.
echo 开始同步数据,请稍等...
echo.
cd C:/Program Files/cwRsync/bin
rsync -vzrtopg --port=873 --progress --delete mysqlbakuser@192.168.21.168::MySQL_Backup /cygdrive/d/mysql_data passwd.txt
echo.
echo 数据同步完成
echo.
最后保存退出
2、添加批处理脚本到Windows任务计划
开始-设置-控制面板-任务计划
打开添加任务计划,下一步
浏览,选择打开C:/Program Files/cwRsync/bin目录里面的MySQL_Backup.bat
执行这个任务:选择每天,下一步
起始时间:3:00
运行这个任务:每天,下一步
输入Windows系统管理员的登录密码,下一步
完成
扩展说明:如果要调整同步的时间,打开任务计划里面的MySQL_Backup
切换到日程安排来选项设置,还可以打开高级来设置每隔几分钟运行一次MySQL_Backup.bat这个脚本
至此,Ubuntu Server Rsync服务端与Windows cwRsync客户端实现数据同步完成
Windows下利用cwRsync批量同步文件
前段时间写了一篇linux下利用rsync批量更新的文章,网游公司windows服务器还是很多的,今天就来讲讲windows下批量更新的方法,windows下同步数据利用cwRsync来完成的
一、系统环境
windows 2003 R2 sp2
更新源服务器:10.8.5.240
目的服务器:10.8.5.2 10.8.5.3 … …
服务端:cwRsyncServer_4.1.0_Installer
客户端:cwRsync_4.1.0_Installer
二、更新源服务器安装配置(rsync服务端)
1、双击cwRsyncServer_4.1.0_Installer.exe然后就一路下一步,安装cwRsync服务端默认有一个管理员账户SvcCWRSYNC,可自行修改
安装完成后,在“服务”里面就可以看到cwRsync对应的服务了,安装完成后需要手动启动该服务
2、修改rsyncd.conf配置文件(C:/Program Files/ICW/rsyncd.conf)
use chroot = false #不使用chroot
strict modes = false #静态模式
hosts allow = * #所有IP均可
log file = rsyncd.log #log文件名,可以指定路径
pid file = rsyncd.pid
port = 8173 #默认端口873
uid = 0 #不指定uid,不加这一行将无法使用任何账户
gid = 0 #不指定gid
max connections = 10 #最大连接数10
# Module definitions
# Remember cygwin naming conventions : c:work becomes /cygwin/c/work
path = /cygdrive/d/www/web_1 #需要备份的路径(D盘www/web_1目录)
read only = false #只读
transfer logging = yes #记录传输日志
ignore errors #忽略无关的IO错误
list = no #不列文件表
hosts allow = 10.8.5.0/255.255.255.0 #允许访问的IP
hosts deny = * #不允许hosts allow以外的任何IP访问
path = /cygdrive/d/www/web_2 #需要备份的路径(D盘www/web_2目录)
read only = false #只读
transfer logging = yes #记录传输日志
ignore errors #忽略无关的IO错误
list = no #不列文件表
hosts allow = 10.8.5.0/255.255.255.0 #允许访问的IP
hosts deny = * #不允许hosts allow以外的任何IP访问
3、配置文件修改完成后,就手动启动RsyncServer服务,netstat -an,看8173端口监听没
三、目的服务器安装配置(rsync客户端)
1、双击cwRsync_4.1.0_Installer.exe,然后一路下一步
2、编写批处理文件定时同步更新
10.8.5.2 (rsync.bat)
@echo off
C:/”Program Files”/cwRsync/bin/rsync.exe -avzP --progress --delete rsync://10.8.5.240:8173/web_1 /cygdrive/d/www/web_1 d:/rsync_%date:~0,10%.log
10.8.5.3 (rsync.bat)
@echo off
C:/”Program Files”/cwRsync/bin/rsync.exe -avzP --progress --delete rsync://10.8.5.240:8173/web_2 /cygdrive/d/www/web_2 d:/rsync_%date:~0,10%.log
或者把C:/”Program Files”/cwRsync/bin/ 加到用户的环境变量中,这样rsync.exe前面就不用加绝对路径了
3、参数说明
-a 参数,相当于-rlptgoD,
-r 是递归
-l 是链接文件,意思是拷贝链接文件;
-p 表示保持文件原有权限;
-t 保持文件原有时间;
-g 保持文件原有用户组;
-o 保持文件原有属主;
-D 相当于块设备文件;
-z 传输时压缩;
-P 传输进度;
-v verbose,详细模式输出;
-u是只同步已经更新的文件,避免没有更新的文件被重复更新一次,不过要注意两者机器时钟的同步;
--progress 显示备份过程;
--delete 删除那些DST中SRC没有的文件,用作同步文件用;
4、设置计划任务
每5分钟同步一次
5、手动测试同步信息
C:/”Program Files”/cwRsync/bin/rsync.exe -avzP --progress --delete rsync://10.8.5.240:8173/web_1 /cygdrive/d/www/web_1

更多文章:
星际争霸2全部免费了吗(《星际争霸2》免费和付费的区别是什么)
2026年10月11日 20:40
aics6下载中文版免费(macbook ps ai软件在哪里下载)
2026年10月11日 09:50
找不到服务器怎么办(为什么打开网站的时候会显示找不到服务器)
2026年10月11日 04:10
怎么安装打印机到笔记本(怎么将新的打印机添加到笔记本电脑中)
2026年10月11日 01:10
惠普打印机m1136驱动程序下载官网(惠普打印机1136型号,怎么下载扫描驱动)
2026年10月11日 00:50





