0基础linux运维教程 sersync介绍

sersync是为解决rsync+inotify在Linux运维中遇到的问题而开发的工具,它能过滤重复事件,支持多线程同步,自带crontab功能,并具有出错重传机制。文章详细介绍了sersync的优点、缺点,并提供了环境准备、安装配置以及实际操作的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

rsync+inotify的缺点

- 1、inotify最大的不足是会产生重复事件,或者同一个目录下多个文件的操作会产生多个事件(例如,当监控目录中有5个文件时,删除目录时会产生6个监控事件),从而导致重复调用rsync命令。而且vim文件时,inotify会监控到产生临时文件.swp和.swx等的事件,但这些事件相对于rsync来说是不应该被监控的。

- 2、inotifywait工具的存在缺陷,当向监控目录下拷贝复杂层次目录(多层次目录中包含文件),或者向其中拷贝大量文件时,**inotifywait经常会随机性地遗漏某些文件**。

- 3、并发如果大于200个文件(10-100K),同步会有延迟

- 4、监控到事件后,调用rsync同步是单线程的(加&才可以并发)

**由于上述缺陷的存在,使得通过脚本实现的inotify+rsync几乎很难达到完美,于是sersync应运而生!**

sersync是金山的周洋基于rsync+inotify-tools开发的工具,它克服了inotify的缺陷,可以过滤重复事件减轻负担,并且自带crontab功能、多线程调用rsync、失败重传等功能,详解如下

```bash

# 1、sersync的优点:

1、sersync是使用c++编写,而且对linux系统文件系统产生的临时文件和重复的文件操作进行过滤,所以在结合rsync同步的时候,节省了运行时耗和网络资源。因此更快。

2、sersync配置很简单,其中bin目录下已经有静态编译好的2进制文件,配合bin目录下的xml配置文件直接使用即可。

3、sersync使用多线程进行同步,尤其在同步较大文件时,能够保证多个服务器实时保持同步状态。

4、sersync有出错处理机制,通过失败队列对出错的文件重新同步,如果仍旧失败,则按设定时长对同步失败的文件重新同步。

5、sersync自带crontab功能,只需在xml配置文件中开启,即可按要求隔一段时间整体同步一次。无需再额外配置crontab功能。

6、sersync可以二次开发。

# 2、sersync的缺点:

sersync有重传机制(内置的定时任务),但是只重传一次,如果重传失败就会清空重传队列,即清空/tmp/rsync_fail_log.sh文件。这样就会造成sersync服务恢复正常后(即可以同步文件),数据同步的两个服务器数据不一致的现象。因为,/tmp/rsync_fail_log.sh文件为空,而sersync只对发生变化的文件做实时同步(ps:sersync默认每隔十个小时做一次完整的数据同步)。

```

注意

```bash

(1)当同步的目录数据量不大时,建议使用rsync+inotify

(2)当同步的目录数据量很大时(几百G甚至1T以上)文件很多时,建议使用rsync+sersync

```

### 8.2 sersync实战

1)环境准备

| 主机   | IP            | 安装服务                |

| ------ | ------------- | ----------------------- |

| local  | 192.168.12.17 | rsync、inotify、sersync |

| remote | 192.168.12.39 | rsync服务端             |

2)服务端安装与配置好rsync守护进程(略)

3)客户端安装rsync和inotify

```bash

yum install -y rsync inotify-tools

```

4)客户端安装sersync

```bash

# 1、下载

wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gz

# 2、解压即可用

tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz

# 3、把软件移动到/usr/local/sersync下

mv GNU-Linux-x86 /usr/local/sersync

# 4、制作环境变量

echo "export PATH=$PATH:/usr/local/sersync" >> /etc/profile

source /etc/profile

```

修改配置

```bash

[root@local ~]# vim /usr/local/sersync/confxml.xml 

<?xml version="1.0" encoding="ISO-8859-1"?>

<head version="2.5">

    # 监听的主机和端口

    <host hostip="localhost" port="8008"></host>

    # 是否开启调试模式,下面所有出现false和true的地方都分别表示关闭和开启的开关

    <debug start="false"/>

    # 监控的是否是xfs文件系统,默认为false

    <fileSystem xfs="true"/>

    # 是否启用监控的筛选功能,筛选的文件将不被监控

    <filter start="false">

    <exclude expression="(.*)\.svn"></exclude>

    <exclude expression="(.*)\.gz"></exclude>

    <exclude expression="^info/*"></exclude>

    <exclude expression="^static/*"></exclude>

    </filter>

    # 监控的事件,默认监控的是delete/createFolder/closeWrite/moved_from/moved_to

    <inotify>

    <delete start="true"/>

    <createFolder start="true"/>

    <createFile start="true"/>

    <closeWrite start="true"/>

    <moveFrom start="true"/>

    <moveTo start="true"/>

    <attrib start="true"/>

    <modify start="true"/>

    </inotify>

    <sersync>  # rsync命令的配置段

    <localpath watch="/test">  # 监控的本地目录

        # 默认为rsync协议认证,除非下面开启ssh start

        # 所以此处为远程主机的ip与模块名,远端要开启rsync守护进程

        <remote ip="192.168.12.39" name="xxx"/> 

        <!--<remote ip="192.168.8.39" name="tongbu"/>-->

        <!--<remote ip="192.168.8.40" name="tongbu"/>-->

    </localpath>

    <rsync>

        # 指定rsync选项,默认为-artuz

        <commonParams params="-az"/>

        # 开启认证,需要虚拟用户和密码文件,默认是关闭的

        <auth start="true" users="egon" passwordfile="/etc/egon.password"/>

        # 如果端口不是873则需要更改

        <userDefinedPort start="false" port="874"/><!-- port=874 -->

        # 超时时间

        <timeout start="false" time="100"/><!-- timeout=100 -->

        # 是否使用远程shell模式而非rsync daemon运行rsync命令

        <ssh start="false"/>

    </rsync>

    # 错误重传

    <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->

    # 是否开启crontab功能,默认关闭,每隔600分钟进行一次全备

    <crontab start="true" schedule="600"><!--600mins-->

        <crontabfilter start="false">  # crontab定时传输的筛选功能

        <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"/>

        <sendurl base="http://pic.xoyo.com/cms"/>

        <regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>

    </localpath>

    </plugin>

</head>

```

依据配置文件创建密码文件并授权

```bash

echo 123> /etc/egon.password

chmod 600 /etc/egon.password

```

sersync2命令

```bash

[root@local ~]# sersync2 -h

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

_______________________________________________________

参数-d:启用守护进程模式

参数-r:在监控前,将监控目录与远程主机用rsync命令推送一遍

c参数-n: 指定开启守护线程的数量,默认为10个

参数-o:指定配置文件,默认使用confxml.xml文件

参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块

参数-m:单独启用其他模块,使用 -m socket 开启socket模块

参数-m:单独启用其他模块,使用 -m http 开启http模块

不加-m参数,则默认执行同步程序

```

由此可见,sersync2命令总是会先设置inotify相关的系统内核参数。

所以,只需执行以下简单的命令即可。

```bash

/usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml

```

如果在本机要监控多个目录,即sersync多实例,只需分别配置不同配置文件,然后使用sersync2指定对应配置文件运行即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值