三种实时同步的实战

目录

Inotify-tools+rsync实时复制实战

搭建基础环境

客户端安装Inotify-tools

sersync+rsync进行实时同步(了解即可)

在nfs-31(客户端)上完成

lsyncd+rsync实时同步

在nfs-31(客户端)上完成


Inotify-tools+rsync实时复制实战

搭建基础环境

在rsync-41服务器上搭建rsync服务端

1.恢复了快照,重新安装rsync服务端

2.快速的部署rsyncd服务端
#!/bin/bash
yum install rsync -y

cat > /etc/rsyncd.conf << 'EOF'
uid = www 
gid = www 
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
[data]
comment = chaoge rsync backup!
path = /data
EOF

useradd -u 1000 -M -s /sbin/nologin www
mkdir /data
chown -R www:www /data
echo "rsync_backup:xiaopi666" > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
systemctl restart rsyncd



3.执行脚本部署服务端的rsync
bash instal_rsync.sh


在nfs-31机器上配置服务端
[root@nfs-31 ~]# yum -y install rsync
测试
[root@nfs-31 ~]# export RSYNC_PASSWORD='xiaopi666'
[root@nfs-31 ~]# rsync -az /opt/200M.txt rsync_backup@rsync-41::data
[root@nfs-31 ~]#

客户端安装Inotify-tools

1.进行内核检查
[root@nfs-31 ~]# uname -r
3.10.0-1160.el7.x86_64

还有内核参数检查,
本质上是linux支持inotify机制
在性能还可以优化,支持更高的文件并发数
#检测多少个文件 ,文件内容大量的发生变化,inotify机制能同时检测多少文件 
这个参数的优化,就是调整linux的几个文件
[root@nfs-31 ~]# ls -l /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 root root 0 Sep  9 22:54 max_queued_events
-rw-r--r-- 1 root root 0 Sep  9 22:54 max_user_instances
-rw-r--r-- 1 root root 0 Sep  9 22:54 max_user_watches

系统文件解释
max_user_watches:    设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)
默认只能监控8192个文件

max_user_instances:    设置每个用户可以运行的inotifywait或inotifywatch命令的进程数
默认每个用户可以开启inotify服务128个进程

max_queued_events:    设置inotify实例事件(event)队列可容纳的事件数量
默认监控事件队列长度为16384


inotify-tools 系统自带的比较low的工具

sersync 金山云的运维通过c++开发的工具

lsyncd	最新的,目前有人在用,适用于大规模服务器环境的工具
这些工具就3件事
1.优化,调整了这3文件的参数
2.检测某个目录
3.触发rsync命令

2.安装Inotify-tools工具
需要配置好epel源,才可以安装

[root@nfs-31 ~]# yum install inotify-tools -y
[root@nfs-31 ~]# rpm -ql inotify-tools | head -2
/usr/bin/inotifywait
/usr/bin/inotifywatch

上述操作我们安装好了Inotify-tools软件,生成2个重要的命令

inotifywait:在被监控的目录等待特定文件系统事件(open、close、delete等事件),执行后处于阻塞状态,适合在Shell脚本中使用,是实现监控的关键
Inotifywatch:收集被监控的文件系统使用的统计数据(文件系统事件发生的次数统计)

3.启用inotifywait命令
所有事件,任意的linux命令,只要对该目录的数据
inotifywait -mrq --timefmt '%T' --format "%T----%w----%f		捕获到的事件是:%e" /data

#打开另一个终端进行ls查看时也会被记录,当然创建和删除也要记录
[root@nfs-31 ~]# ls /momo1
[root@nfs-31 ~]# inotifywait -mrq --timefmt '%T' --format "%T----%w----%f捕获到的事件是:%e" /data
23:27:40----/momo1/----捕获到的事件是:OPEN,ISDIR
23:27:40----/momo1/----捕获到的事件是:CLOSE_NOWRITE,CLOSE,ISDIR
[root@nfs-31 ~]# touch /momo1/1.txt
[root@nfs-31 ~]# inotifywait -mrq --timefmt '%T' --format "%T----%w----%f捕获到的事件是:%e" /data
23:28:08----/momo1/----1.txt捕获到的事件是:CREATE
23:28:08----/momo1/----1.txt捕获到的事件是:OPEN
23:28:08----/momo1/----1.txt捕获到的事件是:ATTRIB
23:28:08----/momo1/----1.txt捕获到的事件是:CLOSE_WRITE,CLOSE

