day 36期中架构实时复制

day 36期中架构实时复制

实时复制实践:

前提:backup rsync服务端部署好。

1)部署NFS客户端

[root@nfs01 ~]# echo 'export RSYNC_PASSWORD=oldboy' >>/etc/bashrc

[root@nfs01 ~]# source /etc/bashrc

[root@nfs01 ~]# echo $RSYNC_PASSWORD

oldboy

测试推送

[root@nfs01 ~]# rsync -avz /data [email protected]::backup/

sending incremental file list

sent 164 bytes  received 25 bytes  126.00 bytes/sec

total size is 0  speedup is 0.00

2)查看inotify支持情况

[root@nfs01 ~]# uname -r

3.10.0-957.5.1.el7.x86_64

[root@nfs01 ~]#  ls -l /proc/sys/fs/inotify/

总用量 0

-rw-r--r-- 1 root root 0 4月  19 09:45 max_queued_events

-rw-r--r-- 1 root root 0 4月  19 09:45 max_user_instances

-rw-r--r-- 1 root root 0 4月  19 09:45 max_user_watches

3)安装inotify-tools

yum install inotify-tools -y

yum install epel-release -y

[root@nfs01 ~]# rpm -ql inotify-tools|head -2

/usr/bin/inotifywait

/usr/bin/inotifywatch

[root@nfs01 ~]# rpm -qa inotify-tools

inotify-tools-3.14-8.el7.x86_64

inotify机制简介:

Inotify是一种异步的件系统事件监控机制, Linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种事件,

利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools正是实施这样监控的软件。

实际上inotify-tools是一个监控指定目录数据实时变化的软件程序。

Inotify程序原理是一种事件驱动机制,它为应用程序监控文件系统事件提供了实时响应事件的机制,可以做到对事件处理的实时响应。

inotify的实现有几款软件: inotify-tools, sersync.Irsyncd.

inotify优点:

inotify机制优点监控文件系统事件变化,通过复制工具实现实时数据复制。支持多线程实时复制

inotify缺点:

inotify机制缺点实测并发如果大于200个文件(10-100k) ,复制会有延迟。

利用man proc方式可以获取到以上inotify目录以及下面三个文件的说明信息,

根据说明信息,我们可以得知三个文件作用的详细说明:通过man proc获取内核中inotify信息说明:

/proc/sys/fs/inotify/目录包含了三个文件max_queued_events,  max_user_instances,  and max_user_watches

可以用来限制通过inotify接口消耗内核内存的数量;

更详细信息参见man手册7级别inotify说明上述三个文件的说明如下:

max_user_watches:设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)

max_user_instances: 设置每个用户可以运行的inotifywait或inotifywatch命令的进程数

max_queued_events: 设置inotify实例事件(event)队列可容纳的事件数量

说明:实例概念就是,多个相同服务,启动运行多个进程

inotify工具命令介绍:

inotify-tools工具主要命令

在inotify-tools软件部署完毕后,主要应用两个命令实现数据信息的监控,

一个利用inotifywait命令实现对数据变化事件的监控,

另一个利用inotifywatch命令实现对数据事件信息统计。

这个两个命令是能够应用好 inotify-tools软件的关键,下面对这两个软件说明如下:

# inotifywait:在被监控的目录等待特定文件系统事件(open, close,delete等)发生,

执行后处于阻塞状态,适合在Shell脚本中使用,此命令是重点。

# inotifywatch:收集被监控的文件系统使用的统计数据,指文件系统事件发生的次数统计。

4)命令参数和事件知识

-m|--monitor 始终保持事件监听状态(重要参数)

-r 递归监控目录数据信息变化(重要参数)

-q|--quiet 输出信息少(只打印事件信息)

--excludei 排除文件或目录时,不区分大小写

-e 指定监听指定的事件,如果省略,表示所有事件都进行监听。(重要参数)

access          文件或目录内容被读取

modify          文件或目录内容被写入

attrib          文件或目录属性改变

close_write    文件或目录关闭,在写入模式打开之后关闭的。(重要参数)

close_nowrite  文件或目录关闭,在只读模式打开之后关闭的

close          文件或目录关闭,不管读或是写模式

open            文件或目录被打开

moved_to        文件或目录被移动到监控的目录中

moved_from      文件或目录被移动从监控的目录中

move            文件或目录不管移动到或是移动出监控目录都触发事件

create          文件或目录创建在监控的目录中(重要参数)

delete          文件或目录被删除在监控的目录中(重要参数)

delete_self    文件或目录被删除

unmount        文件系统包含的文件或目录不能卸载

5)测试实践:删除 创建  修改

[root@nfs01 ~]# inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e create,delete /data

6)思考:实现数据复制

[root@nfs01 ~]# inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e create,delete /data

7)编写脚本:

mkdir /server/scripts -p

rsync -az --delete /data/ [email protected]::backup

[root@nfs01 /server/scripts]# /bin/sh /server/scripts/monitor1.sh &

[2] 9199

[root@nfs01 /server/scripts]# tail -2 /etc/rc.local

########################

/bin/sh /server/scripts/monitor1.sh &

方法1:

[root@nfs01 /server/scripts]# cat monitor1.sh

#!/bin/sh

cmd="/usr/bin/inotifywait"

$cmd -mrq  --format '%w%f' -e close_write,delete /data|\

while read line

