二、inotify+rsync实时同步服务部署

1 第一个里程碑:部署rsync服务

1.1 rsync服务端部署


1) 软件是否存在
  1. [root@backup ~]# rpm -qa |grep rsync
  2. rsync-3.0.6-12.el6.x86_64
复制代码

需求:查询到某个命令非常有用。但是不知道属于哪个软件包

yum provides rysnc


provides Find what package provides the given value


2) 进行软件服务配置

  1. [root@backup ~]# vim /etc/rsyncd.conf
  2. uid = rsync
  3. gid = rsync
  4. use chroot = no
  5. max connections = 200
  6. timeout = 300
  7. pid file = /var/run/rsyncd.pid
  8. lock file = /var/run/rsync.lock
  9. log file = /var/log/rsyncd.log
  10. ignore errors
  11. read only = false
  12. list = false
  13. hosts allow = 172.16.1.0/24
  14. auth users = rsync_backup
  15. secrets file = /etc/rsync.password

  16. [backup]
  17. comment = "backup dir by oldboy"
  18. path = /backup

  19. [nfsbackup]
  20. comment = "nfsbackup dir by hzs"
  21. path = /nfsbackup
复制代码

3) 创建rsync管理用户
  1. [root@backup ~]# useradd -s /sbin/nologin -M rsync
复制代码

4) 创建数据备份储存目录,目录修改属主
  1. [root@backup ~]# mkdir /nfsbackup/
  2. [root@backup ~]# chown -R rsync.rsync /nfsbackup/
复制代码

5) 创建认证用户密码文件并进行授权600
  1. echo "rsync_backup:oldboy123" >>/etc/rsync.password
  2. chmod 600 /etc/rsync.password
复制代码

6) 启动rsync服务
  1. rsync --daemon
复制代码

至此服务端配置完成
  1. [root@backup ~]# ps -ef |grep rsync
  2. root       2076      1  0 17:05 ?        00:00:00 rsync --daemon
  3. root       2163   1817  0 17:38 pts/1    00:00:00 grep --color=auto rsync
复制代码

1.2 rsync客户端配置


1) 软件是否存在
  1. [root@backup ~]# rpm -qa |grep rsync
  2. rsync-3.0.6-12.el6.x86_64
复制代码

2) 创建安全认证文件,并进行修改权限600
  1. echo "oldboy123" >>/etc/rsync.password
  2. chmod 600 /etc/rsync.password
复制代码

3) 测试数据传输
  1. [root@nfs01 sersync]# rsync -avz /data  rsync_backup@172.16.1.41::nfsbackup  --password-file=/etc/rsync.password
  2. sending incremental file list
  3. data/
  4. data/.hzs
  5. data/.tar.gz
  6. data/.txt
复制代码

2 第二个里程碑:部署inotify服务

首先先确认是否有epel源用来安装inotify-tools软件
  1. [root@nfs01 ~]# yum repolist
  2. Loaded plugins: fastestmirror, security
  3. Loading mirror speeds from cached hostfile
  4. * base: mirrors.aliyun.com
  5. * epel: mirrors.aliyun.com
  6. * extras: mirrors.aliyun.com
  7. * updates: mirrors.aliyun.com
  8. repo id  repo name                                       status
  9. base     CentOS-6 - Base - mirrors.aliyun.com             6,706
  10. epel     Extra Packages for Enterprise Linux 6 - x86_64  12,401
  11. extras   CentOS-6 - Extras - mirrors.aliyun.com              46
  12. updates  CentOS-6 - Updates - mirrors.aliyun.com            722
  13. repolist: 19,875
复制代码

2.1 安装inotify软件

两种安装方式

1) yum install -y inotify-tools


2) 手工编译安装


注:


手工编译安装方式需要到github上进行下载软件包


2.2 查看inotify安装上的两个命令(inotifywait、inotifywatch)

  1. [root@nfs01 ~]# rpm -ql inotify-tools
  2. /usr/bin/inotifywait      #主要
  3. /usr/bin/inotifywatch
复制代码

inotifywait和inotifywatch的作用:

一共安装了2个工具(命令),即inotifywait和inotifywatch


inotifywait:在被监控的文件或目录上等待特定文件系统事件(open close delete等)发生,执行后处于阻塞状态,适合在shell脚本中使用


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


说明:yum安装后可以直接使用,如果编译安装需要进入到相应软件目录的bin目录下使用


#命令 man手册说明


# man inotifywait


inotifywait - wait for changes to files using inotify


使用inotify进行监控,等待产生变化的文件信息


# man inotifywatch


inotifywatch - gather filesystem access statistics using inotify


使用inotify进行监控,收集文件系统访问统计佶息


3 第三个里程碑:编写脚本,实现rsync+inotify软件功能结合


3.1 rsync服务命令

  1. rsync -avz --delete /data/ rsync_backup@172.16.1.41::nfsbackup --password-file=/etc/rsync.password
复制代码

3.2 inotify服务命令
  1. inotifywait -mrq /data -format "%w%f"  -e create,delete,move_to,close_write
复制代码

