第十三章实验(一):必备技能rsync同步备份
注意:还原192.168.100.150和192.168.100.151
1.rsync同步备份
1)了解rsync
rsync是一个开源快速备份工具
功能:
可以在不同主机之间镜像同步整个目录树;
支持增量备份
保持权限,链接,支持传输压缩
比较适合做异地备份,镜像服务器
2)rsync角色:
发起端:负责发起rysnc同步操作客户机
备份源:负责响应rysnc的请求的服务器
同步的方向:
上行同步(上传):备份源提供文档的目标位置(data在发起端),发起端使用用户必须对目录有写入的权限
下行同步(下载):备份源负责提供文档原始位置(data在备份源),发起端使用的用户只需要对data有读取权限
3)备份源的类型:rysnc源,ssh源
4)rsync的基本用法:
local:
rsync -av --delete data/ /tmp ##data是空目录,--delete快速删除/tmp目录
rsync -av /etc /tmp/ ##复制整个etc目录
rsync -av /etc/ /tmp ##f复制etc目录的内容
远程同步备份:SSH
语法:
下行同步:
rsync -avzH 用户@IP:data 本地目录
上行同步:
rsync -avzH data 用户@IP:/远程主机目录
案例:下载
备份源操作:
mkdir /opt/data
touch /opt/data/{1..9}.txt
useradd r_get
echo 123123 |passwd --stdin r_get
rpm -qa rsync ##确认已经安装rsync软件
netstat -uptln |grep 22
确认r_get用户对/opt/data有读权限
发起端操作:
rsync -avzH [email protected]:/opt/data/ /tmp ##下载
rsync -avzH [email protected]:/opt/data /tmp ##对比差异
rsync -avzH [email protected]:/opt/data/ /tmp --delete ##保证数据一致,下行同步以同步源为依据
案例:上传
备份源操作:
mkdir /opt/data_bak
useradd r_put
echo 123123 |passwd --stdin r_put
setfacl -m u:r_put:rwx /opt/data_bak ##确保用户对目标目录有写入权限
getfacl /opt/data_bak
确保rsync和sshd正常
发起端操作:
mkdir /data
touch /data/{1..9}.avi
rsync -avzH /data [email protected]:/opt/data_bak
rsync -avzH /data/ [email protected]:/opt/data_bak
rsync -avzH /data/ [email protected]:/opt/data_bak --delete
在备份源上验证结果。
案例:ssh密钥对认证后rsync同步
ssh-keygen -t rsa
ssh-copy-id [email protected] ##给下载用户上传公钥匙
ssh-copy-id [email protected]
ssh [email protected] ##登录验证,r_put同理
执行rssync同步验证:
vi /root/bin/rsync.sh
#!/bin/bash
rsync -avzH /data/ [email protected]:/opt/data_bak --delete
rsync -avzH [email protected]:/opt/data/ /tmp --delete
grep rsync /var/spool/cron/root
if [ $? -ne 0 ];then
echo "30 0 * * 6 /root/bin/rsync.sh &>/var/log/rsync.log" >/var/spool/cron/root
:wq
chmod +x /root/bin/rsync.sh
2.inotify+rsync实时同步:上行同步
1)安装inotify-tools
tar zxvf inotify-tools-*.tar.gz -C /usr/src/
cd /usr/src/inotify-tools-*/
./configure &&make &&amake install
ls /usr/local/bin/inotify*
2)inotify的使用:
vi /etc/sysctl.conf
fs.inotify.max_queued_events = 16384 ##监控事件队列数
fs.inotify.max_user_instances = 1024 ##监控实例数
fs.inotify.max_user_watches = 1048576 ##监控的文件数量
:wq
sysctl -p
inotifywait -mrq -e modify,create,attrib,move,delete /root/data ##-m持续监控,r递归目录,q简化输出,-e指定监控事件:modify修改、create创建、attrib权限修改、move移动、delete删除;在其他终端操作文件,查看变化
vi rsync_inotify.sh ##实时同步脚本
#!/bin/bash
RSYNC="rsync -avzH /root/data/ [email protected]:/opt/data_bak/ --delete"
INT_CMD="inotifywait -mrq -e modify,create,move,delete,attrib /root/data/"
$INT_CMD |while read DIRECOTRY EVENT FILE;do
$RSYNC
done
:wq
chmod +x rsync_inotify.sh
rsync_inotify.sh & ##启动脚本,后台运行
测试验证。