rsync 同步服务

复制: 源所有数据
同步: 只传输变化数据

• 命令用法
– rsync [选项...] 源目录 目标目录

• 本地同步
– rsync [选项...] 本地目录1 本地目录2
– rsync [选项...] 本地目录1/ 本地目录2

[root@svr7 ~]# mkdir /todir
[root@svr7 ~]# rsync -a /boot /todir //同步整个文件夹
[root@svr7 ~]# rsync -a /boot/ /todir/ //只同步目录下的数据

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

##########################################
[root@svr7 /]# rm -rf /opt/
[root@svr7 /]# rm -rf /mnt/

[root@svr7 /]# cp /etc/passwd /opt
[root@svr7 /]# touch /opt/1.txt
[root@svr7 /]# ls /opt/
[root@svr7 /]# ls /mnt/

[root@svr7 /]# rsync -avz /opt/ /mnt
[root@svr7 /]# ls /opt/
[root@svr7 /]# ls /mnt/

[root@svr7 /]# touch /opt/2.txt

[root@svr7 /]# rsync -avz /opt/ /mnt
[root@svr7 /]# ls /opt/
[root@svr7 /]# ls /mnt/
######################################################
--delete : 删除目标路径比源目录多余的文档

[root@svr7 /]# rsync -avz --delete /opt/ /mnt
[root@svr7 /]# ls /opt/ /mnt

[root@svr7 /]# touch /mnt/nsd.txt
[root@svr7 /]# ls /opt/ /mnt

[root@svr7 /]# rsync -avz --delete /opt/ /mnt
[root@svr7 /]# ls /opt/ /mnt
#####################################################
远程同步 rsync+ssh
• 服务端要求
– 开启sshd服务,并提供授权的用户、密码

命令格式:
rsync 选项 /路径/目录/ 用户名@对方IP地址:/路径/对方目录
rsync 选项 用户名@对方IP地址:/路径/对方目录/ /路径/目录/
虚拟机A:

rsync -avz --delete /opt/ root@192.168.4.207:/mnt/

虚拟机B:

ls /mnt

######################################################
实时的远程同步

虚拟机A:

rsync -avz --delete /opt/ root@192.168.4.207:/mnt/

虚拟机B:

ls /mnt

一 公钥 私钥 实现的虚拟机A与虚拟机B 验证同步 无需密码

1.虚拟机A生成公钥 私钥
[root@svr7 /]# ssh-keygen #一路回车
[root@svr7 /]# ls /root/.ssh/

[root@svr7 /]# ssh-copy-id root@192.168.4.207 #拷贝公钥

[root@svr7 /]# ssh root@192.168.4.207

[root@pc207 ~]# exit #退出到B

二 安装一个软件,实时监控一个目录内容,有变化会报告

步骤1:将该inotify-tools-3.13.tar.gz上传 虚拟机A
真机上操作:

scp /root/桌面/tools/inotify-tools-3.13.tar.gz root@192.168.4.7:/root/

步骤2:安装gcc和make开发工具
[root@svr7 /]# yum -y install gcc make
步骤3:tar解包,释放源代码至指定目录

tar -xf /root/inotify-tools-3.13.tar.gz -C(大写) /opt/

ls /opt/

步骤4: ./configure 配置,指定安装目录/功能模块等选项

cd /opt/inotify-tools-3.13/

   # ./configure  

步骤5:make 编译,生成可执行的二进制程序文件

make

步骤6:make install 安装,将编译好的文件复制到安装目录

make install

# which inotifywait 
# ls /usr/local/bin/inotifywait

#############################################
inotifywait监控
• 基本用法
– inotifywait [选项] 目标文件夹

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

inotifywait------> while

rsync -avz --delete /opt/ root@192.168.4.207:/mnt/

最容易形成死循环

while [条件判断]
do
循环执行语句
done

[root@svr7 /]# vim /root/1.sh
#!/bin/bash
i=0

while [ $i -le 10 ]
do
i=expr $i + 1
echo $i
done

[root@svr7 /]# chmod +x /root/1.sh
[root@svr7 /]# /root/1.sh

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

三 书写实时同步的脚本

[root@svr7 /]# vim /root/rsync.sh

#!/bin/bash
dir=/opt/
while inotifywait -rqq $dir
do
rsync -az --delete $dir root@192.168.4.207:/mnt/
done

[root@svr7 /]# chmod +x /root/rsync.sh

[root@svr7 /]# /root/rsync.sh

######################################################
DNS的分离解析(视图解析)
• 当收到客户机的DNS查询请求的时候
– 能够区分客户机的来源地址
– 为不同类别的客户机提供不同的解析结果(IP地址)

不同的客户端区解析同一个域名,解析结果不同

前提: 客户端的分类要合理 , 所有的客户端都要找到自己的分类
一旦使用view功能,所有的zone都必须在view中

view "haha" {
match-clients { 192.168.4.7; }
zone "12306.cn" {
......12306.cn.zone;
}; };

view "xixi" {
match-clients { any; }
zone "12306.cn" {
...... 12306.cn.abc
}; };

客户端192.168.4.207---->www.tedu.cn----->1.1.1.1
客户端非192.168.4.207---->www.tedu.cn----->2.2.2.2

options {
directory "/var/named";
};
view "haha" {
match-clients { 192.168.4.207; };
zone "tedu.cn" IN {
type master;
file "tedu.cn.haha";
};
};
view "xixi" {
match-clients { any; };
zone "tedu.cn" IN {
type master;
file "tedu.cn.xixi";
};
};

– 根据view调用的顺序,“匹配即停止”