3.3 编写脚本
  1. [root@nfs01 sersync]# vim /server/scripts/inotify.sh
  2. #!/bin/bash
  3. inotifywait -mrq /data --format "%w%f" -e create,delete,moved_to,close_write|\
  4. while read line
  5. do
  6.         rsync -az --delete /data/ rsync_backup@172.16.1.41::nfsbackup --password-
  7. file=/etc/rsync.password
  8. done
复制代码

脚本说明:

for循环会定义一个条件,当条件不满足时停止循环


while循环:只要条件满足就一直循环下去


3.4 对脚本进行优化

  1. #!/bin/bash
  2. Path=/data
  3. backup_Server=172.16.1.41
  4. /usr/bin/inotifywait -mrq --format '%w%f' -e create,close_write,delete /data  | while read line  
  5. do
  6.     if [ -f $line ];then
  7.         rsync -az $line --delete rsync_backup@$backup_Server::nfsbackup --password-file=/etc/rsync.password
  8.     else
  9.         cd $Path &&\
  10.         rsync -az ./ --delete rsync_backup@$backup_Server::nfsbackup --password-file=/etc/rsync.password
  11.     fi
  12. done
复制代码

4 第四个里程碑:测试编写的脚本

4.1 让脚本在后台运行


在/data 目录先创建6个文件
  1. [root@nfs01 data]# sh  /server/scripts/inotify.sh &
  2. [root@nfs01 data]# touch {1..6}.txt
复制代码

在backup服务器上,已经时候同步过去了6个文件
  1. [root@backup ~]# ll /nfsbackup/
  2. total 8
  3. -rw-r--r-- 1 rsync rsync 0 Oct 17 12:06 1.txt
  4. -rw-r--r-- 1 rsync rsync 0 Oct 17 12:06 2.txt
  5. -rw-r--r-- 1 rsync rsync 0 Oct 17 12:06 3.txt
  6. -rw-r--r-- 1 rsync rsync 0 Oct 17 12:06 4.txt
  7. -rw-r--r-- 1 rsync rsync 0 Oct 17 12:06 5.txt
  8. -rw-r--r-- 1 rsync rsync 0 Oct 17 12:06 6.txt
复制代码

5 利用while循环语句编写的脚本停止方法(kill)

01. ctrl+z暂停程序运行,kill -9杀死

02. 不要暂停程序,直接利用杀手三剑客进行杀进程


说明:kill三个杀手不是万能的,在进程暂停时,无法杀死;kill -9 (危险)


5.1 查看后台都要哪些程序在运行

  1. [root@nfs01 data]# jobs
  2. [1]+  Running                 sh /server/scripts/inotify.sh &
复制代码

5.2 fg将后台的程序调到前台来
  1. [root@nfs01 data]# fg 1
  2. sh /server/scripts/inotify.sh
复制代码

6 进程的前台和后台运行方法

fg -- 前台

bg -- 后台


脚本后台运行方法:


01. sh inotify.sh &


02. nohup sh inotify.sh &


03. screen实现脚本程序后台运行

  1. sh /server/scripts/inotify.sh &
复制代码

nohup
  1. nohup sh inotify.sh &
复制代码

7 screen实现脚本程序后台运行

7.1 经过yum查找发现screen命令属于screen包

  1. [root@test ~]# yum provides screen
  2. Loaded plugins: fastestmirror, security
  3. Loading mirror speeds from cached hostfile
  4. * base: mirrors.aliyun.com
  5. * epel: mirrors.aliyun.com
  6. * extras: mirrors.aliyun.com
  7. * updates: mirrors.aliyun.com
  8. base                                                      | 3.7 kB     00:00   
  9. epel                                                      | 4.3 kB     00:00   
  10. extras                                                    | 3.4 kB     00:00   
  11. updates                                                   | 3.4 kB     00:00   
  12. screen-4.0.3-19.el6.x86_64 : A screen manager that supports multiple logins on
  13.                            : one terminal
  14. Repo        : base
  15. Matched from:
复制代码

7.2 安装screen软件
  1. [root@test ~]# yum install -y  screen
复制代码

7.3 screen命令的参数

在shell中输入 screen 即可进入 screen 视图
  1. [root@test ~]# screen
复制代码

Screen实现后台运行程序的简单步骤:

screen -ls:可看screen会话


screen -r ID:指定进入哪个screen会话


Screen命令中用到的快捷键:


Ctrl+a c:创建窗口


Ctrl+a w:窗口列表


Ctrl+a n:下一个窗口


Ctrl+a p:上一个窗口


Ctrl+a 0-9:在第0个窗口和第9个窗口之间切换


Ctrl+a K(大写):关闭当前窗口,并且切换到下一个窗口 (当退出最后一个窗口时,该终端自动终止,并且退回到原始shell状态)


exit:关闭当前窗口,并且切换到下一个窗口(当退出最后一个窗口时,该终端自动终止,并且退回到原始shell状态)


Ctrl+a d:退出当前终端,返回加载screen前的shell命令状态


Ctrl+a ":窗口列表不同于w

回复

使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Powered by Discuz! X3.2  © 2001-2013 Comsenz Inc.