SERVICE05 - rsync同步操作 inotify实时同步

本文详细介绍了PXE网络装机的整个流程,涉及dhcpd、httpd、yum、tftp等服务的配置,以及在CentOS7中通过rsync和inotify实现文件同步的步骤。通过配置Web镜像同步,利用inotifywait监控文件变化,实现svr7和pc207之间的实时同步。

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

PXE网络装机,综合性比较强
涉及到服务:dhcpd、httpd、yum、tftp
涉及到文件:tftp
 

1. 通过网络方式来实现安装操作系统

HTTP服务端   (为客户机提供软件资源)
需要的结果: http://192.168.4.254/rh7dvd
可能遇到的问题:
1)httpd服务器没启动
2)防火墙及SELinux忘记关闭
3)软件资源(RHEL7镜像文件)没有挂载成功
4)访问地址/目录名称写错

 DHCP服务端  (为客户机分配IP地址、告诉客户机需要去访问的下一个启动服务器在哪里及去找启动服务器索取一个启动文件)
1)装包 dhcp
2)配置

vim  /etc/dhcp/dhcpd.conf

subnet  网络段地址   netmask  子网掩码  {
range  起始IP地址    结束IP地址;
next-server  TFTP启动服务器的IP地址;
filename  ”启动文件的文件名(pxelinux.0)”;
}

 

3)起服务 dhcpd

TFTP启动服务端  (为客户机提供启动文件、装系统用的素材)

 

 

1)装包 tftp-server

2)配置,提供各种素材文件(用来启动客户机、为客户机装系统)

### 网卡启动文件,以及配套的模块文件、背景图片
/var/lib/tftpboot/pxelinux.0
/var/lib/tftpboot/vesamenu.c32
/var/lib/tftpboot/splash.png

### 决定客户机显示界面如何展示
/var/lib/tftpboot/pxelinux.cfg/default

@@@ 这些文件从哪来:
sysliniux 软件包安装的结果文件
# yum  provides  ”*/pxelinux.0” 【查哪个软件包能提供XX文件】
# rpm  -ql  syslinux   【查软件包装了哪些文件】
XX版本光盘目录 isolinux/isolinux.cfg

### XX系统安装引导文件(内核、初始化文件)
/var/lib/tftpboot/rhel7/vmlinuz
/var/lib/tftpboot/rhel7/initrd.img
/var/lib/tftpboot/rhel6/vmlinuz
/var/lib/tftpboot/rhel6/initrd.img
.. .. 
@@@ 这些文件从哪来:
找XX版本系统的光盘目录 isolinux/
 

3)起服务 tftp

[root@svr7 html]# systemctl restart tftp

 

关于客户机的PXE启动菜单的显示

 

1.手动安装 

# vim  /var/lib/tftpboot/pxelinux.cfg/default
63 kernel rhel7/vmlinuz

 

64 append initrd=rhel7/initrd.img  inst.stage2=http://192.168.4.254/rh7dvd

 

2. 无人值守安装   (让网络装机的过程能够自动完成)

# vim  /var/lib/tftpboot/pxelinux.cfg/default
63 kernel rhel7/vmlinuz
64 append initrd=rhel7/initrd.img ks=http://192.168.4.254/ks-rhel7.cfg

准备工作:
1)提前准备一份可用的应答文件 ks-rhel7.cfg  (把这个文件放到HTTP服务端的/var/www/html/目录下)

# system-config-kickstart 
先装system-config-kickstart包
修改 yum源的id,设为 [development]
2)确保从客户机 http://192.168.4.254/ks-rhel7.cfg 能够访问第1步准备的这一份应答文件

 

TFTP+DHCP启动服务器备份与恢复
备份:

 

# tar  -zcPf  /opt/pxeconf.tar.gz  /var/lib/tftpboot/  /etc/dhcp/dhcpd.conf

恢复:

# yum  -y  install  dhcp  tftp-server
# tar  -xPf   /opt/pxeconf.tar.gz
# systemctl  restart  dhcpd  tftp