4.指定需要检测查看的事件
检测,创建,删除两个时间,只有你执行了对应的linux命令,才会生成日志
[root@nfs-31 ~]#inotifywait -mrq --timefmt '%T' --format "%T----%w------%f 捕获到的事件是:%e" -e  delete,create /data

-m: 即"-monitor"表示始终保持事件监听状态
-r:即"-recursive"表示递归查询目录
-q:即"-guiet"表示打印出监控事件
-e:即"-event",通过此参数可以指定要监控的

其他事件
Events    含义
access    文件或目录被读取
modify    文件或目录内容被修改
attrib    文件或目录属性被改变
close    文件或目录封闭,无论读/写模式
open    文件或目录被打开
moved_to    文件或目录被移动至另外一个目录
move    文件或目录被移动到另一个目录或从另一个目录移动至当前目录
create    文件或目录被创建在当前目录
delete    文件或目录被删除
umount    文件系统被卸载

#inotifywait性能低下,如果创建的事件太多可能会丢数据
该命令,在大量文件生成的时候,需要检测,性能会骤然下降,以及会丢失数据,有部分的文件,会无法被检测到,也就是无法被后续的动作抓取到

适用于数据量不大的情况下,你用也没问题,以及对数据

sersync+rsync进行实时同步(了解即可)

在nfs-31(客户端)上完成

1.下载安装
cd /opt && wget http://test.driverzeng.com/other/sersync2.5.4_64bit_binary_stable_final.tar.gz

2.解压并修改文件名
[root@nfs-31 opt]# tar -xvzf sersync2.5.4_64bit_binary_stable_final.tar.gz
GNU-Linux-x86/
GNU-Linux-x86/sersync2
GNU-Linux-x86/confxml.xml
[root@nfs-31 opt]# mv GNU-Linux-x86 sersync2.5.4

3.修改配置文件,并在创建密码文件后启动

[root@nfs-31 sersync2.5.4]# vim confxml.xml

  <localpath watch="/momo1">
      <remote ip="172.16.1.41" name="momo_data1"/>
      <!--<remote ip="192.168.8.39" name="tongbu"/>-->
      <!--<remote ip="192.168.8.40" name="tongbu"/>-->
  </localpath>
  <rsync>
      <commonParams params="-az"/>
      <auth start="true" users="momo01" passwordfile="/etc/rsync.momo"/>
      <userDefinedPort start="false" port="874"/><!-- port=874 -->
      <timeout start="false" time="100"/><!-- timeout=100 -->
      <ssh start="false"/>
  </rsync>

[root@nfs-31 sersync2.5.4]# echo "momo666" >/etc/rsync.momo

#启动
[root@nfs-31 momo1]# /opt/sersync2.5.4/sersync2 -rdo /opt/sersync2.5.4/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: -r      rsync all the local files to the remote servers before the sersync work
option: -d      run as a daemon
option: -o      config xml name:  /opt/sersync2.5.4/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 momo01
passwordfile is         /etc/rsync.momo
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 /momo1 && rsync -az -R --delete ./ momo01@172.16.1.41::momo_data1 --password-file=/etc/rsync.momo >/dev/null 2>&1
run the sersync:
watch path is: /momo1
#启动产生的日志
#命令参数含义
参数-d:启用守护进程模式
参数-r:在监控前,将监控目录与远程主机用rsync命令推送一遍
参数-n: 指定开启守护线程的数量,默认为10个
参数-o:指定配置文件,默认使用confxml.xml文件
参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块
参数-m:单独启用其他模块,使用 -m socket 开启socket模块
参数-m:单独启用其他模块,使用 -m http 开启http模块
不加-m参数,则默认执行同步程序

#如果没有同步成功,可以使用日志最后一行的命令测试,并检查日志中是否存在error日志输出

4.检验是否可以实时同步
[root@nfs-31 momo1]# touch {1..50}.txt
[root@nfs-31 momo1]# rm -rf {1..50}.txt


[root@rsync-41 ~]# while true;do ls /momo1;sleep 1;done
nfs-31_10.0.0.31_2024-09-02  nfs-31_10.0.0.31_2024-09-04  nfs-31_10.0.0.31_2024-09-10

10.txt  15.txt  1.txt   24.txt  29.txt  33.txt  38.txt  42.txt  47.txt  5.txt  nfs-31_10.0.0.31_2024-09-02
11.txt  16.txt  20.txt  25.txt  2.txt   34.txt  39.txt  43.txt  48.txt  6.txt  nfs-31_10.0.0.31_2024-09-04
12.txt  17.txt  21.txt  26.txt  30.txt  35.txt  3.txt   44.txt  49.txt  7.txt  nfs-31_10.0.0.31_2024-09-10
13.txt  18.txt  22.txt  27.txt  31.txt  36.txt  40.txt  45.txt  4.txt   8.txt
14.txt  19.txt  23.txt  28.txt  32.txt  37.txt  41.txt  46.txt  50.txt  9.txt

