linux文件同步(sersync+rsync)
前期准备,我的是三台服务器,内网ip分别为
master:192.168.0.1
slave1:192.168.0.2
slave2:192.168.0.3
说明:
Rsync可以远程同步,支持本地复制,实时同步需要借助第三方工具sersync/inotify
Sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或者某一个目录的名字,然后使用rsync同步的时候
Inotify只能记录下被监听的目录发生了变化(增,删,改)并没有把具体是哪个文件或者哪个目录发生了变化记录下来
步骤:
一、Slave服务器配置
1.在Slave服务器上安装Rsync
yum -y install rsync
2.在Slave服务器上配置rsync
vim /etc/rsyncd.conf
uid = root
gid = root
use chroot = no
max connections = 36000
timeout = 600
pid file =/var/run/rsyncd.pid
lock file =/var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors = no
read only = no
list = no
hosts allow = 192.168.0.1
hosts deny = *
auth users = rsync_backup
secrets file =/etc/rsync.password
[backup]
path = /backup/sersync/
# 配置注解:
# uid:指定传输文件时的用户
# gid:指定传输文件时的组
# use chroot true|false:表示在传输文件前首先chroot到path参数所指定的目录下,可以实现安全防护,但缺点是需要以root权限,并且不能备份指向外部的符号连接所指向的目录文件,默认情况下chroot值为true
# max connections:指定最大的连接数,默认是0,即没有限制
# read only ture|false:如果为true,则不能上传到该模块指定的路径下
# list:表示当用户查询该服务器上的可用模块时,该模块是否被列出,true为列出,false为隐藏
# auth users:指定传输时要使用的用户名,根据自己兴趣修改
# secrets file:指定密码文件,注意该密码文件的权限一定要是600,格式:用户名:密码
# hosts allow:是允许同步的主机,可以是IP或者网段,如果是多个中间用空格隔开
# hosts deny:拒绝同步的主机,可以是IP或者网段,如果是多个中间用空格隔开
# [backup]:同步的模块名,根据自己模块修改成自己想要的
# path:同步的路径
3.创建同步的用户与密码的文件
即rsyncd.conf
中secrets file
这个配置选项中的文件/etc/rsync.passwd
,同进要设置rsync.password
的权限为600
[root@slave ~] echo "rsync_backup:123456" >/etc/rsync.password
[root@slave ~] chmod 600 /etc/rsync.password
4.创建同步的目录
即rsyncd.conf中path配置选项中的目录
[root@slave ~] mkdir -p /backup/sersync
5.启动守护进程,并写入开机自启动
[root@slave ~] rsync --daemon --config=/etc/rsyncd.conf
[root@slave ~] echo "rsync --daemon --config=/etc/rsyncd.conf" >>/etc/rc.local
[root@slave ~] chmod +x /etc/rc.local
[root@slave ~] tail -1 /etc/rc.local
[root@slave ~] reboot
[root@slave ~] systemctl status rc-local.service
[root@slave ~] netstat -ntlp | grep rsync
二、Master服务器配置
1.在Master安装rsync
[root@master ~] yum -y install rsync
2.首先创建master端的密码验证文件,同进要设置rsync.password的权限为600
[root@master ~] echo 50000000 >/proc/sys/fs/inotify/max_user_watches
[root@master ~] echo 327679 >/proc/sys/fs/inotify/max_queued_events
[root@master ~] echo "123456" >/etc/rsync.password
[root@master ~] chmod 600 /etc/rsync.password
3.测试rsync
[root@master ~] rsync -avzP /var/ftp/pub/sersync/ rsync_backup@192.168.0.1::backup --password-file=/etc/rsync.password
4.部署sersync,下载地址
[root@master ~] mkdir /usr/local/sersync/
[root@master ~] mkdir /usr/local/sersync/bin
[root@master ~] mkdir /usr/local/sersync/conf
[root@master ~] mkdir /usr/local/sersync/logs
[root@master sersync] cd /usr/local/sersync
[root@master sersync] wget https://raw.githubusercontent.com/orangle/sersync/master/release/sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@master sersync] tar xvf sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@master sersync] mv GNU-Linux-x86/sersync2 ./bin/sersync
[root@master sersync] mv GNU-Linux-x86/confxml.xml ./conf/
[root@master sersync] cd conf/
[root@master conf] cp confxml.xml confxml.xml.bak
[root@master sersync]# tree sersync
5.修改config.xml文件,建议拷贝一份在修改,需要把监控的目录数据同步到master指定的模块下,前面写了slave的模块名是backup对应的目录是:/backup/
[root@master conf] cd ..
[root@master sersync] vim conf/confxml.xml
# 如果系统linux7以上,需要将xfs="false"修改成xfs="true",否则sersync无法递归监控
<fileSystem xfs="true"/>
<localpath watch="/var/ftp/pub/sersync">
<remote ip="192.168.0.2" name="backup"/>
<remote ip="192.168.0.3" name="backup"/>
</localpath>
# 指定rsync的虚拟用户和密码文件路径
<rsync>
<commonParams params="-artuz"/>
<auth start="true" users="rsync_backup" passwordfile="/etc/rsync.password"/><!-- start要改成true -->
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
[root@master sersync] echo "export PATH=$PATH:/usr/local/sersync/bin/" >>/etc/profile
[root@master sersync] source /etc/profile
[root@master sersync] which sersync
6.启动sersync
[root@master sersync] sersync -d -r -o /usr/local/sersync/conf/confxml.xml
# 参数注解:
# -d:启用守护进程模式
# -r:在监控前,将监控目录与远程主机用rsync命令推送一遍
# -o:指定配置文件,默认使用confxml.xml文件
7.测试同步,在master服务器需要同步的目录下创建文件及目录
[root@master sersync] cd /var/ftp/pub/sersync/
[root@master sersync] touch {1..100}
[root@master sersync] mkdir note
[root@slave backup] ls
8.加入开机启动项,重启服务器查看
[root@master ~] ln -s /usr/local/sersync/bin/sersync /usr/local/bin/sersync
[root@master ~] echo "sersync -d -r -o /usr/local/sersync/conf/confxml.xml" >>/etc/rc.local
[root@master ~] chmod +x /etc/rc.d/rc.local
[root@master ~] systemctl status rc-local.service
[root@master ~] tail -1 /etc/rc.local
[root@slave ~] reboot
9.加入开机启动后测试同步,在master增加、删除、修改文件及目录,查看slave是否实时同步
[root@master sersync] cd /var/ftp/pub/sersync/
[root@master sersync] touch {1..100}
[root@master sersync] mkdir note
[root@master sersync] rm -rf ./*
[root@slave backup] ls
如果需要过滤文件,把start改成true,下面配置需要过滤的东西就可以了
<filter start="true">
<exclude expression="^log/*"></exclude>
<exclude expression="(.*)\.svn"></exclude>
<exclude expression="(.*)\.gz"></exclude>
<exclude expression="^info/*"></exclude>
<exclude expression="^static/*"></exclude>
</filter>
分类:
linux
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