关于客户机的PXE启动菜单的显示(补充):
# vim  /var/lib/tftpboot/pxelinux.cfg/default
default vesamenu.c32 //支持图形显示
timeout 600 //等待超时60秒
menu background  splash.png   //背景图片
menu title 菜单标题文字
label 启动项1的ID
  menu label 启动项1显示的文字
  kernel 内核文件vmlinuz的相对路径
  append initrd=初始化文件initrd.img的相对路径 .. ..
label centos7
  menu label Install ^CentOS 7.4   //^定义快捷键
  kernel centos7/vmlinuz
  append initrd=centos7/initrd.img .. .. 
label local
  menu label Boot from ^local drive
  menu default
  localboot 0xffff

配置default文件时,可以使用 ^ 来定义快捷键,加载menu  label 后面的显示文件内的某一个字母前面
vim末行模式,删除连续的多行文本 ——
:73,114d

rsync同步

应用场景:
DNS轮询、分离解析,==》
同一个域名www.tedu.cn,有多个IP地址/服务器
rsync 同步操作 (同步主机上的内容,让从机的内容跟主机保持一致)
保持 主机1的目录1    主机2的目录2  的内容要一致

# rsync  目录1   目录2
同步与复制(cp、scp)命令不一样

假设目录1的大小是500M,
执行 cp、scp 复制时,也需要传输500M数据到 目录2

执行 rscyn 同步时,只传输目录2中没有/不一样的数据

假设 目录1 增加/修改了 5M,

 

rsync同步工具的常用选项:

  • -n:测试同步过程,不做实际修改
  • –delete:删除目标文件夹内多余的文档
  • -a:归档模式,相当于-rlptgoD
  • -v:显示详细操作信息
  • -z:传输过程中启用压缩/解压

本地同步 

rsync [选项…] 本机目录1    本机目录2

rsync+sshd远程同步 

浏览远程目录资源:

# rsync  远程用户@远程主机地址:远程目录/

上传(上行同步):

# rsync [选项…] 本机目录1   远程用户@远程主机地址:远程目录2
下载(下行同步):
# rsync [选项…] 远程用户@远程主机地址:远程目录1  本机目录2

请思考:从远程主机获取一个文件有哪些方式?
U盘、电子邮件、httpd、ftp、nfs、samba、scp、rsync、……

同步的含义 —— 两边数据要完全一样(时间、属性、去除多余文档)
# rsync  -az  –delete  目录1/   目录2

统计目录占用的空间大小
# du  -sh  /etc

inotify+rsync 实时同步

前面的操作是由管理员手动执行rsync同步操作

下面通过计划任务定期执行rsync同步操作(间隔时间)

当目录1的内容变化时,马上执行同步到目录2

需要安装: inotify-tools

inotifywait常用命令选项:

  • -m,持续监控(捕获一个事件后不退出)
  • -r,递归监控、包括子目录及文件
  • -q,减少屏幕输出信息
  • -e,指定监视的 modify、move、create、delete、attrib 等事件类别

练习:inotify+rsync 实时同步 ——
目录1:svr7上的 /var/www/html/
目录2:pc207上的 /var/www/html/
效果:当svr7上的目录内容变化时,pc207上也会立即做相应的变化

在CentOS7真机上,获取安装文件并上传给虚拟机svr7 

# wget  点击打开链接   (如果在linux中下载遇见域名解析失败,请用浏览器打开这个网址,并下载,然后传入linux虚拟机)

# scp inotify-tools-3.13.tar.gz 192.168.4.7:/root

在虚拟机svr7上

1)安装 inotify-tools 软件包

# yum  -y  install  gcc //准备编译环境【厨房】

# tar  -xf  inotify-tools-3.13.tar.gz  -C  /usr/src/
# cd  /usr/src/inotify-tools-3.13/
# ./configure   //配置【准备几颗鸡蛋.. ..】
# make //编译【炒菜】
# make  install   //安装【装盘上桌】

# inotifywait  –help //确认安装结果(命令可用)

2)学会使用 inotifywait 命令来实现监控

 

