一、为什么要同步:
防止数据丢失,确保数据有备份,并且实时备份。
二、什么是实时同步
实时同步是当前目录发生变化则会触发一个事件,事件触发后会将变化的目录同步至远程服务器。实时同步可以保证数据的连续性,减少数据的连续性,减少人力维护成本。
三、实时同步工具有哪些
sersync+rsync
sersync和rsync是两种用于文件同步的工具,它们通常一起使用来实现实时的文件同步和备份。
- rsync:
rsync是一个开源的、快速的、多功能的、可实现增量数据传输的命令行工具。它可以在本地或远程主机之间同步文件和目录,支持复制链接、所有权保持、权限保持、时间戳保持等功能。rsync可以通过 SSH 进行加密传输,也可以作为服务运行,通过rsync守护进程进行数据同步。 - sersync:
sersync是一个基于inotify机制的开源工具,它可以监控指定目录中的文件变化(如文件的创建、删除、修改等),并触发rsync命令来同步这些变化到目标服务器。sersync的目的是为了补充rsync的实时同步功能,因为rsync本身是基于周期性轮询的,而sersync可以在文件发生变化时立即响应。
将 sersync 和 rsync 结合使用可以实现高效的实时数据同步解决方案。例如,您可以在一个服务器上使用 sersync 监控重要的数据目录,当检测到文件变化时,它会自动调用 rsync 将变化同步到远程服务器或备份服务器上。
这种组合特别适合需要实时备份或同步大量数据的环境,因为它可以减少不必要的数据传输,并且能够在文件发生变化后立即同步,从而提高数据一致性和安全性。
四、如何配置sersync和rsync
要配置sersync和rsync实现文件同步,您需要分别在两台服务器上进行设置:一台作为sersync主机(通常是要监控的源服务器),另一台作为rsync目标服务器(备份服务器)。
五、实例拓扑图
Linux下rsync+sersync实现数据实时同步
六、在源服务器上安装和配置 sersync
1、关掉防火墙
systemctl stop firewalld
systemctl disable firewalld
2、安装安装 sersync
sersync 可能不在官方软件仓库中,您可能需要从源代码或预编译的二进制文件安装。可以从 sersync 的 GitHub 仓库或相关网站下载。
tar -xzvf sersync2.5.4_64bit_binary_stable_final.tar.gz
mv GNU-Linux-x86/ /usr/local/sersync
ln -s /usr/local/sersync/sersync2 /usr/bin/sersync2
3、查看notify参数并修改(默认值小)
root@ubuntu:~# sysctl -a | grep max_queued_events
fs.inotify.max_queued_events = 327679"
root@ubuntu:~# sysctl -a | grep max_user_instances
fs.inotify.max_user_instances = 128
root@ubuntu:~# sysctl -a | grep max_user_watches
fs.epoll.max_user_watches = 3357081
fs.inotify.max_user_watches = 50000000
修改参数:
root@ubuntu:~# sysctl -w fs.inotify.max_queued_events="99999999"
fs.inotify.max_queued_events = 99999999
root@ubuntu:~# sysctl -w fs.inotify.max_user_watches="99999999"
fs.inotify.max_user_watches = 99999999
root@ubuntu:~# sysctl -w fs.inotify.max_user_instances="65535"
fs.inotify.max_user_instances = 65535
root@ubuntu:~#
root@ubuntu:~# vi /etc/sysctl.conf #最后一行增加以下三行参数
fs.inotify.max_queued_events=99999999
fs.inotify.max_user_watches=99999999
fs.inotify.max_user_instances=65535
三行参数说明:
max_queued_events:inotify:
参数用于设置 inotify 实例事件队列的最大长度。换句话说,它指定了当 inotify 实例被监视的文件或目录产生事件时,
可以排队等待处理的最大事件数。如果超过这个数值,新的事件可能会被丢弃,或者更准确地说,不会添加到队列中,
导致监控者无法接收到这些事件的通知。
这个参数对于调节 inotify 实例的行为是很重要的,因为它可以帮助用户平衡事件处理的效率和资源的使用。
如果设置得太小,可能会丢失事件;如果设置得太大,可能会消耗过多的内存资源
简单的说:实例事件队列最大长度,值太小,少了事件,会出现"** Event Queue Overflow **"错误,导致监控文件不准确
max_user_watches:
max_user_watches 是 Linux 内核中的 inotify 监控机制的另一个参数。这个参数限制了每个用户可以监视的文件系统数量。
在 inotify 中,每个文件或目录的监视都是通过一个 “watch” 来实现的。
max_user_watches 参数设置了单个用户可以同时设置的 watch 的最大数量。如果超过这个限制,尝试添加新的 watch 将会失败。
这个限制是为了防止单个用户占用过多的系统资源,因为每个 watch 都会消耗一些内存资源。如果系统中有很多用户都在使用 inotify,
那么这个限制可以确保公平地分配资源。
查看同步目录,使用:find /data/ -type d | wc -l 统计,必须确保max_user_watches值大于统计结果
root@ubuntu:~# find /data/ -type d | wc -l
5831
max_user_instances:
在 inotify 中,每个实例都是一个独立的监控机制,它可以包含多个 watch(即对文件或目录的监控)。
max_user_instances 参数决定了单个用户可以同时运行的 inotify 实例的数量。如果一个用户尝试创建的实例数量超过了这个限制,
那么创建新实例的尝试将会失败。
这个限制是为了防止系统资源被过度消耗,因为每个 inotify 实例都会占用一定的内存和其他系统资源。
通过限制实例数量,系统可以控制资源的分配,确保所有用户之间资源的公平使用
4、配置**sersync**
编辑sersync的confxml.xml配置文件,位于/usr/local/sersync目录下。设置要监控的目录、rsync目标服务器信息、以及同步选项。
<sersync>
<localpath watch="/home">
<remote ip="192.168.14.212" name="home"/>
</localpath>
<rsync>
<commonParams params="-artuz"/>
<auth start="true" users="user" passwordfile="/etc/rsyncd.secrets"/>
<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>
在这个配置中,是要监控的本地目录/home,remote部分指定了目标服务器的 IP 和远程目录。rsync部分定义了rsync的通用参数和用户参数,以及要排除的文件。
4、启动**sersync**
配置完成后,您可以启动sersync服务,执行
sersync2 -r -d -o /usr/local/sersync/confxml.xml
七、在目标服务器上安装和配置 rsync
1、关掉防火墙
systemctl stop firewalld
systemctl disable firewalld
2、安装**rsync**
在大多数 Linux 发行版中,rsync已经预装了。如果没有,您可以通过包管理器安装它
yum install rsync
3、配置rsync
如果您使用的是rsync服务器模式,您需要编辑/etc/rsyncd.conf或创建一个新的配置文件,定义模块和同步选项。
[home]
path = /home/
use chroot = no
max connections=20
lock file = /var/lock/rsyncd
log file = /var/log/rsync.log
read only = no
list = yes
uid = root
gid = root
auth users = user
secrets file = /etc/rsyncd.secrets
strict modes = yes
#允许源服务器连接
hosts allow = 192.168.14.211
# hosts deny =
ignore errors = no
ignore nonreadable = yes
transfer logging = no
# log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.
timeout = 600
refuse options = checksum dry-run
dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz
在这个配置中,[remote_directory]是模块名,path是远程目录的路径,auth users是允许访问的用户,secrets file是包含密码的文件,hosts allow允许连接的客户端主机。
4、创建密码文件
创建一个密码文件/etc/rsyncd.secrets,其中包含auth users定义的用户的密码。
user:password
确保密码文件的权限非常严格,例如600,只有所有者可以读写。
chmod 600 /etc/rsyncd.secrets
5、启动rsync守护进程
在目标服务器上启动rsync守护进程。在 CentOS 上,这通常通过systemctl命令完成。
systemctl start rsyncd
完成这些步骤后,sersync将监控源服务器上的指定目录,并在检测到文件变化时使用rsync将这些变化同步到目标服务器上。
八、测试同步
请确保您测试同步功能以确保一切正常工作
在源服务器的/home目录下,创建用户目录,新建文件。
useradd -m finemeng.com
cd finemeng.com
touch 1.txt
在目标服务器上是不是有实时同步显示