- Top
- NSD SERVICES DAY05
案例 1:rsync 基本用法
案例 2:rsync+SSH 同步
案例 3: 使用 inotifywait 工具
案例 4: 配置 web 镜像同步
1 案例 1:rsync 基本用法
1.1 问题
本例要求掌握远程同步的基本操作, 使用 rsync 命令完成下列任务:
将目录 /boot 同步到目录 /todir 下
将目录 /boot 下的文档同步到目录 /todir 下
在目录 /boot 下新增文件 a.txt, 删除 /todir 下的子目录 grub2, 再次同步使 /todir 与 /boot 一致
验证 -a,-n,-v,--delete 选项的含义
1.2 方案
本地同步操作:
rsync [选项...] 本地目录 1 本地目录 2
rsync [选项...] 本地目录 1/ 本地目录 2
rsync 同步工具的常用选项:
-n: 测试同步过程, 不做实际修改
--delete: 删除目标文件夹内多余的文档
-a: 归档模式, 相当于 - rlptgoD
-v: 显示详细操作信息
-z: 传输过程中启用压缩 / 解压
1.3 步骤
实现此案例需要按照如下步骤进行.
步骤一: rsync 同步基本操作
1) 将目录 /boot 同步到目录 /todir 下
[root@svr7 ~]# ls -l /todir // 同步前
ls: 无法访问 / todir: 没有那个文件或目录
- [root@svr7 ~]# rsync -a /boot /todir // 将目录 1 作为目录 2 的子目录
- [root@svr7 ~]# ls -l /todir // 检查同步结果
总用量 4
dr-xr-xr-x. 4 root root 4096 11 月 30 18:50 boot
2) 将目录 /boot 下的文档同步到目录 /todir 下
- [root@svr7 ~]# rm -rf /todir // 清理掉目录 2
- [root@svr7 ~]# rsync -a /boot//todir // 将目录 1 下的文档同步到目录 2 下
- [root@svr7 ~]# ls -l /todir // 检查同步结果
总用量 126708
-rw-r--r--. 1 root root 126426 10 月 30 2015 config-3.10.0-327.el7.x86_64
drwxr-xr-x. 2 root root 4096 11 月 30 18:50 extlinux
drwx------. 6 root root 104 12 月 9 09:58 grub2
.. ..
3) 同步效果测试
在目录 / boot 下新增文件 a.txt, 删除 / todir 下的子目录 grub2:
- [root@svr7 ~]# touch /boot/a.txt
- [root@svr7 ~]# rm -rf /todir/grub2/
现在目录 / boot 和 / todir 目录下的内容已经不一致了:
[root@svr7 ~]# ls -ld /boot/a.txt /todir/a.txt
ls: 无法访问 / todir/a.txt: 没有那个文件或目录
-rw-r--r--. 1 root root 0 1 月 11 21:09 /boot/a.txt
[root@svr7 ~]# ls -ld /boot/grub2 /todir/grub2
ls: 无法访问 / todir/grub2: 没有那个文件或目录
drwx------. 6 root root 104 12 月 9 09:58 /boot/grub2
再次同步使 / todir 与 / boot 一致:
[root@svr7 ~]# rsync -a /boot//todir/
确认同步结果:
[root@svr7 ~]# ls -ld /boot/a.txt /todir/a.txt
-rw-r--r--. 1 root root 0 1 月 11 21:09 /boot/a.txt
-rw-r--r--. 1 root root 0 1 月 11 21:09 /todir/a.txt
[root@svr7 ~]# ls -ld /boot/grub2 /todir/grub2
drwx------. 6 root root 104 12 月 9 09:58 /boot/grub2
drwx------. 6 root root 104 12 月 9 09:58 /todir/grub2
步骤二: 验证 -a,-v,-n,--delete 选项的含义
1) 验证 - a 选项
当目录 1 包含文件夹时, 若缺少 - a 或 - r 选项则文件夹会被忽略:
- [root@svr7 ~]# rsync /home /testa
- skipping directory home
- [root@svr7 ~]# ls -ld /testa
ls: 无法访问 / testa: 没有那个文件或目录
添加 - a 后才会执行同步:
- [root@svr7 ~]# rsync -a /home//testa
- [root@svr7 ~]# ls -ld /testa
drwxr-xr-x. 4 root root 31 1 月 6 17:33 /testa
类似的情况, 当目录 1 中的数据出现权限, 归属, 修改时间等变化时, 若文件内容不变默认不会同步, 若希望目录 2 也同步这些变化, 也需要 - a 选项.
2) 验证 - v 选项
创建测试目录及文档:
- [root@svr7 ~]# mkdir /fdir
- [root@svr7 ~]# touch /fdir/1.txt
添加 - v 选项时, 可以看到操作细节信息, 比如第一次同步时:
- [root@svr7 ~]# rsync -av /fdir//tdir
- sending incremental file list
- created directory /tdir
- ./
- 1.txt // 传输文档列表
- sent 82 bytes received 34 bytes 232.00 bytes/sec
- total size is 0 speedup is 0.00
在目录 / fdir / 添加文件 2.txt, 再次跟踪同步信息:
- [root@svr7 ~]# touch /fdir/2.txt
- sending incremental file list
- ./
- 2.txt // 传输文档列表
- sent 100 bytes received 34 bytes 268.00 bytes/sec
- total size is 0 speedup is 0.00
确认目录 1 和目录 2 的内容已经一致:
- [root@svr7 ~]# ls /fdir//tdir/
- /fdir/:
- 1.txt 2.txt
- /tdir/:
- 1.txt 2.txt
再次跟踪同步信息, 已经无需传输文件:
- [root@svr7 ~]# rsync -av /fdir//tdir
- sending incremental file list
- sent 58 bytes received 12 bytes 140.00 bytes/sec
- total size is 0 speedup is 0.00
3) 验证 - n 选项
将 - n,-v 选项合用, 可以模拟同步过程, 显示需要做哪些操作 (但并不真的同步).
在目录 / fdir 下新建文件 3.txt, 测试同步操作:
- [root@svr7 ~]# touch /fdir/3.txt
- [root@svr7 ~]# rsync -avn /fdir//tdir/
- sending incremental file list
- ./
- 3.txt // 提示同步时会传输哪些文件
- sent 78 bytes received 18 bytes 192.00 bytes/sec
- total size is 0 speedup is 0.00 (DRY RUN)
- [root@svr7 ~]# ls -l /tdir/3.txt // 但实际并未真的同步
ls: 无法访问 / tdir/3.txt: 没有那个文件或目录
去掉 - n 选项才会真正同步:
- [root@svr7 ~]# rsync -av /fdir//tdir/
- sending incremental file list
- ./
- 3.txt
- sent 114 bytes received 34 bytes 296.00 bytes/sec
- total size is 0 speedup is 0.00
- [root@svr7 ~]# ls -l /tdir/3.txt
-rw-r--r--. 1 root root 0 1 月 11 21:46 /tdir/3.txt
4) 验证 --delete 选项
rsync 同步操作默认只是将目录 1 的数据同步到目录 2, 但如果目录 2 存在多余的文件却并不会去除, 除非添加 - delete 选项.
在目录 / fdir,/tdir 已经完成同步后, 删除 / tdir/2.txt 文件, 再次同步:
- [root@svr7 ~]# rm -rf /fdir/2.txt
- [root@svr7 ~]# rsync -a /fdir//tdir/
检查发现目标文件夹 / tdir 下的 2.txt 文件还在:
- [root@svr7 ~]# ls /fdir//tdir/
- /fdir/:
- 1.txt 3.txt
- /tdir/:
- 1.txt 2.txt 3.txt
这种情况下添加 --delete 选项再次执行同步, 两个目录的内容就一致了:
- [root@svr7 ~]# rsync -a --delete /fdir//tdir/
- [root@svr7 ~]# ls /fdir//tdir/
- /fdir/:
- 1.txt 3.txt
- /tdir/:
- 1.txt 3.txt
2 案例 2:rsync+SSH 同步
2.1 问题
本例要求掌握 rsync 与远程 SSH 资源的同步操作, 使用 rsync 命令访问远程主机 svr7, 完成下列任务:
查看远程主机的 / 目录下有哪些子目录
从远程主机下载 /etc/passwd 文件到当前目录
将远程主机的 /boot/ 目录同步为本地的 /fromssh
将本机的 /etc 目录同步到远程主机的 /opt / 下
2.2 方案
列出 SSH 服务端资源
rsync user@host: 远程目录 /
rsync+SSH 远程同步操作:
rsync [...] user@host: 远程目录 本地目录
rsync [...] 本地目录 user@host: 远程目录
2.3 步骤
实现此案例需要按照如下步骤进行.
步骤一: 列出远程主机的 SSH 资源
查看远程主机 svr7 的 / 目录下有哪些子目录:
- [root@pc207 ~]# rsync root@192.168.4.7:/
- root@192.168.4.7's password: // 验证对方的密码
- dr-xr-xr-x 4096 2016/12/15 10:39:34 .
- lrwxrwxrwx 7 2016/12/07 09:21:50 bin
- lrwxrwxrwx 7 2016/12/07 09:21:50 lib
- lrwxrwxrwx 9 2016/12/07 09:21:50 lib64
- lrwxrwxrwx 8 2016/12/07 09:21:50 sbin
- dr-xr-xr-x 4096 2016/12/07 11:25:29 boot
- drwxr-xr-x 6 2016/12/07 09:21:14 data
- drwxr-xr-x 3200 2016/12/15 10:46:15 dev
- drwxr-xr-x 8192 2016/12/20 17:01:02 etc
步骤二: rsync+SSH 同步操作
1) 从远程主机 svr7 下载 / etc/passwd 文件到当前目录
- [root@pc207 ~]# rsync root@192.168.4.7:/etc/passwd ./
- root@192.168.4.7's password: // 验证对方的密码
- [root@pc207 ~]# cat passwd // 检查同步结果
- root:x:0:0:root:/root:/bin/bash
- bin:x:1:1:bin:/bin:/sbin/nologin
- daemon:x:2:2:daemon:/sbin:/sbin/nologin
- adm:x:3:4:adm:/var/adm:/sbin/nologin
- lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
- .. ..
2) 将远程主机 svr7 的 / boot / 目录同步为本地的 / fromssh
- [root@pc207 ~]# rsync -a root@192.168.4.7:/boot//fromssh
- root@192.168.4.7's password: // 验证对方的密码
- [root@pc207 ~]# ls /fromssh/// 检查同步结果
- config-3.10.0-327.el7.x86_64
- extlinux
- grub2
- initramfs-0-rescue-a19921505cc7e19d20dfcd5cea7d8aa2.img
- initramfs-3.10.0-327.el7.x86_64.img
- initramfs-3.10.0-327.el7.x86_64kdump.img
- .. ..
3) 将本机的 / etc 目录同步到远程主机 svr7 的 / opt / 下
确认目录大小:
- [root@pc207 ~]# du -sh /etc
- 35M /etc
上行同步到远程主机 svr7 上:
- [root@pc207 ~]# rsync -a /etc root@192.168.4.7:/opt/
- root@192.168.4.7's password:
在远程主机上检查同步结果:
- [root@svr7 ~]# du -sh /opt/etc
- 35M /opt/etc
3 案例 3: 使用 inotifywait 工具
3.1 问题
本例要求安装 inotify-tools 工具, 并针对文件夹 /opt 启用 inotifywait 监控, 完成下列任务:
当此目录下出现新建, 修改, 更改权限, 删除文件等事件时能给出提示
验证上述监控事件的效果
3.2 方案
inotifywait 监控操作:
inotifywait [选项] 目标文件夹
inotifywait 常用命令选项:
-m, 持续监控 (捕获一个事件后不退出)
-r, 递归监控, 包括子目录及文件
-q, 减少屏幕输出信息
-e, 指定监视的 modify,move,create,delete,attrib 等事件类别
3.3 步骤
实现此案例需要按照如下步骤进行.
步骤一: 安装 inotify-tools 软件包
1) 解包
[root@svr7 ~]# tar xf inotify-tools-3.13.tar.gz -C /usr/src/
2) 配置
- [root@svr7 ~]# cd /usr/src/inotify-tools-3.13/
- [root@svr7 inotify-tools-3.13]# ./configure
3) 编译
[root@svr7 inotify-tools-3.13]# make
4) 安装
[root@svr7 inotify-tools-3.13]# make
5) 检查安装结果 (inotifywait 程序可用)
- [root@svr7 ~]# inotifywait --help
- inotifywait 3.13
- Wait for a particular event on a file or set of files.
- Usage: inotifywait [ options ] file1 [ file2 ] [ file3 ] [ ... ]
- Options:
- -h|--help Show this help text.
- .. ..
步骤二: 测试 inotifywait 监控
1) 开启监控任务, 置入后台
- [root@svr7 ~]# inotifywait -mrq -e create,modify,move,attrib,delete /opt &
- [1] 55564
2) 测试 / opt / 目录下的新建, 修改, 改名, 更改权限, 删除文件等事件的响应消息
观察新建文件时的监控信息:
- [root@svr7 ~]# touch /opt/a.txt
- /opt/ CREATE a.txt
- /opt/ ATTRIB a.txt
观察修改文件内容时的监控信息:
- [root@svr7 ~]# echo Hello> /opt/a.txt
- [root@svr7 ~]# /opt/ MODIFY a.txt
- /opt/ MODIFY a.txt
观察将文件改名时的监控信息:
- [root@svr7 ~]# mv /opt/a.txt /opt/b.txt
- /opt/ MOVED_FROM a.txt
- /opt/ MOVED_TO b.txt
观察修改文件权限时的监控信息:
- [root@svr7 ~]# chmod 600 /opt/b.txt
- /opt/ ATTRIB b.txt
观察删除文件时的监控信息:
- [root@svr7 ~]# rm -rf /opt/b.txt
- /opt/ DELETE b.txt
3) 停止监控任务
[root@svr7 ~]# kill -9 %1
[1]+ 已杀死 inotifywait -mr -e create,modify,move,attrib,delete /opt
4 案例 4: 配置 Web 镜像同步
4.1 问题
本例要求为两台 Web 服务器 svr7,pc207 的网页文档目录配置镜像同步, 主要基于 inotifywait 监控技术实现实时触发操作, 需要完成下列任务:
以 svr7 为发起方, 原始目录为 /var/www/html/
以 pc207 为同步目标, 基于 SSH 免密验证
编写 inotify+rsync 同步脚本, 验证实时同步效果
4.2 方案
inotifywait 与 rsync 的结合, 主要思路:
while inotifywait 监控操作
do
需要执行的 rsync 同步操作
done
4.3 步骤
实现此案例需要按照如下步骤进行.
步骤一: 为主机 svr7,pc207 部署同步目录
双方的目录均为 / var/www/html/, 如果安装了 httpd, 此目录会自动出现.
1) 确认 svr7 的目录内容
- [root@svr7 ~]# yum -y install httpd
- .. ..
- [root@svr7 ~]# ls /var/www/html/// 向目录下提供一些测试文件
- libreoffice
2) 确认 pc207 的目录内容
- [root@pc207 ~]# yum -y install httpd
- .. ..
- [root@pc207 ~]# ls /var/www/html // 初始目录无数据
- [root@pc207 ~]#
步骤二: 为 svr7 配置到 pc207 的 SSH 密钥对验证, 实现免密码交互
1) 检查当前用户是否已经有可用的 SSH 密钥对文件
- [root@svr7 ~]# ls ~/.ssh/id_*
- /root/.ssh/id_rsa /root/.ssh/id_rsa.pub
如果找不到 id_rsa,id_rsa.pub 密钥对文件, 则需要执行下列操作创建:
- [root@svr7 ~]# ssh-keygen
- Generating public/private rsa key pair.
- Enter file in which to save the key (/root/.ssh/id_rsa): // 按回车, 确认存放位置
- Enter passphrase (empty for no passphrase): // 按回车, 确认不要密码
- Enter same passphrase again: // 再次按回车, 确认
- Your identification has been saved in /root/.ssh/id_rsa.
- Your public key has been saved in /root/.ssh/id_rsa.pub.
- The key fingerprint is:
- 00:a7:cb:2d:9d:b8:8a:df:f5:ff:5b:ed:bd:04:10:fe root@svr7
- The key's randomart image is:
- +--[ RSA 2048]----+
| . . . |
| + . . |
| . . o |
- | . = o o |
- | = + S E |
- | o .. |
| . . ...|
| . o . . ....|
|..o . ....o. .+|
+-----------------+
2) 将当前用户的 SSH 公钥部署到远程主机
- [root@svr7 ~]# ssh-copy-id root@192.168.4.207
- The authenticity of host '192.168.4.207 (192.168.4.207)' can't be established.
- ECDSA key fingerprint is d3:16:2c:9a:9d:91:28:c8:74:9c:af:2d:04:82:c9:66.
- Are you sure you want to continue connecting (yes/no)? yes // 首次连 yes 确认
- root@192.168.4.207's password: // 验证对方的密码
- Number of key(s) added: 1
- Now try logging into the machine, with: "ssh'root@192.168.4.207'"
- and check to make sure that only the key(s) you wanted were added.
3) 验证免密码登录效果
- [root@svr7 ~]# ssh root@192.168.4.207
- Last login: Fri Jan 13 09:52:08 2017 from 192.168.4.110
- [root@pc207 ~]# // 确认已免密码连入远程主机
- [root@pc207 ~]# exit // 退出 SSH 登录环境
登出
- Connection to 192.168.4.207 closed.
- [root@svr7 ~]# // 已反对原客户机
步骤三: 编写镜像同步脚本并测试效果
1) 编写脚本文件 / root/isync.sh
- [root@svr7 ~]# vim /root/isync.sh
- #!/bin/bash
- FROM_DIR="/var/www/html/"
- RSYNC_CMD="rsync -az --delete $FROM_DIR root@192.168.4.207:/var/www/html"
- while inotifywait -rqq -e modify,move,create,delete,attrib $FROM_DIR
- do
- $RSYNC_CMD
- done &
- [root@svr7 ~]# chmod +x /root/isync.sh
2) 运行脚本
- [root@svr7 ~]# /root/isync.sh
- [root@svr7 ~]# pgrep -l inotify // 确认任务在运行
- 56494 inotifywait
3) 测试同步效果
在 svr7 上向 / var/www/html / 目录下添加一个测试网页 (触发同步):
- [root@svr7 ~]# touch /var/www/html/a.txt
- [root@svr7 ~]# ls /var/www/html/
- a.txt libreoffice
在 pc207 上检查 / var/www/html / 目录, 内容应该已经与 svr7 上的同名目录一致:
- [root@pc207 ~]# ls /var/www/html
- a.txt libreoffice
4) 结束测试后, 在 svr7 上停止监控任务
- [root@svr7 ~]# pkill -9 inotify
- [root@svr7 ~]# pgrep -l inotify // 确认已没有监控任务
- [root@svr7 ~]#
来源: http://www.bubuko.com/infodetail-2662581.html