# inotifywait  -rq  -e  create,move,delete,modify,attrib  目录1/

3)inotifywait+rsync结合,实现实时同步
while  inotifywait  -rq  -e  create,move,delete,modify,attrib  目录1/
do
rsync  …  目录1/   目录2
done


[root@svr7 ~]# cat /root/isync.sh 

#!/bin/bash
while  inotifywait  -rq  -e  create,move,delete,modify,attrib  /opt/
do
rsync  -az  –delete  /opt/   /opt2
done &

实现SSH免密码登录
实现方式: 提前部署一个密钥文件到远程机器
1)在 svr7 生成密钥文件
===> 先检查是否已经有密钥文件
# ls  ~/.ssh/id*
===> 如果没有密钥文件,那么再生成(否则跳过此步)
# ssh-keygen //根据提示确认3次    

或 ssh-keygen -t rsa -f ~/.ssh/id_rsa  -N “”
2)把密钥部署给远程的机器 pc207

# ssh-copy-id  root@192.168.4.207

3)验证结果(在 svr7 上远程登 pc207 不需要密码)
# ssh  root@192.168.4.207
.. .. 不需要密码直接登录成功  

 

如果pc207不想被svr7免密登录,可以   rm -rf  ~/.ssh/authorized_keys

客户机svr7上的用户A创建密钥,并且部署给pc207的用户B、部署给pc208的用户C
最终实现的效果:
在svr7上的用户A 可以执行  ssh  B@pc207 ,免密码
在svr7上的用户A 可以执行  ssh  C@pc208 ,免密码
 

1)在svr7上编写/root/isync.sh实时同步脚本


 
  1. #!/bin/bash
  2. mulu1= "/var/www/html/"
  3. tongbu= "rsync -az --delete /var/www/html/ root@192.168.4.207:/var/www/html"
  4. while inotifywait -rqq -e create,move,delete,modify,attrib $mulu1</span></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword"><span class="hljs-keyword">do</span></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-variable"><span class="hljs-variable">$tongbu
  5. done &

2)为脚本添加执行权限

# chmod  +x  /root/isync.sh
3)执行脚本并测试
# /root/isync.sh 

 

 修改svr7上/var/www/html/目录内容,观察pc207变化

 

在svr7上向/var/www/html/目录下添加一个测试网页(触发同步):

[root@svr7 ~]# touch  /var/www/html/a.txt

查看监控任务是否运行

[root@svr7 ~]# pgrep  -l  inotify                     //确认已没有监控任务

 需要停止实时同步时,pkill  -9  inotifywait

inotifywait的小bug

当被监控目录下有子目录被删除时,会导致 inotifywait 退出

[root@svr7 ~]# pgrep -l inotify
12189 inotifywait

[root@svr7 html]# rm -rf test/      
/var/www/html/test/ IGNORED 

[root@svr7 html]# pgrep -l inotif  (inotifywait进程被杀死)

[root@svr7 html]# 

 


 
  1. #!/bin/bash
  2. function syncfile(){
  3. for host in $@</span>;<span class="hljs-keyword">do</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> rsync -aSH --delete /usr/<span class="hljs-built_in">local</span>/hadoop/etc <span class="hljs-variable">${host}:/usr/ local/hadoop/ -e 'ssh' &
  4. rsync /etc/hosts ${host}</span>:/etc/hosts</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">done</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">wait</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">}</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">if</span> (( <span class="hljs-variable">$# > 0 )); then
  5. syncfile $@</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="12"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">else</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="13"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">echo</span> <span class="hljs-string">"<span class="hljs-variable">${0} host1 host2 host3 ... ... host(N)"
  6. fi

 

日志管理(日记管理)  

 通过去查看系统/程序/服务的日记来了解发生了什么事,从而可以排查错误、获取证据

常见的日志文件有哪些? ——
内核/系统日志:文本文件,记录格式类似
/var/log/messages —— 公共日志文件(所有系统服务可以记录)
/var/log/cron —— 计划任务配置及执行相关的消息
/var/log/secure —— 安全认证相关的消息

练习:分析内核/系统日志
1)故意改错 /etc/named.conf 文件
查看日志文件 /var/log/messagese 末尾的内容
2)编辑一个计划任务,内容任意
查看日志文件 /var/log/cron 末尾的内容
3)远程连接svr7,以一个不存在的用户或错误的密码验证
查看日志文件 /var/log/secure 末尾的内容