nfs-31_10.0.0.31_2024-09-02  nfs-31_10.0.0.31_2024-09-04  nfs-31_10.0.0.31_2024-09-10

[root@nfs-31 momo1]# ps -ef | grep sersync | grep -v 'grep'
root       1933      1  0 21:02 ?        00:00:00 ./sersync2 -rdo confxml.xml
root       2605      1  0 21:17 ?        00:00:00 /opt/sersync2.5.4/sersync2 -rdo /opt/sersync2.5.4/confxml.xml

[root@nfs-31 momo1]# pkill sersync2
[root@nfs-31 momo1]# ps -ef | grep sersync | grep -v 'grep'
[root@nfs-31 momo1]# rm -rf /opt/sersync2.5.4*

lsyncd+rsync实时同步

在nfs-31(客户端)上完成

1.下载安装
[root@nfs-31 momo1]# yum -y install lsyncd

2.修改配置文件,(只检测一个目录)
[root@nfs-31 momo1]# cp /etc/lsyncd.conf{,.bak}
[root@nfs-31 momo1]# vim /etc/lsyncd.conf

settings {
    logfile      ="/var/log/lsyncd/lsyncd.log",
    statusFile   ="/var/log/lsyncd/lsyncd.status",
    inotifyMode  = "CloseWrite",					#进行检测的事件,全局设置
    maxProcesses = 8,
    }

sync {
    default.rsync,
    source    = "/momo1",
    target    = "momo01@172.16.1.41::momo_data1",
    delete= true,
    exclude = {".*"},
    delay=1,
    rsync     = {
        binary    = "/usr/bin/rsync",
        archive   = true,
        compress  = true,
        verbose   = true,
        password_file="/etc/rsync.momo",
        _extra={"--bwlimit=200"}
        }
    }

#如果要检测多个备份目录,在下面多添加几个sync模块即可   


3.开启服务并检查
[root@nfs-31 momo1]# systemctl start lsyncd
[root@nfs-31 momo1]# systemctl status lsyncd
● lsyncd.service - Live Syncing (Mirror) Daemon
   Loaded: loaded (/usr/lib/systemd/system/lsyncd.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2024-09-10 21:50:14 CST; 8s ago
 Main PID: 3760 (lsyncd)
   CGroup: /system.slice/lsyncd.service
           └─3760 /usr/bin/lsyncd -nodaemon /etc/lsyncd.conf

Sep 10 21:50:14 nfs-31 systemd[1]: Started Live Syncing (Mirror) Daemon.
Sep 10 21:50:14 nfs-31 lsyncd[3760]: sending incremental file list
Sep 10 21:50:14 nfs-31 lsyncd[3760]: sent 369 bytes  received 23 bytes  784.00 bytes/sec
Sep 10 21:50:14 nfs-31 lsyncd[3760]: total size is 33,267,196  speedup is 84,865.30

4.测试
[root@nfs-31 momo1]# touch {1..50}.txt
[root@nfs-31 momo1]# rm -rf {1..50}.txt
[root@rsync-41 ~]# while true;do ls /momo1;sleep 1;done
nfs-31_10.0.0.31_2024-09-02  nfs-31_10.0.0.31_2024-09-04  nfs-31_10.0.0.31_2024-09-10


10.txt  15.txt  1.txt   24.txt  29.txt  33.txt  38.txt  42.txt  47.txt  5.txt  nfs-31_10.0.0.31_2024-09-02
11.txt  16.txt  20.txt  25.txt  2.txt   34.txt  39.txt  43.txt  48.txt  6.txt  nfs-31_10.0.0.31_2024-09-04
12.txt  17.txt  21.txt  26.txt  30.txt  35.txt  3.txt   44.txt  49.txt  7.txt  nfs-31_10.0.0.31_2024-09-10
13.txt  18.txt  22.txt  27.txt  31.txt  36.txt  40.txt  45.txt  4.txt   8.txt
14.txt  19.txt  23.txt  28.txt  32.txt  37.txt  41.txt  46.txt  50.txt  9.txt


nfs-31_10.0.0.31_2024-09-02  nfs-31_10.0.0.31_2024-09-04  nfs-31_10.0.0.31_2024-09-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值