Linxu服务器文件双向同步 rsync+sersync 详细讲解
文章目录
- Linxu服务器文件双向同步 rsync+sersync
- 基础信息
- 安装
- rsync
- 安装
- 配置
- 根据配置文件创建相应的目录、文件、防火墙规则
- 创建需要同步的目录
- 创建同步用户
- 防火墙
- 启动rsyncd服务
- 测试
- 异常处理
- sersync
- 安装
- sersync配置
- test21配置
- test22配置
- sersync启动
- test21启动
- test22启动
- 测试
- 新增文件
- 修改内容
- 删除文件
Linxu服务器文件双向同步 rsync+sersync
基础信息
系统:Centos7.8
- 服务器信息
服务器 | IP |
---|---|
test21 | 10.8.10.21 |
test22 | 10.8.10.22 |
- 软件版本信息
软件包 | 版本 |
---|---|
rsync | |
sersync |
Rsync安装包下载地址:https://github.com/WayneD/rsync/releases
sersync下载地址:https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gz
安装
rsync
安装
查看是否已经安装
rpm -qa | grep rsync
安装
yum -y install rsync
配置
- 修改
test21
服务器文件/etc/rsyncd.conf
# /etc/rsyncd: configuration file for rsync daemon mode# See rsyncd.conf man page for more options.# configuration example:uid = root # 指定运行rsync daemon的用户
gid = root # 指定运行rsync daemon的组
use chroot = no
address = 10.8.10.21 # 指定监听地址
port = 873 # 默认监听端口
max connections = 0 #最大连接数,0为无限制
pid file = /var/run/rsyncd.pid # 指定pid文件
log file = /var/log/rsyncd.log # 指定日志文件
exclude = lost+found/ # 指定不同步的目录
ignore errors
#transfer logging = yes
#timeout = 900
#ignore nonreadable = yes
#dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2# [ftp]
# path = /home/ftp
# comment = ftp export area
[update] # update模块
path = /root/updatedir # update模块需要同步目录
comment = test rsync + sersync # update模块的简要说明
read only = no # 是否只读
list = no # 当用户查询该服务器上的可用模块时,是否列出该模块
auth users = rsync_daemon # 同步文件使用到的虚拟用户
secrets file = /etc/rsync_update.passwd # 指定该虚拟用户对应的密码文件,该文件权限为(400)
hosts allow = 10.8.10.22 # 指定可以连接该模块的主机(x.x.x.x x.x.x.x/x)
- 修改
test22
服务器文件/etc/rsyncd.conf
# /etc/rsyncd: configuration file for rsync daemon mode# See rsyncd.conf man page for more options.# configuration example:uid = root # 指定运行rsync daemon的用户
gid = root # 指定运行rsync daemon的组
use chroot = no
address = 10.8.10.22 # 指定监听地址
port = 873 # 默认监听端口
max connections = 0 #最大连接数,0为无限制
pid file = /var/run/rsyncd.pid # 指定pid文件
log file = /var/log/rsyncd.log # 指定日志文件
exclude = lost+found/ # 指定不同步的目录
ignore errors
#transfer logging = yes
#timeout = 900
#ignore nonreadable = yes
#dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2# [ftp]
# path = /home/ftp
# comment = ftp export area
[update] # update模块
path = /root/updatedir # update模块需要同步目录
comment = test rsync + sersync # update模块的简要说明
read only = no # 是否只读
list = no # 当用户查询该服务器上的可用模块时,是否列出该模块
auth users = rsync_daemon # 同步文件使用到的虚拟用户
secrets file = /etc/rsync_update.passwd # 指定该虚拟用户对应的密码文件,该文件权限为(400)
hosts allow = 10.8.10.21 # 指定可以连接该模块的主机(x.x.x.x x.x.x.x/x)
根据配置文件创建相应的目录、文件、防火墙规则
创建需要同步的目录
在两个服务器上分别创建需要同步的目录
[root@test21 ~]# mkdir /root/updatedir
[root@test22 ~]# mkdir /root/updatedir
创建同步用户
创建虚拟用户rsync_daemon
使用的密码文件/etc/rsync_update.passwd
该文件的权限必须为400
[root@test21 ~]# echo "rsync_daemon:123456789" > /etc/rsync_update.passwd
[root@test21 updatedir]# chmod 400 /etc/rsync_update.passwd
[root@test22 ~]# echo "rsync_daemon:123456789" > /etc/rsync_update.passwd
[root@test22 updatedir]# chmod 400 /etc/rsync_update.passwd
防火墙
这里我是关闭了防火墙,如果防火墙开启,防火墙规则要将873端口加入
启动rsyncd服务
[root@test21 ~]# systemctl start rsyncd
[root@test22 ~]# systemctl start rsyncd
- 查看端口
[root@test21 /]# ss -antuple | grep 873
tcp LISTEN 0 5 10.8.10.21:873 *:* users:(("rsync",pid=14221,fd=3)) ino:72483 sk:ffff8800b7d75d00 <->[root@test22 ~]# ss -antuple | grep 873
tcp LISTEN 0 5 10.8.10.22:873 *:* users:(("rsync",pid=1735,fd=3)) ino:29740 sk:ffff880226eb87c0 <->
测试
test21
向test22
同步
[root@test21 updatedir]# ls
[root@test21 updatedir]# touch file{1..5}
[root@test21 updatedir]# rsync -av /root/updatedir/ rsync_daemon@10.8.10.22::update
Password:
sending incremental file list
./
file1
file2
file3
file4
file5sent 314 bytes received 114 bytes 171.20 bytes/sec
total size is 0 speedup is 0.00
test22
服务器查看
[root@test22 updatedir]# ls
file1 file2 file3 file4 file5
test22
向test21
同步
# 创建file6 - file10 空文件
[root@test22 updatedir]# touch file{6..10}
# 文件同步
[root@test22 updatedir]# rsync -av /root/updatedir/ rsync_daemon@10.8.10.21::update
Password:
sending incremental file list
./
file10
file6
file7
file8
file9sent 388 bytes received 114 bytes 111.56 bytes/sec
total size is 0 speedup is 0.00
test21
服务器查看
[root@test21 updatedir]# ls
file1 file10 file2 file3 file4 file5 file6 file7 file8 file9
rsync
数据同步成功,我们可以设置linxu定时任务crontab
每隔一段时间自动双向同步文件。
异常处理
- 提示权限不足
test22
发送到test21
可以正常发送,test21
发送到test22
无法发送
[root@test21 updatedir]# rsync -av /root/updatedir/ rsync_daemon@10.8.10.22::update
Password:
sending incremental file list
rsync: failed to set times on "." (in update): Permission denied (13)
./
file1
file2
file3
file4
file5
rsync: mkstemp ".file1.PRynLL" (in update) failed: Permission denied (13)
rsync: mkstemp ".file2.L3Zgd2" (in update) failed: Permission denied (13)
rsync: mkstemp ".file3.t4KaFi" (in update) failed: Permission denied (13)
rsync: mkstemp ".file4.PZF46y" (in update) failed: Permission denied (13)
rsync: mkstemp ".file5.NOJYyP" (in update) failed: Permission denied (13)
报错后查看网上各种资料描述,说是目录权限改为755
等,试了之后都不行
随后又增加了一台服务器做测试,发现新增的也不行
[root@test22 etc]# rsync -av /root/updatedir/ root@10.8.10.20::update
Password:
sending incremental file list
rsync: failed to set times on "." (in update): Permission denied (13)
rsync: recv_generator: failed to stat "123" (in update): Permission denied (13)
./sent 59 bytes received 173 bytes 51.56 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1179) [sender=3.1.2]
后来在stackoverflow
发现有大佬提示说selinux
问题导致,我们查看服务器配置
参考文献:https://stackoverflow.com/questions/11039559/rsync-mkstemp-failed-permission-denied-13
[root@test21 etc]# getenforce
Permissive
[root@test20 updatedir]# getenforce
Enforcing
[root@test22 etc]# getenforce
Enforcing
发现的确21和22,20配置不同
修改22,20配置
[root@test20 updatedir]# setenforce 0
[root@test20 updatedir]# getenforce
Permissive[root@test22 etc]# setenforce 0
[root@test22 etc]# getenforce
Permissive
setenforce 0
为临时修改,永久修改vim /etc/sysconfig/selinux
SELINUX=enforcing
修改为
SELINUX=disable 或者 SELINUX=permissive
再次执行发现可以同步成功
[root@test22 etc]# rsync -av /root/updatedir/ root@10.8.10.20::update
Password:
sending incremental file list
./
123sent 102 bytes received 38 bytes 40.00 bytes/sec
total size is 0 speedup is 0.00[root@test22 etc]# rsync -av /root/updatedir/ root@10.8.10.20::update
Password:
sending incremental file list
./
123sent 102 bytes received 38 bytes 40.00 bytes/sec
total size is 0 speedup is 0.00
sersync
上面安装完成rsync
,我们只能通过定时任务触发文件同步,sersync
可以对文件的变更进行实时监听,并触发rsync对变更的文件进行实时同步。
安装
下载:[点击下载]
将文件放在两台服务器中,并解压
[root@test22 sersync]# ll
总用量 712
-rw-------. 1 root root 727290 11月 10 13:11 sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@test22 sersync]# pwd
/opt/sersync
[root@test22 sersync]# tar -zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz
GNU-Linux-x86/
GNU-Linux-x86/sersync2
GNU-Linux-x86/confxml.xml
[root@test22 sersync]# ls GNU-Linux-x86/
confxml.xml sersync2[root@test21 sersync]# ll
总用量 712
-rw-------. 1 root root 727290 11月 10 13:11 sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@test21 sersync]# pwd
/opt/sersync
[root@test21 sersync]# tar -zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz
GNU-Linux-x86/
GNU-Linux-x86/sersync2
GNU-Linux-x86/confxml.xml
[root@test21 sersync]# ls GNU-Linux-x86/
confxml.xml sersync2
sersync配置
test21配置
内容过多只显示了修改的位置,其他都是默认的
<remote ip="10.8.10.22" name="update"/>
<auth start="true" users="rsync_daemon" passwordfile="/etc/rsync.pas"/>
[root@test21 GNU-Linux-x86]# vim confxml.xml
...
<sersync><localpath watch="/opt/updatedir"><remote ip="10.8.10.22" name="update"/><!--<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_daemon" 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="false" schedule="600"><!--600mins--><crontabfilter start="false"><exclude expression="*.php"></exclude><exclude expression="info/*"></exclude></crontabfilter></crontab><plugin start="false" name="command"/></sersync>
...
- watch 指定了监控的文件目录
- remote ip 指定远程rsync服务监听的ip,
- name 指定了远程rsync服务开启的模块
- start=“true” 说明远程rsync服务开启了用户密码验证
- users 指定了远程rsync服务用户密码验证指定的虚拟用户
- passwordfile 指定了连接远程rsync服务虚拟用户的密码文件,权限需为400,用户自己手动创建
创建密码文件
[root@test21 GNU-Linux-x86]# echo 123456789 > /etc/rsync.pas
[root@test21 GNU-Linux-x86]# chmod 400 /etc/rsync.pas
test22配置
[root@test22 GNU-Linux-x86]# vim confxml.xml
...
<sersync><localpath watch="/opt/updatedir"><remote ip="10.8.10.21" name="update"/><!--<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_daemon" 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="false" schedule="600"><!--600mins--><crontabfilter start="false"><exclude expression="*.php"></exclude><exclude expression="info/*"></exclude></crontabfilter></crontab><plugin start="false" name="command"/></sersync>
...
创建密码文件
[root@test22 GNU-Linux-x86]# echo 123456789 > /etc/rsync.pas
[root@test22 GNU-Linux-x86]# chmod 400 /etc/rsync.pas
sersync启动
test21启动
[root@test21 updatedir]# /opt/sersync/GNU-Linux-x86/sersync2 -d -r -o /opt/sersync/GNU-Linux-x86/confxml.xml
set the system param
execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
parse the command param
option: -d run as a daemon
option: -r rsync all the local files to the remote servers before the sersync work
option: -o config xml name: /opt/sersync/GNU-Linux-x86/confxml.xml
daemon thread num: 10
parse xml config file
host ip : localhost host port: 8008
daemon start,sersync run behind the console
use rsync password-file :
user is rsync_daemon
passwordfile is /etc/rsync.pas
config xml parse success
please set /etc/rsyncd.conf max connections=0 Manually
sersync working thread 12 = 1(primary thread) + 1(fail retry thread) + 10(daemon sub threads)
Max threads numbers is: 22 = 12(Thread pool nums) + 10(Sub threads)
please according your cpu ,use -n param to adjust the cpu rate
------------------------------------------
rsync the directory recursivly to the remote servers once
working please wait...
execute command: cd /root/updatedir && rsync -artuz -R --delete ./ rsync_daemon@10.8.10.22::update --password-file=/etc/rsync.pas >/dev/null 2>&1
run the sersync:
watch path is: /root/updatedir
- -d 以后台daemon的方式运行
- -r 第一次启动时,使用rsync将本地文件全部同步至远程服务器。
- -o 加载配置文件
test22启动
[root@test22 updatedir]# /opt/sersync/GNU-Linux-x86/sersync2 -d -r -o /opt/sersync/GNU-Linux-x86/confxml.xml
set the system param
execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
parse the command param
option: -d run as a daemon
option: -r rsync all the local files to the remote servers before the sersync work
option: -o config xml name: /opt/sersync/GNU-Linux-x86/confxml.xml
daemon thread num: 10
parse xml config file
host ip : localhost host port: 8008
daemon start,sersync run behind the console
use rsync password-file :
user is rsync_daemon
passwordfile is /etc/rsync.pas
config xml parse success
please set /etc/rsyncd.conf max connections=0 Manually
sersync working thread 12 = 1(primary thread) + 1(fail retry thread) + 10(daemon sub threads)
Max threads numbers is: 22 = 12(Thread pool nums) + 10(Sub threads)
please according your cpu ,use -n param to adjust the cpu rate
------------------------------------------
rsync the directory recursivly to the remote servers once
working please wait...
execute command: cd /root/updatedir && rsync -artuz -R --delete ./ rsync_daemon@10.8.10.21::tongbu1 --password-file=/etc/rsync.pas >/dev/null 2>&1
run the sersync:
watch path is: /root/updatedir
测试
新增文件
在test21
上传一个文件,在test22
查看也同时存在
[root@test21 updatedir]# ll
总用量 4
-rw-------. 1 root root 253 11月 10 11:12 1.sh[root@test22 updatedir]# ll
总用量 4
-rw-------. 1 root root 253 11月 10 11:12 1.sh
修改内容
修改test22
[root@test22 updatedir]# ll
总用量 4
-rw-------. 1 root root 253 11月 10 11:12 1.sh
[root@test22 updatedir]# echo 1 > 1.sh
[root@test22 updatedir]# ll
总用量 4
-rw-------. 1 root root 2 11月 10 13:59 1.sh
[root@test22 updatedir]# cat 1.sh
1
查看test21
发现修改的内容同步成功
[root@test21 updatedir]# cat 1.sh
1
删除文件
删除test21
文件
[root@test21 updatedir]# rm 1.sh
rm:是否删除普通文件 "1.sh"?y
[root@test21 updatedir]# ll
总用量 0
在test22
查看发现文件也同步删除
[root@test22 updatedir]# ll
总用量 0
Linxu服务器文件双向同步 rsync+sersync 详细讲解相关推荐
- linux 文件双向同步,Linux文件双向实时同步rsync
在线QQ客服:1922638 专业的SQL Server.MySQL数据库同步软件 echo"/usr/sersync/sersync2-d-o/usr/sersync/confxml.xm ...
- Lsyncd:负载均衡之后,服务器的文件双向同步
场景描述: 在 Linux 服务器上,通过使用 Nginx 实现负载均衡,或者在阿里云直接购买负载均衡,根据配置的转发规则,不同的请求会被转发到其不同的服务器上进行处理.如果遇到需要上传图片的 ...
- Linux系统间文件双向同步搭建Unison版
一.Unison简介 Unison是Windows.Linux以及其他Unix平台下都可以使用的文件同步工具,它能使两个文件夹(本地或网络上的)保持内容的一致.Unison拥有与其它一些同步工具或文件 ...
- CentOS7部署文件双向同步工具(unison)
1,简介 Unison是一款跨windows/Linux/MAC OS平台的文件同步工具,不仅支持本地对本地同步,也支持通过SSH,RSH和Socket等网络协议与完程主机进行同步,最主要的是,Uni ...
- cwRsync文件双向同步问题
cwRsync是一个windows上的文件同步的一个工具,利用cwRsync这个工具可以同步服务器之间的文件.根据项目要求,需要搭建一个文件同步系统.首先在中心服务器上进行cwRsyncServer配 ...
- 服务器文件夹同步到手机,本机文件夹同步到云服务器
本机文件夹同步到云服务器 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. 本节操 ...
- 两服务器文件异地同步,两台群晖之间Moments异地同步方法探索
两台群晖之间Moments异地同步方法探索 2020-07-29 21:12:05 3点赞 6收藏 3评论 手里有一黑一白两台群晖,一直在寻找两台设备之间Moments文件异地同步的方法. 因为群晖里 ...
- 2022渗透测试-文件上传漏洞的详细讲解
目录 1.什么是文件上传漏洞 2.生成图片木马 3.靶场 1.第一关 2.前端检测(第二关) 3.服务器端检测--MIME类型(第二关) 4.服务器端检测--文件类型(第十四关) 5.服务器文件内容验 ...
- Linux下实现文件双向同步
修改的地方时:私钥和公约处. 其次 vi /root/.unison/default.prf 这个文件在这个位置 root = /tmp/test root = ssh://root@10.10.3. ...
最新文章
- visual studio 2017 中默认无法开发 Android 8.0 及以上系统的解决方案
- zynqpl端时钟_第十一章 ZYNQ-MIZ701 PS读写PL端BRAM
- php取数组中连续数,PHP实现求连续子数组最大和问题2种解决方法
- Codeforces Round #540 (Div. 3) A,B,C,D2,E,F1
- linux系统安装与初用
- 为什么都瞧不起QQ邮箱?
- proteus元件图片_proteus元件库
- 太阳能电池最大功率点跟踪MPPT(Maximum Power Point Tracking)技术
- python简单实战项目:《冰与火之歌1-5》角色关系图谱构建——人物关系可视化
- Screw 整合Oracle 报错异常信息oracle.jdbc.driver.T4CConnection.isValid(I)Z
- 记录一次海康威视录像机重置密码的经历
- 【精选】申请免费的服务器
- Couldn't figure out the Java version of /root/.jenkins/jdk/bin/java bash: /root/.jenkins/jdk/bin/jav
- 解构瑞幸小鹿茶:两大战场、一套逻辑、一个梦想
- rust卡领地柜权限_rust一个领地柜有多大范围 | 手游网游页游攻略大全
- css3 animation 箭头向右滚动渐隐
- JiangxiBank
- 基于python+pyqt+halcon实现视觉定位(halcon12.0)【附部分源码】
- 微型计算机原理及应用背景,微型机原理及应用
- Permissions for ‘xxx.pem‘ are too open
热门文章
- python多久可以精通_学Python需要多久能学会?精通Python需要多长时间?
- 计算机技术如何设计酶,百人学者Nature Chemical Biology发文,发现一种设计酶的新方法...
- 智能指针的释放_看完这篇,别再说不会智能指针了
- unique函数_unique函数使用场景(一)
- linux复制文件夹到另一个目录_Linux|一个命令行统计给定目录中有多少个子目录,学浪计划...
- linux命令cp命令行参数,linux命令之cp命令参数及用法详解
- java enum枚举使用例子
- 自学python编程基础科学计算_Python基础与科学计算常用方法
- php 匹配关键字,php获取搜索引擎搜索关键词关键字的正则表达式实现方法
- java 自动编译_Tomcat是否自动编译Java Servlet?