熟悉常见的计算机专业英语单词 ——
error:错误的
failed:失败的
unknown:未知的
incorrect:不正确的
invalid:无效的
successful:成功的

 

 

……

常见的用户日志文件有哪些? ——
用户日志:二进制文件

练习:分析用户登录情况
1)查看当前有哪些用户登录、在做什么操作
users,列出登录的用户名
who,列出登录用户名、来源
w,列出系统负载、登录用户名、来源 、在执行的命令、……
2)了解过去有哪些用户登录过
last  -2  [用户名]
3)了解过去有哪些用户登录失败过
lastb  -2  [用户名]

实时跟踪日志文件的变化(tailf)

# tailf   /var/log/maillog
.. .. 新增的日志内容会立即显示出来

 

 

 

筛选日志内容(journalctl)

 

 

 

常见的系统日志及各自用途:

  • /var/log/messages,记录内核消息、各种服务的公共消息
  • /var/log/dmesg,记录系统启动过程的各种消息
  • /var/log/cron,记录与cron计划任务相关的消息
  • /var/log/maillog,记录邮件收发相关的消息
  • /var/log/secure,记录与访问限制相关的安全消息

日志消息的优先级(高–>低):

  • EMERG(紧急):级别0,系统不可用的情况
  • ALERT(警报):级别1,必须马上采取措施的情况
  • CRIT(严重):级别2,严重情形
  • ERR(错误):级别3,出现错误
  • WARNING(警告):级别4,值得警告的情形
  • NOTICE(注意):级别5,普通但值得引起注意的事件
  • INFO(信息):级别6,一般信息
  • DEBUG(调试):级别7,程序/服务调试消息

RHEL7提供的journalctl日志工具的常见用法:

  • journalctl | grep 关键词
  • journalctl -u 服务名 -p 优先级
  • journalctl -n 消息条数
  • journalctl –since=”yyyy-mm-dd HH:MM:SS” –until=”yyyy-mm-dd HH:MM:SS

添加 –no-pager 阻止左右分屏

 提示:按 q 退出

重点:
1)理解远程同步的含义
2)掌握 rsync+imodifwait 远程同步操作

3)了解常见的日志文件,学会通过查看这些日志来找出问题原因

rootkit 一套伪造过的系统命令

 

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

 

4 案例4:配置Web镜像同步

4.1 问题

本例要求为两台Web服务器svr7、pc207的网页文档目录配置镜像同步,主要基于inotifywait监控技术实现实时触发操作,需要完成下列任务:

  1. 以 svr7 为发起方,原始目录为 /var/www/html/
  2. 以 pc207 为同步目标,基于SSH免密验证
  3. 编写 inotify+rsync 同步脚本,验证实时同步效果

4.2 方案

inotifywait与rsync的结合,主要思路:

 
 

  1. while inotifywait监控操作
  2. do
  3. 需要执行的rsync同步操作
  4. done

4.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:为主机svr7、pc207部署同步目录

双方的目录均为/var/www/html/,如果安装了httpd,此目录会自动出现。

1)确认svr7的目录内容

 
 

  1. [root@svr7 ~]# yum -y install httpd
  2. .. ..
  3. [root@svr7 ~]# ls /var/www/html/                     //向目录下提供一些测试文件
  4. libreoffice

2)确认pc207的目录内容

 
 

  1. [root@pc207 ~]# yum -y install httpd
  2. .. ..
  3. [root@pc207 ~]# ls /var/www/html                 //初始目录无数据
  4. [root@pc207 ~]#

步骤二:为svr7配置到pc207的SSH密钥对验证,实现免密码交互

