本节所讲内容:
- rsync 远程同步
- 实战1: 备份/var/www/html 目录
- 实战2: 使用ssh密钥实现无交互备份
- 实战3:配置rsync+inotify实现实时同步
- 实验环境:
服务端:xuegod63.cn IP:192.168.10.63
客户端:xuegod64.cn IP:192.168.10.64
rsync 远程同步: 一款快速增量备份工具 Remote Sync,远程同步 支持本地复制,或者与其他SSH、rsync主机同步。
作用:做数据备份
备份方式:
完全备份
增量备份
rsync客户端 好处:
优点: 第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。支持增量备份。
选择性的保持 : 符号链接,硬链接,文件属性,权限 及时间 等。
传输前执行压缩。适用于异地备份 ,镜像服务器等应用 。
安全,使用ssh做为传输端口。 sftp ,ssh
官网:http://rsync.samba.org
首先认识同步数据的方式:
推: 一台主机负责把数据传给其它主机。服务器开销大。适合后端服务器比较少
拉: 所有主机定时去找一主机拉数据 。 可能会导致数据同步缓慢。好处,节省服务器开销。
方法二:
实战:使用rsync进行数据同步
rsync命令的基本用法:
格式:rsync 【选项】 源文件 目标文件
常见的选项:
-a,--archive(存档) 归档模式,表示以递归的方式传输文件,并且保持文件属性,等同于加了参数-rlptgoD
-r,–recursive 对子目录以递归模式处理
-l,--links 表示拷贝链接文件
-p , --perms 表示保持文件原有权限
-t , --times 表示保持文件原有时间
-g , --group 表示保持文件原有属用户组
-o , --owner 表示保持文件原有属主
-D , --devices 表示块设备文件信息
-z , --compress 表示压缩传输
-H 表示硬连接文件
-A 保留ACL属性信息
-P 显示传输进度
--delete 删除那些目标位置有而原始位置没有的文件
实战1: 备份xuegod63的/var/www/html 目录到xuegod64的/web-back。
开始备份:
xuegod63: 创建用于测试的数据
[root@xuegod63 ~]# cp -r /boot/grub/ /var/www/html/
备份xuegod63的/var/www/html 目录到xuegod64的/web-back
注:rsync是基于ssh协议。需要知道对端服务器的root和密码
[root@xuegod63 ~]# rsync -azP --delete /var/www/html/ [email protected]:/web-back
常见的选项:
-a,--archive(存档) 归档模式,表示以递归的方式传输文件,并且保持文件属性,等同于加了参数-rlptgoD
-z , --compress 表示压缩传输
-P 显示传输进度
--delete 删除那些目标位置有而原始位置没有的文件
你打算几点备份?
24点,不行。 业务最不忙的时候。
3:00 人都休息。 找一个人最少的时间去备份。 不是24:00.
每天晚上3点起来备份???
实战2: 使用ssh密钥实现无交互备份。做成脚本,将xuegod63上的数据,定期备份到xuegod64上。
在xuegod63上生成密钥对
[root@xuegod63 ~]# 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: #直接回库
ac:64:7f:6c:54:41:a1:80:4a:ab:79:9a:6d:d1:ef:e0 [email protected]
The key's randomart image is:
+--[ RSA 2048]----+
| .. .+. |
| . . . . . |
| . o . . |
| o . . |
| o .o S . |
| o oo.o o |
| = .o.. + |
| o o. ..o |
| . E.. |
+-----------------+
查看生成的公钥和私钥:
[root@xuegod63 ~]# ls /root/.ssh/
id_rsa(私钥) id_rsa.pub(公钥) known_hosts
将公钥上传到xuegod64 数据源
[root@xuegod63 ~]# ssh-copy-id [email protected]
[email protected]'s password:
Now try logging into the machine, with "ssh '[email protected]'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
相当于你执行了:
[root@xuegod63 ~]# scp /root/.ssh/id_rsa.pub [email protected]:/root/.ssh/authorized_keys
查看:
[root@xuegod64 ~]# ls /root/.ssh/
authorized_keys known_hosts
测试,不输密码直接登录:
[root@xuegod63 ~]# ssh [email protected]
[rget1@xuegod64 ~]# exit
测试,不输密码直接备份:
[root@xuegod64 ~]# rm -rf /web-back/*
[root@xuegod63 ~]# rsync -azP --delete /var/www/html/ [email protected]:/web-back
登录顺序: 服务器A想直接登录B, 把A的公钥上传到B上。
扩展:
快速查找历史命令:
ctrl+R -》 输入历史命令的关键字-》按下右方向键
总结:
1、在xuegod63上生成密钥对
2、将公钥上传到xuegod64 数据源
3、执行备份命令 rsync 实现无交互备份
实战:配置rsync+inotify实现实时同步
把xuegod63.cn服务器上的/var/www/html目录时实同步到xuegod64.cn主机上的/web-back目录中。
inotify概述:
Linux内核从2.6.13版本开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件存取、删除、移动等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。
修改windows注册表,安装一些有危险性的软件。 这时,系统或安全卫士会弹出以下窗口:
使用rsync工具与inotify机制相结合,可以实现触发式备份(实时同步),只要原始位置的文档发生变化,则立即启动增量备份操作,否则处于静态等侍状态,这样一来,就避免了按固定周期备份进存在的延迟性、周期过密等问题。
查看是否支持inotify,从kernel 2.6.13开始正式并入内核。
[root@xuegod63 ~]# uname -r
2.6.32-220.el6.x86_64
安装inotify-tools-3.13.tar:
上传
[root@xuegod63 ~]# rpm -ivh /mnt/Packages/lrzsz-0.12.20-27.1.el6.x86_64.rpm
rz 上传
sz 下载
安装inotify-tools-3.13.tar:
[root@xuegod63 ~]# tar -zxvf inotify-tools-3.13.tar.gz
[root@xuegod63 ~]# cd inotify-tools-3.13
[root@xuegod63 inotify-tools-3.13]# ./configure 检查安装环境
[root@xuegod63 inotify-tools-3.13]# make -j 4 #make编译,将源代码编译成二进制,可执行的文件
源码编译mysql或内核: make -j 4 快。
[root@xuegod63 inotify-tools-3.13]# make install # 安装
[root@xuegod63 ~]# inotifywait -h
常用参数:
-e 用来指定要监控哪些事件。
这些事件包括: create创建,move移动,delete删除,modify修改文件内容,attrib属性更改。
-m 表示持续监控
-r 表示递归整个目录
-q 表示简化输出信息。
[root@xuegod63 ~]# inotifywait -mrq -e create,move,delete,modify /var/www/html/
在另一个终端登录,在/var/www/html目录进行相关的操作,然后,回到原来的终端查看监控变化情况。
[root@xuegod63 ~]# echo aaa > /var/www/html/a.html
[root@xuegod63 ~]# mkdir /var/www/html/test
[root@xuegod63 ~]# cp /etc/passwd /var/www/html/test/
[root@xuegod63 ~]# rm -rf /var/www/html/test/passwd
查看变化:
[root@xuegod63 ~]# inotifywait -mrq -e create,move,delete,modify /var/www/html/
/var/www/html/ CREATE a.html
/var/www/html/ MODIFY a.html
/var/www/html/ CREATE,ISDIR test
/var/www/html/test/ CREATE passwd
/var/www/html/test/ MODIFY passwd
/var/www/html/test/ DELETE passwd
注:使用inotifywait输出的监控结果中,每行记录中依次包括目录、事件、文件。据此可以识别变动情况。
编写触发式同步脚本
思路: 只要使用inotifywait检测到事件时,自动执行rsync进行同步操作即可。
[root@xuegod63 ~]# inotifywait -mrq -e create,move,delete,modify /var/www/html/
/var/www/html/ CREATE a.html
[root@xuegod63 ~]# cat a.sh
#!/bin/bash
inotifywait -mrq -e create,move,delete,modify /var/www/html/ | while read a b c
do
rsync -azP --delete /var/www/html/ [email protected]:/web-back
done
[root@xuegod63 ~]# chmod +x a.sh
[root@xuegod63 ~]# ./a.sh
测试:
创建文件测试
数据已经实时同步。