do

  cd /data&&\

  rsync -az --delete ./ [email protected]::backup

done

[root@nfs01 /server/scripts]# sh -x monitor.sh      #-------监控,在nfs创建,backup下看,监控显示。

方法2:【不常用】

[root@nfs01 /server/scripts]# cat monitor.sh

#!/bin/sh

cmd="/usr/bin/inotifywait"

$cmd -mrq  --format '%w%f' -e close_write,delete /data|\

while read line

do

  #删除事件发生

  [ ! -e  "$line" ] && cd /data &&\

  rsync -az --delete ./ [email protected]::backup && continue

  #处理增改事件

  rsync -az --delete $line [email protected]::backup

done

sersync实践:

1)客户端推送成功

rsync -az /data [email protected]::backup

2)部署sersync服务(NFS)

wget https://github.com/wsgzao/sersync/blob/master/sersync2.5.4_64bit_binary_stable_final.tar.gz

sersync_oldboy_64bit_20160928.tar.gz

[root@nfs01 /server/tools]# mkdir /application -p

[root@nfs01 /server/tools]# mv application/sersync /application/

[root@nfs01 /server/tools]# tree /application/

/application/

下载安装包:直接拽进来

[root@nfs01 /server/tools]# ls

sersync_oldboy_64bit_实时复制软件下载到虚拟机.tar

[root@nfs01 /server/tools]# ll

total 712

-rw-r--r-- 1 root root 728419 Apr 19 11:50 sersync_oldboy_64bit_实时复制软件下载到虚拟机.tar

[root@nfs01 /server/tools]# tar -xf sersync_oldboy_64bit_实时复制软件下载到虚拟机.tar

[root@nfs01 /server/tools]# ls

application  sersync_oldboy_64bit_实时复制软件下载到虚拟机.tar

[root@nfs01 /server/tools]# cd application/

[root@nfs01 /server/tools/application]# ls

sersync

[root@nfs01 /server/tools/application]# cd sersync/

[root@nfs01 /server/tools/application/sersync]# ls

bin  conf  logs  readme.txt

[root@nfs01 /server/tools/application/sersync]# cd conf/

[root@nfs01 /server/tools/application/sersync/conf]# ls

confxml.xml  confxml.xml.ori

[root@nfs01 /server/tools/application/sersync/conf]# ll

total 8

-rw-r--r-- 1 root root 2266 Sep 28  2016 confxml.xml

-rw-r--r-- 1 root root 2214 Sep 28  2016 confxml.xml.ori

[root@nfs01 /server/tools/application/sersync/conf]# vim confxml.xml

3)sersync配置文件:干两件事:

1)完成监控配置:

inotifywait -mrq --format '%w%f' -e createFolder,close_write,delete,moveFrom,moveTo /data

2)完整命令拼接:

rsync -az /data --timeout=100 [email protected]::backup

4)启动服务

[root@nfs01 /application/sersync/conf]# ../bin/sersync -h

[root@nfs01 /application/sersync/conf]# /application/sersync/bin/sersync -d -n 10 -o /application/sersync/conf/confxml.xml

最终

/application/sersync/bin/sersync -d

pkill sersync

二进制程序,不是yum安装的,所以不能systemctl start sersync

配置:systemctl start sersync启动方案

https://blog.51cto.com/oldboy/2155931

[root@nfs01 /data]# tail -1 /etc/rc.local

/application/sersync/bin/sersync -d

配置:systemctl start sersync启动方案

https://blog.51cto.com/oldboy/2155931

[root@nfs01 /data]# cat /etc/rc.d/init.d/sersync

#!/bin/bash

# chkconfig: 2345 21 81

# description: rsync service start and stop scripts

# Author: oldboy

# Organization: www.oldboyedu.com

start(){

    /application/sersync/bin/sersync -d -o /application/sersync/conf/confxml.xml &>/dev/null

}

stop(){

    killall sersync 2>/dev/null

}

case "$1" in

    start)

        start

        ;;

    stop)

        stop

        ;;

    restart)

        stop

        sleep 2

        start

        ;;

    *)

        echo $"Usage:$0 {start|stop|restart}"

        exit 1

esac

chmod +x /etc/rc.d/init.d/sersync

[root@nfs01 /data]# cat /usr/lib/systemd/system/sersync.service

[Unit]

Description=sersyncd service

After=network.target

[Service]

Type=forking         

ExecStart=/etc/rc.d/init.d/sersync start 

ExecReload=/etc/rc.d/init.d/sersync restart

ExecStop=/etc/rc.d/init.d/sersync stop   

PrivateTmp=true

[Install]

WantedBy=multi-user.target

chmod +x /usr/lib/systemd/system/sersync.service

[root@nfs01 /data]# systemctl enable sersync.service

Created symlink from /etc/systemd/system/multi-user.target.wants/sersync.service to /usr/lib/systemd/system/sersync.service.

[root@nfs01 /data]# systemctl status sersync.service

● sersync.service - sersyncd service

  Loaded: loaded (/usr/lib/systemd/system/sersync.service; enabled; vendor preset: disabled)

  Active: inactive (dead)


[root@nfs01 /data]# systemctl stop sersync

[root@nfs01 /data]# ps -ef|grep sersync|grep -v grep

[root@nfs01 /data]# systemctl start sersync

你可能感兴趣的:(day 36期中架构实时复制)