1)检查当前用户是否已经有可用的SSH密钥对文件

 
 

  1. [root@svr7 ~]# ls ~/.ssh/id_*
  2. /root/.ssh/id_rsa /root/.ssh/id_rsa.pub

如果找不到id_rsa、id_rsa.pub密钥对文件,则需要执行下列操作创建:

 
 

  1. [root@svr7 ~]# ssh-keygen
  2. Generating public/private rsa key pair.
  3. Enter file in which to save the key (/root/.ssh/id_rsa):     //按回车,确认存放位置
  4. Enter passphrase (empty for no passphrase):     //按回车,确认不要密码
  5. Enter same passphrase again:                     //再次按回车,确认
  6. Your identification has been saved in /root/.ssh/id_rsa.
  7. Your public key has been saved in /root/.ssh/id_rsa.pub.
  8. The key fingerprint is:
  9. 00:a7:cb:2d:9d:b8:8a:df:f5:ff:5b:ed:bd:04:10:fe root@svr7
  10. The key’s randomart image is:
  11. +–[ RSA 2048]—-+
  12. | … |
  13. | + . . |
  14. | . . o |
  15. | . = o o |
  16. | = + S E |
  17. | o .. |
  18. | . . …|
  19. | . o . . ….|
  20. |..o . ….o. .+|
  21. +—————–+

2)将当前用户的SSH公钥部署到远程主机

 
 

  1. [root@svr7 ~]# ssh-copy-id root@192.168.4.207
  2. The authenticity of host ‘192.168.4.207 (192.168.4.207)’ can‘t be established.
  3. ECDSA key fingerprint is d3:16:2c:9a:9d:91:28:c8:74:9c:af:2d:04:82:c9:66.
  4. Are you sure you want to continue connecting (yes/no)? yes         //首次连yes确认
  5. root@192.168.4.207’s password:                     //验证对方的密码
  6.  
  7. Number of key(s) added: 1
  8.  
  9. Now try logging into the machine, with: “ssh ‘root@192.168.4.207’”
  10. and check to make sure that only the key(s) you wanted were added.

3)验证免密码登录效果

 
 

  1. [root@svr7 ~]# ssh root@192.168.4.207
  2. Last login: Fri Jan 13 09:52:08 2017 from 192.168.4.110
  3. [root@pc207 ~]#                                     //确认已免密码连入远程主机
  4. [root@pc207 ~]# exit                                 //退出SSH登录环境
  5. 登出
  6. Connection to 192.168.4.207 closed.
  7. [root@svr7 ~]#                                     //已反对原客户机

步骤三:编写镜像同步脚本并测试效果

1)编写脚本文件/root/isync.sh

 
 

  1. [root@svr7 ~]# vim /root/isync.sh
  2. #!/bin/bash
  3. FROM_DIR=“/var/www/html/”     
  4. RSYNC_CMD=“rsync -az –delete $FROM_DIR root@192.168.4.207:/var/www/html”
  5. while inotifywait -rqq -e modify,move,create,delete,attrib $FROM_DIR
  6. do
  7. $RSYNC_CMD
  8. done &
  9. [root@svr7 ~]# chmod +x /root/isync.sh

2)运行脚本

 
 

  1. [root@svr7 ~]# /root/isync.sh
  2. [root@svr7 ~]# pgrep -l inotify                     //确认任务在运行
  3. 56494 inotifywait

3)测试同步效果

在svr7上向/var/www/html/目录下添加一个测试网页(触发同步):

 
 

  1. [root@svr7 ~]# touch /var/www/html/a.txt
  2. [root@svr7 ~]# ls /var/www/html/
  3. a.txt libreoffice

在pc207上检查/var/www/html/目录,内容应该已经与svr7上的同名目录一致:

 
 

  1. [root@pc207 ~]# ls /var/www/html
  2. a.txt libreoffice

4)结束测试后,在svr7上停止监控任务

 
 

  1. [root@svr7 ~]# pkill -9 inotify
  2. [root@svr7 ~]# pgrep -l inotify                     //确认已没有监控任务
  3. [root@svr7 ~]#

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值